/*
https://wokwi.com/projects/381103744986407937
On se propose de réaliser un système IoT à base de microcontrôleur ESP32
qui permet de récupérer l’adresse Ip du système
et d'afficher "ip", "region" et le pays relatif à l'adresse Ip du système sur
un écran LCD 20X4 et mettre le broker à jour
Vous pouvez utiliser les api suivants:
1. http://api.ipify.org/?format=json
permet de retouner mon adresse ip public
2. http://ipinfo.io/MYPUBLICIPADRESSE/geo
(verifier sur votre navigateur le format de reponse du serveur)
parametre de broker :
server: ds-lce3-2023.japaneast.cloudapp.azure.com
port:1883
username:student
password:lce3
clientID: <Your Name>
topic:ds/location
FORMAT Json File: {"nom_prenom":"kamel echaieb" ,"location":{"ip":"4.227.141.167","region":"Virginia","pays":"US"}}
*/
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <PubSubClient.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 20, 4);
const String api1 ="http://api.ipify.org/?format=json";
String payload;
const char host[] ="ds-lce3-2023.japaneast.cloudapp.azure.com";
const char clientID[] ="samar_hamraoui"
WiFiClient Clientwifi;
PubSubClient clientmqtt(host,1883,Clientwifi);
HTTPClient http;
void recupererVal (String payload)
{
if (http.begin(api1)) {
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
Serial.print("HTTP ");
Serial.println(httpResponseCode);
String payloadip = http.getString();
StaticJsonDocument<1024> rootroot;
deserializeJson(rootroot,payloadip);
string IPpub =rootroot["ip"];
Serial.print("IP public : ");
Serial.println(IPpub);
String api2 ="http://ipinfo.io/" + IPpub + "/geo";
if (http.begin(api2)) {
int httpResponseCode2 = http.GET();
if (httpResponseCode2 > 0) {
Serial.print("HTTP ");
Serial.println(httpResponseCode2);
String payload = http.getString();
Serial.print("json file:");
Serial.println(payload);
http.end();
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
Serial.println(":-(");
}
}
// Disconnect
http.end();
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
Serial.println(":-(");
}
}
}
void publishdata(String payload){
char payload1[128];
recupererVal(payload);
StaticJsonDocument<1024> doc;
deserializeJson(doc,payload);
String Ip = doc["ip"];
String region = doc ["region"];
String pays = doc["country"];
StaticJsonDocument<1024> doc;
doc["ip"]=Ip;
doc["region"]=region;
doc["pays"]=pays;
serializeJson(doc1,payload1);
StaticJsonDocument<1024> doc2;
doc1["nom_prenom"]="kamel echaieb";
doc1["location"]=payload1;
serializeJson(doc2,payload2);
Serial.println(payload2);
clientmqtt.connect(clientID,"student","lce3");
}
void setup() {
recupererVal(payload);
StaticJsonDocument<1024> doc;
deserializeJson(doc,payload);
String Ip = doc["ip"];
String region = doc ["region"];
String pays = doc["country"];
Serial.begin(115200);
delay(10);
LCD.init();
LCD.backlight();
LCD.clear();
LCD.setCursor(0, 0);
LCD.println("IP:");
LCD.println(Ip);
LCD.setCursor(0, 1);
LCD.println("Region:");
LCD.println(region);
LCD.setCursor(0, 2);
LCD.println("Pays:");
LCD.println(pays);
}
void loop() {
}