/*
https://wokwi.com/projects/383624825061858305
On se propose de réaliser un système IoT à base de microcontrôleur ESP32
qui permet de:
1.récupérer les coordonnes GPS (longitude,latitude) a partir de Broker MQTT (Topic: LundiAM/Location)
2.récuperer les paramétres Méteo (temperature,Speedwind,humidity) du possition réçu en 1) en utilisons api suivant
https://api.open-meteo.com/v1/forecast?latitude=52.52&longitude=13.41¤t=temperature_2m,relative_humidity_2m,wind_speed_10m
3. Mettre à jour notre Serveur Beebotte
+++
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-2023.japaneast.cloudapp.azure.com
port:1883
username:student
password:lce3
clientID: <Your Name>
topic:LundiAM/Location
FORMAT Json File: {"data":{"longitude":"36.804433261763016" ,"latitude":"0.174934437847854"}}
topic:LundiAM/weather
FORMAT Json File: {"temperature":18.9 ,"windSpeed":11.78,"humidity":86.88}
*/
#include <HTTPClient.h>
#include "WiFiClient.h"
#include "PubSubClient.h"
#include <WiFi.h>
#include <Arduino.h>
#include <ArduinoJson.h>
const char* ssid ="Wokwi-GUEST";
const char* password ="lce3";
String payload;
String channel="geolocalisation";
String topic="LundiAM/Location";
String topic2="geolocalisation/latitude";
String topic3="geolocalisation/longitude";
String topic4="geolocalisation/temperature";
String topic5="geolocalisation/humidity";
String topic6="geolocalisation/windSpeed";
const char clientID[] = "ichrak";
const char* token ="token_SL2S6jWRhhr6dtBg";
const char* server ="ds-lce3-2023.japaneast.cloudapp.azure.com";
const char* server1 ="https://beebotte.com/dash/7c16c760-978b-11ee-a7c0-99ff9311e4cf";
const char* username ="student";
const int port =1883;
float longe,lat,tmp,hum,wid;
WiFiClient client;
PubSubClient clientmqtt(server,1883,client);
// Handle a received message
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);
//Votre traitement............................;
DynamicJsonDocument doc(1024);
deserializeJson(doc, message);
if( strcmp(topic,"geolocalisation/latitude") ==0 ){
lat = float (doc["data"]);
Serial.println("lat:");
Serial.println(lat);
}
if ( strcmp(topic,"geolocalisation/longitude") ==0 )
{
longe = float (doc["data"]);
Serial.println("longe:");
Serial.println(longe);
}
}
void callback1(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);
//Votre traitement............................;
DynamicJsonDocument doc(1024);
deserializeJson(doc, message);
if( strcmp(topic,"geolocalisation/temperature") ==0 ){
tmp = float (doc["data"]);
Serial.println("temp:");
Serial.println(tmp);
}
if ( strcmp(topic,"geolocalisation/windSpeed") ==0 )
{
wid= float (doc["data"]);
Serial.println("wid:");
Serial.println(wid);
}
if ( strcmp(topic,"geolocalisation/") ==0 )
{
hum= float (doc["data"]);
Serial.println("hum:");
Serial.println(hum);
}
}
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
clientmqtt.setClient(client);
clientmqtt.setServer(server,port);
Serial.println("Server ready");
}
void loop() {
if(!clientmqtt.connected()){
Serial.println("MQTT not connected");
String ClientID="ichrak"+String(random(1000));
clientmqtt.connect(ClientID.c_str(),username,NULL);
delay(3000);
Serial.println("MQTT Try to connect");
clientmqtt.subscribe("geolocalisation/latitude");
clientmqtt.subscribe("geolocalisation/longitude");
clientmqtt.setCallback(callback);
}
else // client connected
{
clientmqtt.setCallback(callback);
clientmqtt.loop();
}
}