Buenas,
Tengo un Wemos d1 mini al que le he conectado una sensor dht22, alimentado con una batería 18650 de la cual monitoreo la tensión con la entrada analógica. Los datos obtenidos del sensor, temperatura y humedad, y la tensión de la batería los mando cada 5 minutos por mqtt (entre mensaje y mensaje el esp8266 entra en modo deep sleep) a un servidor que tengo montado con mosquitto en una raspberry pi3 y a su vez se muestran con node-red en una dashboard y también se guarda en una base de datos mariabd.
El problema que tengo es que algunas veces, bastantes, no me llegan los datos, todos o algunos de ellos. A veces solo se "salta" un envío, cada 5 minutos, y a veces puedo estar media hora, una hora, dos horas o mas sin recibir nada y sin hacer nada vuelvo a recibir.
Mi pregunta, mas que saber porque esta pasando esto, que si alguien lo sabe lo agradeceré, si no mas bien si alguien tiene alguna idea de que puedo hacer para para saber que puede estar pasando. A priori no puedo conectar al monitor serie, el montaje esta en el exterior y me gustaría resolverlo así, que es como debe funcionar.
Este es código
#include <DHT_U.h>
#include <DHT.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// Update these with values suitable for your network.
const char* ssid = "xxxxxxxxxxxxxx";
const char* password = "yyyyyyyyyyyyyyyyy";
const char* mqtt_server = "192.168.1.10";
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
//definim el DHT
#define DHTPIN D3 //definim al pina al que va conectat
#define DHTTYPE DHT22 //definim el tipus de sensor
DHT dht(DHTPIN, DHTTYPE); //definim ñes variables per inicialitzar el sensor
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(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Create a random client ID
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);
// Attempt to connect
if (client.connect(clientId.c_str())) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
dht.begin(); //inicialitzem el sensor
if (!client.connected())
reconnect();
client.loop();
float h = dht.readHumidity(); //llegim i guardem a h la humitat relativa
float t = dht.readTemperature(); //llegim i guardem a f la temperatura
int b= analogRead(A0);
float bat=2*(b*(3.1/1033.0));
Serial.println("Publish message: ");
Serial.print("Temperatura: ");
Serial.print(String(t));
Serial.println("ºC");
Serial.print("Humitat: ");
Serial.print(String(h));
Serial.println("%");
Serial.print("b= ");
Serial.println(b);
Serial.print("bat= ");
Serial.println(bat);
char t_out[8];
char h_out[8];
char bat_out[8];
dtostrf(t, 6, 2, t_out); //convertim el float en una array chart per poder enviarla
snprintf (msg, 50, t_out); //creem el missatge a enviar
client.publish("/casa/exterior/temp",msg); //Publiquem el missatge al topic corresponent
dtostrf(h, 6, 2, h_out); //convertim el float en una array chart per poder enviarla
snprintf (msg, 50, h_out); //creem el missatge a enviar
client.publish("/casa/exterior/hum",msg); //Publiquem el missatge al topic corresponent
dtostrf(bat, 6, 2, bat_out); //convertim el float en una array chart per poder enviarla
snprintf (msg, 50, bat_out); //creem el missatge a enviar
client.publish("/casa/exterior/bat",msg); //Publiquem el missatge al topic corresponent
delay(1000);
ESP.deepSleep(300000000, WAKE_RF_DEFAULT);
}
void loop() {
}
El código aun tengo que pulirlo....
He buscado en google mucho, pero no acabo de encontrar información con este problema.
Espero que me haya explicado bien, en todo caso si alguien quiere saber mas, que no dude en pedir mas info.
Adjunto también imagen del montaje


