Hello, is there a way to set my esp to reset when it loses connection with cayenne? There are cases in which I do not have a very stable connection to wifi and the relays remain on. Thank you!
you can turn OFF relay here:
CAYENNE_DISCONNECTED() {
digitalWrite(relay_pin, LOW);
}
Thanks for the reply. Unfortunately i can’t implement the code. This is the error message.
"Arduino: 1.8.13 (Windows Store 1.8.42.0) (Windows 10), Board: “NodeMCU 0.9 (ESP-12 Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:none OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 115200”
In file included from C:\Users\Darius\Documents\Arduino\libraries\CayenneMQTT\src/CayenneArduinoDefines.h:128:0,
from C:\Users\Darius\Documents\Arduino\libraries\CayenneMQTT\src/CayenneArduinoMQTTClient.h:21,
from C:\Users\Darius\Documents\Arduino\libraries\CayenneMQTT\src/CayenneMQTTWiFiClient.h:21,
from C:\Users\Darius\Documents\Arduino\libraries\CayenneMQTT\src/CayenneMQTTESP8266.h:27,
from C:\Users\Darius\Desktop\config_controller\ControllerNicu\sketch_sep05a\Controller1\proba_relee_reset\sketch_sep08b\sketch_sep08b.ino:4:
C:\Users\Darius\Desktop\config_controller\ControllerNicu\sketch_sep05a\Controller1\proba_relee_reset\sketch_sep08b\sketch_sep08b.ino: In function ‘void CayenneDisconnected()’:
C:\Users\Darius\Documents\Arduino\libraries\CayenneMQTT\src/CayenneHandlers.h:78:37: error: redefinition of ‘void CayenneDisconnected()’
#define CAYENNE_DISCONNECTED() void CayenneDisconnected()
^
C:\Users\Darius\Desktop\config_controller\ControllerNicu\sketch_sep05a\Controller1\proba_relee_reset\sketch_sep08b\sketch_sep08b.ino:209:1: note: in expansion of macro ‘CAYENNE_DISCONNECTED’
CAYENNE_DISCONNECTED()
^
C:\Users\Darius\Documents\Arduino\libraries\CayenneMQTT\src/CayenneHandlers.h:78:37: error: ‘void CayenneDisconnected()’ previously defined here
#define CAYENNE_DISCONNECTED() void CayenneDisconnected()
^
C:\Users\Darius\Desktop\config_controller\ControllerNicu\sketch_sep05a\Controller1\proba_relee_reset\sketch_sep08b\sketch_sep08b.ino:71:3: note: in expansion of macro ‘CAYENNE_DISCONNECTED’
CAYENNE_DISCONNECTED() {
^
Multiple libraries were found for “CayenneMQTTESP8266.h”
Used: C:\Users\Darius\Documents\Arduino\libraries\CayenneMQTT
Not used: C:\Users\Darius\Documents\Arduino\libraries\Cayenne-MQTT-ESP-master
exit status 1
Error compiling for board NodeMCU 0.9 (ESP-12 Module).
This report would have more information with
“Show verbose output during compilation”
option enabled in File → Preferences.
This is my code, if you notice other mistakes please let me know.
// #define CAYENNE_DEBUG Serial
// #define CAYENNE_PRINT Serial
#include <CayenneMQTTESP8266.h>
#include <DHT.h>
#include “ESP8266WiFi.h”
#define CAYENNE_DEBUG
#define CAYENNE_PRINT Serial
#define DHTPIN 13
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define RELAY1_PIN D1 // RELAY1 PIN
#define RELAY2_PIN D2 // RELAY2 PIN
#define RELAY3_PIN D3 // RELAY3 PIN
#define RELAY4_PIN D4 // RELAY4 PIN
#define RELAY5_PIN D5 // RELAY5 PIN
#define RELAY6_PIN D6 // RELAY6 PIN
char ssid = “xxxx”;
char wifiPassword = “xxxx”;
// Cayenne authentication info. This should be obtained from the Cayenne Dashboard.
char username = “xxxxx”;
char password = “xxxxx”;
char clientID = “xxxxx”;
bool online = false;
unsigned long onlineTime;
unsigned long prevTime;
unsigned long time4;
int disco = 0;
byte restartChip = 0;
DHT dht(DHTPIN, DHTTYPE);
void setup()
{
dht.begin();
pinMode(BUILTIN_LED, OUTPUT);
// Serial.begin(9600);
Cayenne.begin(username, password, clientID, ssid, wifiPassword);
time4 = millis();
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
pinMode(RELAY3_PIN, OUTPUT);
pinMode(RELAY4_PIN, OUTPUT);
pinMode(RELAY5_PIN, OUTPUT);
pinMode(RELAY6_PIN, OUTPUT);
digitalWrite(RELAY1_PIN, HIGH);
digitalWrite(RELAY2_PIN, HIGH);
digitalWrite(RELAY3_PIN, HIGH);
digitalWrite(RELAY4_PIN, HIGH);
digitalWrite(RELAY5_PIN, LOW);
digitalWrite(RELAY6_PIN, LOW);
}
CAYENNE_OUT_DEFAULT()
{
Cayenne.virtualWrite(0, millis());
}
CAYENNE_DISCONNECTED() {
digitalWrite(RELAY1_PIN, HIGH);
digitalWrite(RELAY2_PIN, HIGH);
digitalWrite(RELAY3_PIN, HIGH);
digitalWrite(RELAY4_PIN, HIGH);
digitalWrite(RELAY5_PIN, LOW);
digitalWrite(RELAY6_PIN, LOW);
}
void loop()
{
Cayenne.loop();
int sensorValue = analogRead(A0);
Serial.println(analogRead(A0));
float temp = dht.readTemperature(true);
float hum = dht.readHumidity();
Cayenne.virtualWrite(13, temp, TYPE_TEMPERATURE, UNIT_CELSIUS);
Cayenne.virtualWrite(14, hum, TYPE_RELATIVE_HUMIDITY, UNIT_PERCENT);
if (millis() - time4 > 20000) // used to send data to dashboard every 20 seconds
{
execute();
}
if (online == true) // blink builtin LED if online
{
digitalWrite(BUILTIN_LED, LOW);
delay(10);
digitalWrite(BUILTIN_LED, HIGH);
}
else
{
digitalWrite(BUILTIN_LED, HIGH); //turn off LED if offline
}
}
CAYENNE_IN(2)
{
// get value sent from dashboard
int currentValue = getValue.asInt(); // 0 to 1
// assuming you wire your relay as normally open
if (currentValue == 0) {
digitalWrite(RELAY1_PIN, HIGH);
} else {
digitalWrite(RELAY1_PIN, LOW);
}
}
CAYENNE_IN(4)
{
// get value sent from dashboard
int currentValue = getValue.asInt(); // 0 to 1
// assuming you wire your relay as normally open
if (currentValue == 0) {
digitalWrite(RELAY2_PIN, HIGH);
} else {
digitalWrite(RELAY2_PIN, LOW);
}
}
CAYENNE_IN(6)
{
// get value sent from dashboard
int currentValue = getValue.asInt(); // 0 to 1
// assuming you wire your relay as normally open
if (currentValue == 0) {
digitalWrite(RELAY3_PIN, HIGH);
} else {
digitalWrite(RELAY3_PIN, LOW);
}
}
CAYENNE_IN(8)
{
// get value sent from dashboard
int currentValue = getValue.asInt(); // 0 to 1
// assuming you wire your relay as normally open
if (currentValue == 0) {
digitalWrite(RELAY4_PIN, HIGH);
} else {
digitalWrite(RELAY4_PIN, LOW);
}
}
CAYENNE_IN(10)
{
// get value sent from dashboard
int currentValue = getValue.asInt(); // 0 to 1
// assuming you wire your relay as normally open
if (currentValue == 0) {
digitalWrite(RELAY5_PIN, LOW);
} else {
digitalWrite(RELAY5_PIN, HIGH);
}
}
CAYENNE_IN(12)
{
// get value sent from dashboard
int currentValue = getValue.asInt(); // 0 to 1
// assuming you wire your relay as normally open
if (currentValue == 0) {
digitalWrite(RELAY6_PIN, LOW);
} else {
digitalWrite(RELAY6_PIN, HIGH);
}
}
void execute()
{
time4 = millis();
Cayenne.virtualWrite(23, disco, “counter”, “null”);
int time2 = (millis() / 1000) / 60;
Cayenne.virtualWrite(24, time2, “counter”, “null”);
onlineTime = ((millis() - prevTime) / 1000) / 60;
Cayenne.virtualWrite(25, onlineTime, “counter”, “null”);
}
CAYENNE_CONNECTED()
{
online = true;
prevTime = millis();
}
CAYENNE_DISCONNECTED()
{
online = false;
disco++;
}
CAYENNE_IN(1)
{
restartChip = getValue.asInt();
delay(1500);
if (restartChip == 1) // if button is pressed
{
Cayenne.virtualWrite(1, 0, “digital_sensor”, “d”); // put button back to off on dashboard
Cayenne.loop(); //updates the above virtualWrite to the dashboard
delay(1500); //wait for data to transmit just encase
ESP.restart(); //triggers a restart
}
}
CAYENNE_OUT(V15)
{
int sensorValue = analogRead(A0); // rain sensor
Cayenne.virtualWrite(V15, sensorValue);
delay(1000);
}
you have two CAYENNE_DISCONNECTED
functions