/*=================================================================
ชุดโปรแกรมพื้นฐาน
ใบงาน: การรับคำสั่งควบคุมอุปกรณ์ จากระยะไกลผ่านระบบเครือข่ายคลาวด์
วิชา: อินเทอร์เน็ตของสรรพสิ่ง (30105-2012) ระดับชั้น ปวส.1 เทคโนโลยีอิเล็กทรอนิกส์
---------------------------------------------------------------------
การทำงาน: ควบคุมการเปิด-ปิด LED 1 ดวง ผ่าน Adafruit IO ด้วยโปรโตคอล MQTT
บอร์ด: ESP32-S3 ทดสอบบน: Wokwi Simulator
ไลบรารีที่ต้องเพิ่มใน Wokwi (Library Manager): "Adafruit MQTT Library"
---------------------------------------------------------------------
วิธีใช้งาน: แก้ไขเฉพาะบรรทัดที่มีเครื่องหมาย // <<<<< แก้ตรงนี้
=============================================================== */
#include <WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/* ---------- 1) ตั้งค่าการเชื่อมต่อ WiFi ---------- */
#define WIFI_SSID "Wokwi-GUEST" // Wokwi ใช้ค่านี้ หากใช้งานจริงให้ใช้ SSID WiFi
#define WIFI_PASS "" // Wokwi เว้นว่างไว้ หากใช้งานจริงให้ใช้ SSID ของ WiFi
/* ---------- 2) ตั้งค่าบัญชี Adafruit IO ---------- */
#define IO_SERVER "io.adafruit.com"
#define IO_PORT 1883
#define IO_USERNAME "natheelic"
#define IO_KEY "aio_uJRs83SJwx7FmAu12p7Jiv1nfDmI"
/* ---------- 3) กำหนดขาที่ต่ออุปกรณ์ ---------- */
#define LED_PIN 2 // ขาที่ต่อ LED ดวงที่ 1
/* ---------- 4) สร้างออบเจกต์สำหรับสื่อสารแบบ MQTT ---------- */
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, IO_SERVER, IO_PORT, IO_USERNAME, IO_KEY);
/* Feed สำหรับ "รับคำสั่ง" ควบคุม LED (ชื่อ Feed บน Adafruit IO = led1) */
Adafruit_MQTT_Subscribe ledFeed =
Adafruit_MQTT_Subscribe(&mqtt, IO_USERNAME "/feeds/led1");
/* ---------- ฟังก์ชันเชื่อมต่อ Adafruit IO ---------- */
void connectMQTT() {
if (mqtt.connected()) return;
Serial.print("กำลังเชื่อมต่อ Adafruit IO ...");
while (mqtt.connect() != 0) { // ค่า 0 = เชื่อมต่อสำเร็จ
Serial.print(".");
mqtt.disconnect();
delay(2000);
}
Serial.println(" เชื่อมต่อสำเร็จ!");
}
void setup() {
Serial.begin(115200);
// กำหนดโหมดขาเป็น OUTPUT สำหรับ LED
pinMode(LED_PIN, OUTPUT);
// เชื่อมต่อ WiFi
Serial.print("กำลังเชื่อมต่อ WiFi ...");
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(300);
Serial.print(".");
}
Serial.println(" เชื่อมต่อ WiFi สำเร็จ!");
// ลงทะเบียน (Subscribe) Feed ที่ต้องการรับคำสั่ง
mqtt.subscribe(&ledFeed);
}
void loop() {
connectMQTT();
// รอรับคำสั่งจาก Adafruit IO เป็นเวลา 5 วินาที
Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(5000))) {
if (subscription == &ledFeed) {
String value = (char *)ledFeed.lastread;
Serial.print("ได้รับคำสั่ง led1 = ");
Serial.println(value);
if (value == "1" || value == "ON") {
digitalWrite(LED_PIN, HIGH); // เปิด LED
} else {
digitalWrite(LED_PIN, LOW); // ปิด LED
}
}
}
}