Value to be displayed to Cayenne via Virtual PIN


#1

Hi all,
sorry I’m doing my first steps in Cayenne.
I had first success with toggling PINS on ARDUINO :wink:
BUT
I still struggling displaying a float value e.g. 8.97 to CAYENNE via a virtual PIN
I want to see the 8.97 in the widget …
can anybbody advice me which widget I have to use and the right settings
THANKS so much


#2

@klaus.313 welcome to cayenne community.
there are two ways to connect to cayenne and send data.
first a regular connection in where you use this code to send data to cayenne and add a custom value widget on your dashboard with same virtual pin. go to add new > custom widgets > value and fill all details with virtual pin 1.

#define CAYENNE_DEBUG         // Uncomment to show debug messages
#define CAYENNE_PRINT Serial  // Comment this out to disable prints and save space
#include "CayenneDefines.h"
#include "BlynkSimpleEsp8266.h"
#include "CayenneWiFiClient.h"
int x,
    int inputPin = 2;
char token[] = "";
char ssid[] = "";
char password[] = "";

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Cayenne.begin(token, ssid, password);
}
void loop() {
  // put your main code here, to run repeatedly:
  Cayenne.run();
}
CAYENNE_OUT(V1)
{
  Cayenne.virtualWrite(V1, 8.97);
}

the second is MQTT connection.
you have to go to: add new > bring your own device > and make note of mqtt username and password and client id. and add them in this code,

// This example shows how to connect to Cayenne using an ESP8266 and send/receive sample data.
// Make sure you install the ESP8266 Board Package via the Arduino IDE Board Manager and select the correct ESP8266 board before compiling.

//#define CAYENNE_DEBUG
#define CAYENNE_PRINT Serial
#include <CayenneMQTTESP8266.h>
// WiFi network info.
char ssid[] = "ssid";
char wifiPassword[] = "wifiPassword";

// Cayenne authentication info. This should be obtained from the Cayenne Dashboard.
char username[] = "MQTT_USERNAME";
char password[] = "MQTT_PASSWORD";
char clientID[] = "CLIENT_ID";

unsigned long lastMillis = 0;

void setup() {
  Serial.begin(9600);
  Cayenne.begin(username, password, clientID, ssid, wifiPassword);
}

void loop() {
  Cayenne.loop();
  x = digitalRead(inputPin);
  //Publish data every 10 seconds (10000 milliseconds). Change this value to publish at a different interval.
  if (millis() - lastMillis > 10000) {
    lastMillis = millis();

    //Write data to Cayenne here. This example just sends the current uptime in milliseconds.
    //Cayenne.virtualWrite(0, 8.97);

    //Some examples of other functions you can use to send data.
    //Cayenne.celsiusWrite(1, 22.0);
    //Cayenne.luxWrite(2, 700);
    //Cayenne.virtualWrite(3, 50, TYPE_PROXIMITY, UNIT_CENTIMETER);
  }
}

//Default function for processing actuator commands from the Cayenne Dashboard.
//You can also use functions for specific channels, e.g CAYENNE_IN(1) for channel 1 commands.
CAYENNE_IN_DEFAULT()
{
  CAYENNE_LOG("CAYENNE_IN_DEFAULT(%u) - %s, %s", request.channel, getValue.getId(), getValue.asString());
  //Process message here. If there is an error set an error message using getValue.setError(), e.g getValue.setError("Error message");
}

#3

Thanks, works perfect - I found the bug