23-12-2019, 09:12 PM
Buenas tardes a todos,
llevo un par de días atascado con este problema y no veo solución, incluso he seguido el github de @grafisoft, pero a mí no me funciona Github IOT
Estoy intentando implementar en un ESP8266 la función deepSleep junto con un Callback para recibir un mensaje de MQTT. Este callback lleva el nuevo valor que obtendrá el nodo para el deepSleep.
El funcionamiento sería el siguiente:
Nodo despierto -> lee callback -> realiza mediciones -> envía mediciones -> sleep(valor callback)
Sin emabrgo, la función callback no la realiza:
Nodo despierto -> realiza mediciones -> envía mediciones -> sleep(valor porDefecto)
Como dato curioso, si modifico el deepSleep por delay, si consigue entrar en la función Callback.
Dejo aquí el código que estoy empleando a ver si alguien consigue saber que puedo estar haciendo mal.
Gracias de antemano.
llevo un par de días atascado con este problema y no veo solución, incluso he seguido el github de @grafisoft, pero a mí no me funciona Github IOT
Estoy intentando implementar en un ESP8266 la función deepSleep junto con un Callback para recibir un mensaje de MQTT. Este callback lleva el nuevo valor que obtendrá el nodo para el deepSleep.
El funcionamiento sería el siguiente:
Nodo despierto -> lee callback -> realiza mediciones -> envía mediciones -> sleep(valor callback)
Sin emabrgo, la función callback no la realiza:
Nodo despierto -> realiza mediciones -> envía mediciones -> sleep(valor porDefecto)
Como dato curioso, si modifico el deepSleep por delay, si consigue entrar en la función Callback.
Dejo aquí el código que estoy empleando a ver si alguien consigue saber que puedo estar haciendo mal.
Gracias de antemano.
Código:
#include <ESP8266WiFi.h> //WIFI ESP8266
#include <PubSubClient.h> // MQTT
// Update these with values suitable for your network.
const char* ssid = "linksys";
const char* password = "";
const char* mqtt_server = "192.168.1.3";
//----------------------- CONFIG PARAMETERS------------------------
//Con este parametro se construye todos los topics para el protocolo MQTT.
// Nombre del nodo.
String NodeName = "Testing";
String TopicMQTT; //Variable para construir el Topic de MQTT.
//El tiempo de sueño se especifica en el fichero funciones.h (sleeptime).
//-----------------------------------------------------------------
WiFiClient espClient;
PubSubClient client(espClient);
const int sleeptime = 60 * 10e5; // En segundos //20 * 60 * 1000000;
int rate = 100000;
//----------------------- WIFI CONNECTION ------------------------
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
//-----------------------------------------------------------------
//----------------------- WIFI RE-CONNECTION ------------------------
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect("ESP8266Client")) {
Serial.println("connected");
// Once connected, publish an announcement...
client.publish("arboles/naranjo/info", "Conectado");
// ... and resubscribe
//client.subscribe("arboles/configuracion/rate");
client.subscribe("arboles/configuracion/rate");
//client.subscribe("despacho/luz");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
//-----------------------------------------------------------------
//----------------------- CALLBACK ------------------------
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
Serial.print("El valor entero es: ");
payload[length] = '\0';
rate = atoi((char*)payload); //Char to int
rate = rate * 1000;
Serial.println(rate);
//EEPROM.put(rate_address, rate);
}
//-----------------------------------------------------------------
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
Serial.begin(9600); //Velocidad del UART.
setup_wifi();
//Configuracion conexion a MQTT.
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void loop() {
//Conexión con el broker MQTT.
if (!client.connected()) {
reconnect();
}
client.loop();
//delay(1000);
// Tiempo de deepSleep especificado en 'sleeptime'.
//ESP.deepSleep(rate);
ESP.deepSleep(sleeptime); //, WAKE_RF_DEFAULT);
}