#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//請修改以下參數--------------------------------------------
const char* ssid = "WiFi SSID";
const char* password = "WiFi密碼";
// 定義 LED 的引腳
const int ledPin = 4;
// 定義伺服器物件和 LCD 物件
WiFiServer server(80);
LiquidCrystal_I2C lcd(0x27, 16,2);
void setup() {
// 啟動串口通信
Serial.begin(115200);
// 初始化 LCD
lcd.init();
// 打開 LCD 背光
lcd.backlight();
// 設定 LED 引腳為輸出並關閉 LED
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
// 連接 Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
// 顯示連線成功後的 IP
Serial.print("Connected! IP address: ");
Serial.println(WiFi.localIP());
// 在 LCD 顯示 Wi-Fi 連線成功
lcd.setCursor(0, 0);
lcd.print("WiFi Connected!");
// 開啟伺服器
server.begin();
}
void loop() {
// 檢查是否有客戶端連接到伺服器
WiFiClient client = server.available();
if (client) {
String currentLine = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n') {
// 處理 HTTP 請求
if (currentLine.length() == 0) {
// 送回網站
serveWebsite(client);
break;
} else if (currentLine.startsWith("GET /brightness")) {
// 處理亮度設定
handleBrightness(client, currentLine);
}
currentLine = "";
} else if (c != '\r') {
currentLine += c;
}
}
}
delay(10);
client.stop();
}
}
void serveWebsite(WiFiClient client) {
// 送回簡單的 HTML 頁面,包含亮度設定的 UI 元素
client.println("<html><head><meta charset='UTF-8'></head><body>");
// HTML 標題
client.println("<h1>LED 控制</h1>");
// 亮度設定的表單
client.println("<form action='/brightness' method='GET'>");
client.println("亮度: <input type='range' name='brightness' min='0' max='255'><br>");
client.println("<input type='submit' value='設定亮度'>");
client.println("</form>");
// HTML 頁面結束標記
client.println("</body></html>");
}
void handleBrightness(WiFiClient client, String request) {
// 從 HTTP 請求中提取亮度值
int brightness = request.substring(request.indexOf("brightness=") + 11).toInt();
// 更新 LED 亮度
analogWrite(ledPin, brightness);
// 設定 LCD 游標位置為第一行第一列
lcd.setCursor(0, 0);
// 在 LCD 顯示相應的訊息
if (brightness == 0) {
lcd.setCursor(0, 1);
lcd.print("turn off ");
} else {
lcd.setCursor(0, 1);
lcd.print("turn on " + String(brightness));
}
// 送回 HTTP 回應
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html; charset=UTF-8");
client.println("Connection: close");
client.println();
client.println("<html><body><h1>亮度已設定為 " + String(brightness) + "</h1></body></html>");
}