Slide Swith in Wokwi 控制 EasyBuilderPro HMI 的 指示燈 Lamp ON ,OFF
// 1. 修改 MQTT Broker 網址
const char* mqtt_server = "mqttgo.io";
// 2. 修改連線成功後的預設 Publish 與 Subscribe 主題
client.publish("alex9ufo/ebpro_wokwi/sw", "{\"sw\":\"false\"}");
client.subscribe("alex9ufo/ebpro_wokwi/led/status");
WOKWI程式
#include <WiFi.h>
#include <PubSubClient.h>
#define led 2
#define saklar 25
int sw1 = 0;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// 1. 修改 MQTT Broker 網址
const char* mqtt_server = "mqttgo.io";
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
// 將 payload 轉為 String 方便搜尋處理
String message = "";
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
Serial.println(message);
// 只要訊息內容中含有 "true",就點亮 LED
if (message.indexOf("true") != -1) {
digitalWrite(led, LOW); // 開燈 (開發板預設通常是 LOW 亮燈)
Serial.println("-> LED turned ON");
} else {
digitalWrite(led, HIGH); // 關燈
Serial.println("-> LED turned OFF");
}
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
String clientId = "ESP32Client-";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
Serial.println("connected");
// 2. 修改連線成功後的預設 Publish 與 Subscribe 主題
client.publish("alex9ufo/ebpro_wokwi/sw", "{\"sw\":\"false\"}");
client.subscribe("alex9ufo/ebpro_wokwi/led/status");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void setup() {
pinMode(saklar, INPUT_PULLUP);
pinMode(led, OUTPUT);
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
int sw = !digitalRead(saklar);
if (sw != sw1) {
Serial.print("Publish message: ");
// 3. 修改按鈕狀態變更時發布的主題
if (sw) {
Serial.println("{sw:true}");
client.publish("alex9ufo/ebpro_wokwi/sw", "{\"sw\":true}");
} else {
Serial.println("{sw:false}");
client.publish("alex9ufo/ebpro_wokwi/sw", "{\"sw\":false}");
}
}
sw1 = sw;
}














沒有留言:
張貼留言