#include "WiFi.h"
#include "HTTPClient.h"
#include "ArduinoJson.h"
// Outlet information
String deviceSN = "10796572";
String api_key = "ADu2FL4V7LdfprFNL9xpKkbVw873";
String query_url = "http://service.wf8266.com/api/mqtt/" + \
deviceSN + "/RequestState/" + api_key;
const int BUTTON_PIN = 15; // Button Pin
const int LED_PIN = 2;
// The button state is initialized to not pressed
int lastButtonState = HIGH;
HTTPClient http; // Create http client object
// Query outlet status
void getOutletState() {
int outlet_state;
http.begin(query_url);
//Connection request and response status code
int httpCode = http.GET();
Serial.printf("httpCode=%d\n", httpCode);
if (httpCode == HTTP_CODE_OK){
// Get response information
String payload = http.getString();
//----------解析回應的 JSON 資料----------
// 宣告變數儲存 JSON 資料
DynamicJsonDocument outlet_json(payload.length()*2);
// payload converts JSON object
deserializeJson(outlet_json, payload);
//get outlet switch status
String switch_state = outlet_json["data"]["Data"][2].as<String>();
int outlet_state = switch_state.toInt();
if (outlet_state == 1) {
Serial.println("Outlet ON");
digitalWrite(LED_PIN, HIGH);
}
if (outlet_state == 0){
Serial.println("Outlet OFF");
digitalWrite(LED_PIN, LOW);
}
}
else {
Serial.println("Error on HTTP request");
}
http.end(); // Connection end
}
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
pinMode(BUTTON_PIN, INPUT_PULLUP);
// setup WiFi
Serial.println("Initializing WiFi ...");
WiFi.mode(WIFI_STA);
WiFi.disconnect(); // 無線初始化
Serial.print("Connecting to WiFi ");
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print(" connected!");
Serial.println("");
}
void loop() {
// Read button status
int reading = digitalRead(BUTTON_PIN);
//If the button state changes
if (reading != lastButtonState) {
// 延遲50毫秒以過濾按鈕彈跳
delay(50);
// 再次讀取按鈕狀態,確認是否穩定
reading = digitalRead(BUTTON_PIN);
// 如果按鈕確實發生變化
if (reading != lastButtonState) {
// 更新按鈕狀態
lastButtonState = reading;
// 當按鈕被按下(狀態從高變低)時切換 LED
if (reading == LOW) {
Serial.println("Button pressed!");
getOutletState();
}
}
}
}