/*
https://wokwi.com/projects/383743707764206593
On se propose de réaliser un système IoT à base de microcontrôleur ESP32
qui permet de:
1.récupérer les données suivant (longitude,latitude,temperature,humidity et windSpeed) a partir de Serveur Beebotte
2.Mettre à jour notre Broker MQTT
parametre Beebotte
channel:geolocalisation
Channel Token:token_SL2S6jWRhhr6dtBg
resource:"data" de type GPS (nous devons envoyer le format suivant :{ "latitude":36.8340123, "longitude":10.1440694})
resource:"temperature"
resource:"humidity"
resource:"windSpeed"
lien public de visualisation:https://beebotte.com/dash/7c16c760-978b-11ee-a7c0-99ff9311e4cf
parametre de Broker MQTT:
server: ds-lce3-2024.japaneast.cloudapp.azure.com
port:1883
username:student
password:lce3
clientID: <Your Name>
topic:lundi/ds
FORMAT Json File: {"nom_prenom":"kamel echaieb","data":{"Temp":24,"hum":72},"loction"{ "latitude":36.8340123, "longitude":10.1440694}}
*/
#include <WiFi.h>
#include <ArduinoJson.h>
#include <PubSubClient.h>
#include <HTTPClient.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* channel = "geolocalisation";
const char* server = "ds-lce3-2024.japaneast.cloudapp.azure.com";
const int port = 1883;
const char* username = "student";
const char* pass = "lce3";
const String topic = "lundi/ds";
const char* token = "token:token_SL2S6jWRhhr6dtBg";
const char* beebotteapi = "mqtt.beebotte.com";
WiFiClient client;
PubSubClient clientmqtt(beebotteapi,1883,client);
float latitude = 0.0, longitude = 0.0;
float temperature = 0.0, humidity = 0.0, windSpeed = 0.0;
void setup() {
Serial.begin(115200);
// Connect to WiFi
Serial.print("Connecting to WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" Connected to WiFi");
clientmqtt.setServer(beebotteapi,port);
}
void callback(char* topic, byte* payload, unsigned int length)
{ Serial.println("MQTT callback executed");
Serial.print("topic:");
Serial.println(topic);
char message[length+1];
for(int i=0;i<length;i++)
message[i]=(char)payload[i];
Serial.print("received Json:");
Serial.println(message);
StaticJsonDocument<128> doc;
deserializeJson(doc,message);
latitude = doc["data"]["latitude"];
longitude = doc["data"]["longitude"];
temperature = doc["data"]["temperature"];
humidity = doc["data"]["humidity"];
windSpeed = doc["data"]["windSpeed"];
}
void loop() {
if(!clientmqtt.connected()){
Serial.println("MQTT not connected");
String ClientID="Anis"+String(random(1000));
clientmqtt.connect(ClientID.c_str(),server,pass);
delay(3000);
Serial.println("MQTT Try to connect");
}
else // client connected
{ Serial.println("MQTT connected");
delay(500);
Serial.print("La temperature est : ");
Serial.println(temperature);
Serial.print("L'humidité est: ");
Serial.println(humidity);
Serial.print("Longtitude est: ");
Serial.println(longitude);
Serial.print("Latitude est: ");
Serial.println(latitude);
String myjsonlong="";
StaticJsonDocument<200> JL;
JL["channel"]=channel;
JL["resource"]="longitude";
JL["write"]=true;
JL["data"]=longitude;
serializeJson(JL,myjsonlong);
clientmqtt.publish(topic.c_str(),myjsonlong.c_str());
Serial.println("longitude send");
delay(1000);
String myjsonHumidity="";
StaticJsonDocument<200> JH;
JH["channel"]=channel;
JH["resource"]="hum";
JH["write"]=true;
JH["data"]=humidity;
serializeJson(JH,myjsonHumidity);
clientmqtt.publish(topic.c_str(),myjsonHumidity.c_str());
Serial.println("Humidity send");
delay(1000);
String myjsonTemperature="";
StaticJsonDocument<200> JT;
JT["channel"]=channel;
JT["resource"]="Temp";
JT["write"]=true;
JT["data"]=temperature;
serializeJson(JT,myjsonTemperature);
clientmqtt.publish(topic.c_str(),myjsonTemperature.c_str());
Serial.println("Temperature send");
delay(1000);
String myjsonlat="";
StaticJsonDocument<200> Jlat;
Jlat["channel"]=channel;
Jlat["resource"]="latitude";
Jlat["write"]=true;
Jlat["data"]=latitude;
serializeJson(Jlat,myjsonlat);
clientmqtt.publish(topic.c_str(),myjsonlat.c_str());
Serial.println("latitude send");
delay(1000);
String myjsonspeed="";
StaticJsonDocument<200> Jspeed;
Jspeed["channel"]=channel;
Jspeed["resource"]="windSpeed";
Jspeed["write"]=true;
Jspeed["data"]=windSpeed;
serializeJson(Jspeed,myjsonspeed);
clientmqtt.publish(topic.c_str(),myjsonspeed.c_str());
Serial.println("windspeed send");
delay(1000);
}
clientmqtt.loop();
delay(8000);
}