#include <PubSubClient.h>
#include <WiFi.h>
//2-configuration du point d accés
const char* ssid = "Wokwi-GUEST";
const char* password = "";
//3-configuration du broker EMQX PORT 1883
const char* mqttServer = "broker.emqx.io";
int port = 1883;
char clientId[50];
//4-configuration d un clien mqtt (publisher)
WiFiClient espClient;
PubSubClient client(espClient);
//config thingspeak
/*const int myChannelNumber = 2693900;
const char* myApiKey = "YGOS4LAEN3HA3FVQ";
const char* server = "api.thingspeak.com";*/
int buz=17;
int led=4;
void setup() {
Serial.begin(115200);
pinMode(buz, OUTPUT);
pinMode(led, OUTPUT);
// 5-initialisation du wifi
initWiFi();
// 6-initialisation du broker mqtt
initMQTT();
client.setCallback(callback);
// ThingSpeak.begin(espClient);
}
void initWiFi(void)
{
delay(10);
Serial.println("------cnx WI-FI------");
Serial.print("Cnx ready: ");
Serial.println(ssid);
Serial.println("ok");
//reconnection en cas de perte de connexion
reconnectWiFi();
}
void initMQTT(void)
{
client.setServer(mqttServer, port);
}
//en cas de probleme de connexion
void reconnectMQTT() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
long r = random(1000);
sprintf(clientId, "clientId-%ld", r);
if (client.connect(clientId)) {
Serial.print(clientId);
Serial.println(" connected");
client.subscribe("gaz");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
//
void checkWiFIAndMQTT(void)
{
if (!client.connected())
reconnectMQTT();
reconnectWiFi();
}
void reconnectWiFi(void)
{
if (WiFi.status() == WL_CONNECTED)
return;
WiFi.begin(ssid, password); // Conecta na rede WI-FI
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println();
Serial.print("Cnx success ");
Serial.print(ssid);
Serial.println("IP adresse: ");
Serial.println(WiFi.localIP());
}
//lire le topic
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Message arrived on topic: ");
Serial.print(topic);
Serial.print(". Message: ");
String stMessage;
//lire bit par bit
for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
stMessage += (char)message[i];
}
Serial.println();
if (String(topic) == "gaz") {
Serial.print("Changing output to ");
/* ThingSpeak.setField(1,stMessage.toInt());
int x = ThingSpeak.writeFields(myChannelNumber,myApiKey);
if(x == 200){
Serial.println("Data pushed successfull");
}else{
Serial.println("Push error" + String(x));
}*/
if(stMessage.toInt() > 200){
Serial.println("alerte gaz");
for(int i=0;i<3;i++)
{
digitalWrite(led,1);
delay(500);
digitalWrite(led,0);
delay(500);
}
tone(buz,500,2000);
}
else {
Serial.println("etat ok");
digitalWrite(led,0);
noTone(buz);
}
}
}
void loop() {
if (!client.connected()) {
reconnectMQTT();
}
client.loop();
}