#include <Arduino.h>
// create an MQTT connection
// TCP connection
// import the WiFi and pubsubClient libraries
// The WiFi library allows ESP32 to establish connections with WiFi networks
// The pubsubClient library enables ESP32 to connect to an MQTT broker for publishing messages
#include <WiFi.h>
#include <PubSubClient.h>
//WiFi
const char *ssid = "Wokwi-GUEST";
const char *password = "";
//MQTT Broker
const char *mqtt_broker = "broker.emqx.io"; // public broker
const char *topic_publish = "emqx/esp32/p"; // topic esp publish
const char *topic_subscribe = "emqx/esp32/s"; // topic esp subscribe
const char *mqtt_username = "emqx";
const char *mqtt_password = "public";
const int mqtt_port = 1883;
WiFiClient espClient; //WiFi Object
PubSubClient Client(espClient);
void callback(char* topic, byte* payload, unsigned int length);
void printPayload(char* topic, byte* message, unsigned int length);
#define LED 2
bool ledState= false;
void setup() {
// setting LED pin as output
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW); // turn off the LED initially
// set software serial to 115200
Serial.begin(115200);
//Connecting to WiFi network
WiFi.begin(ssid,password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
// utilize pubsubClient to establish a connection with the MQTT broker
//connecting to a MQTT broker
Serial.println("Before connect to MQTT");
//broker configuration
Client.setServer(mqtt_broker,mqtt_port);
while (!Client.connected())
{
String client_id = "esp32.client";
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());
delay(2000);
}
}
Serial.println("After connect MQTT");
Client.publish(topic_publish, "Hi, I'm ESP32 :) ");
Client.subscribe(topic_subscribe);
Client.setCallback(callback);
}
void loop() {
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 recieved message
Serial.print("Message recieved on topic: ");
Serial.print(topic);
String messageTemp;
for (int i = 0; i < length; i++)
{
messageTemp += (char)message[i];
}
if(String(topic)== "emqx/esp32/s"){
Serial.println("OK");
if(messageTemp == "ON"){
digitalWrite(LED , HIGH);
}
digitalWrite(LED , HIGH);
}
Serial.println(messageTemp);
}