#include <WiFi.h>
#include "PubSubClient.h"
#include <ArduinoJson.h>
// WiFi
char ssid[]="Asmaa's iPhone";
char pass[]="asmaa1234567";
int status = WL_IDLE_STATUS;
// MQTT Broker
const char *mqtt_broker = "broker.emqx.io";//Public Broker
const char *mqtt_username ="Wokwi-GUEST";
const char *mqtt_password="";
const int mqtt_port = 8883;
// App Protcol ---> Port
const char *topic_publish = "Led";//Topic ESP32 Pusblish
const char *topic_subsrcibe = "Led";//Topic ESp32 Subs
//const char *topic_subsrcibe2 = "emqx/esp32/s2";//Topic ESp32 Subs "Not Usable"
WiFiClient hamada;//WIFI Opject
PubSubClient client(hamada);//OOP
void callback(char *topic, byte *payload, unsigned int length);
#define sensor 32
void setup(){
// Setting LED pin as output
pinMode(OUTPUT,sensor);
Serial.begin(115200);
// Connecting to a Wi-Fi network
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the Wi-Fi network");
//connecting to a mqtt broker
Serial.println("Before Connect MQTT");
//Broker Configuration
client.setServer(mqtt_broker, mqtt_port);
while (!client.connected()) {
String client_id = "esp32-client-";
client_id =client_id+ String(WiFi.macAddress());
//ESP32-ID -----> esp32-client-macaddress
//variable.c_str()--->char [] , String
Serial.printf("The client %s connects to the public MQTT broker\n", client_id.c_str());
if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
Serial.println("Public MQTT broker connected");
} else {
Serial.print("failed with state ");
Serial.print(client.state());//1 , 2 , 5
delay(2000);
}
}
Serial.println("After Connect MQTT");
client.publish(topic_publish, "Hi, I'm ESP32 ^^");
}
int irread = 0;
long distance = 0;
char DISCOVERY_STRING_01[1000];
void loop() {
irread = analogRead(sensor);
distance = map(irread, 0, 4095, 0, 11);
StaticJsonDocument<1000> doc;
doc["distance"] = distance;
serializeJson(doc, DISCOVERY_STRING_01);
client.publish(topic_publish, DISCOVERY_STRING_01);
client.subscribe(topic_subsrcibe);
client.setCallback(callback);
client.loop();
}
void callback(char* topic, byte* message, unsigned int length) {
printPayload(topic, message, length);
}
void printPayload(char* topic, byte* message, unsigned int length) {
// Printing Received Message
Serial.print("Message received on topic: ");
Serial.println(topic);
String messageTemp;
for(int i=0; i<length; i+=1) {
messageTemp += (char)message[i];
}
if(String(topic) == "Led"){
StaticJsonDocument<1024> doc;
auto error = deserializeJson(doc, DISCOVERY_STRING_01);// string to object
if ( error ) {
Serial.println("Error interpreting config file");
}
const long _distance = doc["distance"];
distance = _distance;
Serial.println("OK sensor reading: ");
Serial.println(messageTemp);
}
else{
Serial.print("Any Thing");
}
}