Bonjour à tous !
J'ai plusieurs esp chez moi (nodemcuV1) qui envoient leurs info via mqtt.
J'ai essayé d'en refaire un avec un dht11, le code marchait, l'esp aussi car je l'avais au départ installé chez un ami.
Quand je le lance chez moi les publications ne sont pas reconnues par le serveur mqtt et le packetId reste à 0, signe que mqtt ne s'est pas abonné au topic.
Mon code :
#include <ESP8266WiFi.h>
#include <Ticker.h>
#include <AsyncMqttClient.h>
#include "DHT.h"
#define WIFI_SSID "Freebox-XXXXX"
#define WIFI_PASSWORD "XXXXXXX"
// Node Red on Mosquitto MQTT Broker
#define MQTT_HOST IPAddress(192, 168, 1, 30)
#define MQTT_PORT 1883
//MQTT Topics
#define MQTT_PUB_TEMP "esp/dht11/temperature"
#define MQTT_PUB_HUM "esp/dht11/humidity"
// Digital pin connected to the DHT sensor
#define DHTPIN 14
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
float temp;
float hum;
AsyncMqttClient mqttClient;
Ticker mqttReconnectTimer;
WiFiEventHandler wifiConnectHandler;
WiFiEventHandler wifiDisconnectHandler;
Ticker wifiReconnectTimer;
unsigned long previousMillis = 0;
const long interval = 5000;
void connectToWifi() {
Serial.println("Connecting to Wi-Fi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
}
void onWifiConnect(const WiFiEventStationModeGotIP& event) {
Serial.println("Connected to Wi-Fi.");
connectToMqtt();
}
void onWifiDisconnect(const WiFiEventStationModeDisconnected& event) {
Serial.println("Disconnected from Wi-Fi.");
mqttReconnectTimer.detach();
wifiReconnectTimer.once(2, connectToWifi);
}
void connectToMqtt() {
Serial.println("Connecting to MQTT...");
mqttClient.connect();
}
void onMqttConnect(bool sessionPresent) {
Serial.println("Connected to MQTT.");
Serial.print("Session present: ");
Serial.println(sessionPresent);
}
void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) {
Serial.println("Disconnected from MQTT.");
if (WiFi.isConnected()) {
mqttReconnectTimer.once(2, connectToMqtt);
}
}
void onMqttPublish(uint16_t packetId) {
Serial.print("Publish acknowledged.");
Serial.print(" packetId: ");
Serial.println(packetId);
}
void setup() {
Serial.begin(115200);
Serial.println();
dht.begin();
wifiConnectHandler = WiFi.onStationModeGotIP(onWifiConnect);
wifiDisconnectHandler = WiFi.onStationModeDisconnected(onWifiDisconnect);
mqttClient.onConnect(onMqttConnect);
mqttClient.onDisconnect(onMqttDisconnect);
mqttClient.onPublish(onMqttPublish);
mqttClient.setServer(MQTT_HOST, MQTT_PORT);
// If your broker requires authentication (username and password), set them below
mqttClient.setCredentials("nodemcu_X", "XXXXXXX");
connectToWifi();
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
//Sauvegarde le temps
previousMillis = currentMillis;
hum = dht.readHumidity();
temp = dht.readTemperature();
if (isnan(temp) || isnan(hum)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
delay(100);
// Publish an MQTT message on topic esp8266/dht/temperature
uint16_t packetIdPub1 = mqttClient.publish(MQTT_PUB_TEMP, 1, true, String(temp).c_str());
Serial.printf("Publishing on topic %s at QoS 1, packetId: %i ", MQTT_PUB_TEMP, packetIdPub1);
Serial.printf("Message: %.2f \n", temp);
// Publish an MQTT message on topic esp8266/dht/humidity
uint16_t packetIdPub2 = mqttClient.publish(MQTT_PUB_HUM, 1, true, String(hum).c_str());
Serial.printf("Publishing on topic %s at QoS 1, packetId : %i ", MQTT_PUB_HUM, packetIdPub2);
Serial.printf("Message: %.2f \n", hum);
}
}
Voila le retour de l'ide :
Publishing on topic esp/dht11/humidity at QoS 1, packetId : 0 Message: 37.00
Connecting to MQTT...
Disconnected from MQTT.
Connecting to MQTT...
Disconnected from MQTT.
Publishing on topic esp/dht11/temperature at QoS 1, packetId: 0 Message: 20.00
Publishing on topic esp/dht11/humidity at QoS 1, packetId : 0 Message: 37.00
Quelqu'un saurait-il m'aiguiller ?
Joyeuses fêtes de fin d'années à tous !