M é m o - l a b .
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
//---- WiFi settings
#define wifi_ssid ""
#define wifi_pwd ""
//---- MQTT Broker settings
const char* mqtt_server = "";
const int mqtt_port = ;
const char* mqtt_user = "";
const char* mqtt_pwd = "";
String clientId = "ESP8266Client";
#define dhtType DHT11
#define dhtPin 2 //D4
#define ledPin 4 //D2
#define temperatureTopic "sensor/temperature"
#define humidityTopic "sensor/humidity"
float temperature;
float humidity;
unsigned long lastTime = 0;
unsigned long currentTime;
const int sensorPeriod = 60000;
DHT dht(dhtPin, dhtType);
WiFiClientSecure espClient;
PubSubClient mqtt_client(espClient);
void wifiConnexion() {
WiFi.begin(wifi_ssid, wifi_pwd);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.println();
Serial.println("Connexion WiFi établie");
}
void mqttServerConnexion() {
while (!mqtt_client.connected()) {
Serial.println("Connexion au serveur MQTT...");
if (mqtt_client.connect(clientId.c_str(), mqtt_user, mqtt_pwd)) {
Serial.println("Connexion au serveur MQTT réussie");
} else {
Serial.print("Erreur de connexion au serveur MQTT. Etat ");
Serial.println(mqtt_client.state());
delay(5000);
}
}
}
void mqttSend() {
currentTime = millis();
if (currentTime == 0) {
lastTime = 0;
}
if (lastTime == 0 || (currentTime - lastTime) > sensorPeriod) {
lastTime = currentTime;
temperature = dht.readTemperature();
humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Echec de lecture !");
return;
}
mqtt_client.publish(temperatureTopic, String(temperature).c_str(), true);
mqtt_client.publish(humidityTopic, String(humidity).c_str(), true);
}
}
//Callback doit être présent pour souscrire a un topic et de prévoir une action
/*
void callback(char* topic, byte *payload, unsigned int length) {
Serial.println("-------Nouveau message du broker mqtt-----");
Serial.print("Canal:");
Serial.println(topic);
Serial.print("donnee:");
Serial.write(payload, length);
Serial.println();
/*
if ((char)payload[0] == '1') {
Serial.println("LED ON");
digitalWrite(2,HIGH);
} else {
Serial.println("LED OFF");
digitalWrite(2,LOW);
}
}
*/
void setup() {
Serial.begin(115200);
dht.begin();
espClient.setInsecure();
mqtt_client.setServer(mqtt_server, mqtt_port);
// Quand un Subscriber recoit un message, la fonction callback est executée
// mqttClient.setCallback(callback);
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
wifiConnexion();
}
if (WiFi.isConnected()) {
if (!mqtt_client.connected()) {
mqttServerConnexion();
}
mqttSend();
mqtt_client.loop();
}
}