/*
功能:讓 ESP32 成為 Web Server,使用電腦或手機連到ESP32控制內建LED開關
注意事項:需用區域網路
*/
#include <WiFi.h>
//請修改以下參數--------------------------------------------
// WiFi 帳號、密碼
char SSID[] = "YourSSID"; // WiFi 帳號
char PASSWORD[] = "YourPassword"; // WiFi 密碼
//---------------------------------------------------------
#define ledPin 2 // LED 腳位
WiFiServer server(80); // 宣告伺服器位於 80 port
void setup() {
Serial.begin(115200);
//連線到指定的WiFi SSID
Serial.print("Connecting Wifi: ");
Serial.println(SSID);
//WiFi.begin(SSID, PASSWORD); // 以STA(網路終端)模式連接到WiFi基地台
WiFi.begin("Wokwi-GUEST", "", 6); // wokwi提供的虛擬 WiFi 接入點
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
//連線成功,顯示取得的IP
Serial.println("");
Serial.println("WiFi connected");
server.begin(); // 啟動伺服器
Serial.print("區域網路用伺服器已啟動,http://");
//IPAddress ip = WiFi.localIP();
//Serial.println(ip);
Serial.println(WiFi.localIP());
// LED 控制腳位設為輸出
pinMode(ledPin, OUTPUT);
}
void loop() {
// 宣告一個連線
WiFiClient client = server.available();
// 有人連入時
if(client){
Serial.println("使用者連入");
/*--------------網頁的 html 部分 -------------*/
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("");
client.println("<!DOCTYPE HTML>");
client.println("<html><head><meta charset='utf-8'></head><br>");
client.println("<h1><font size=\"7\">ESP32 Web Server</font></h1>");
// HTML超連結指令
client.println("<a href='/LED=ON'><button><font size=\"7\"> 開燈 </font></button></a><br>"); // 代表按了這個超連結時會瀏覽 http://IP/LED=ON 這個網址
client.println("<a href='/LED=OFF'><button><font size=\"7\"> 關燈 </font></button></a><br>");
client.println("</html>");
/*--------------------------------------------*/
// 取得使用者輸入的網址
String request = client.readStringUntil('\r');
Serial.println(request);
// 判斷超連結指令
if(request.indexOf("LED=ON") >=0){
digitalWrite(ledPin, HIGH);
}else if(request.indexOf("LED=OFF") >=0){
digitalWrite(ledPin, LOW);
}
Serial.println("完成");
// 停止連線
client.stop();
}
}