/*
สำหรับทดลอง MQTT บน ESP32 ส่งข้อมูลไปยัง Broker บน cloud
publish ไปที่Topic Command เพื่อให้ esp32 รับข้อมูล และตอบกลับไปที่ Topic Answer
โปรแกรมโดย อ.ตะวัน ภูรัต 2 พย 67
*/
#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#define MQTT_SERVER "broker.hivemq.com" // เปลี่ยนข้อมูลให้ชี้ไปที่ mqtt broker ของท่าน
#define MQTT_PORT 1883 // เลือกพอร์ตของ MQTT Broker 1883 สำหรับ unsecure connected และ 8883 สำหรับ secure connected
#define MQTT_USERNAME "dsel0" // เปลี่ยน username และ password สำหรับเข้าใช้งาน mqtt ให้ตรงกับของท่าน
#define MQTT_PASSWORD "piglet1234" //
#define MQTT_NAME "ESP32_640xxxxxxxx"//แทนที่ 640xx ด้วยรหัสนศ.
String MY_ID="Your Student_ID"; // แทนที่ข้อความด้วยหมายเลขรหัสนศ.
String MyNAME="Your Name";
WiFiClient client;
PubSubClient mqtt(client);
DynamicJsonDocument doc(1024);
void callback(char* topic, byte* payload, unsigned int length) {
payload[length] = '\0';
String topic_str = topic, payload_str = (char*)payload;
Serial.println("callback in topic [" + topic_str + "]: " + payload_str);
DeserializationError error = deserializeJson(doc, payload_str);
// Test if parsing succeeds.
if (error) {
Serial.print(("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
// Fetch values.
//
// Most of the time, you can rely on the implicit casts.
// In other case, you can do doc["time"].as<long>();
if(doc["id"]==MY_ID) {
Serial.println("\n\n");
Serial.println("-----------------------------");
Serial.print("Greeting Message from MQTT Server");
Serial.println("-----------------------------");
}
}
void setup() {
Serial.begin(9600);
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
mqtt.setServer(MQTT_SERVER, MQTT_PORT); // connect to mqtt broker
mqtt.setCallback(callback); // set service for sub
}
void loop() {
delay(100); // TODO: Build something amazing!
String payload_str ;
delay(100);
payload_str="{\"id\":\""+MY_ID+"\",\"Name\":\""+MyNAME+"\",\"RSSI\":\""+String(WiFi.RSSI())+"\"}";
char payload[100];
payload_str.toCharArray(payload, 100);
Serial.print("MQTT connection... ");
while(mqtt.connected() == false) {
if (mqtt.connect(MQTT_NAME, MQTT_USERNAME, MQTT_PASSWORD)) {
Serial.println("connected");
mqtt.subscribe("Command");
} else {
Serial.println("failed");
delay(500);
}
}
mqtt.publish("Answer",payload);
Serial.print("Topic Answer: " );
Serial.println(payload);
mqtt.loop();
delay(20);
}