基于Arduino的ESP8266 LED控制:如何检测网页按钮点击?
关于ESP8266搭配Arduino时检测按钮点击的解决方案
没问题,esp8266.find("H")完全可以用来检测你的LED控制按钮点击!其实原理和你之前单独用ESP时的endsWith方法逻辑一致——都是解析客户端发来的HTTP请求字符串,只是匹配方式略有不同。
当用户点击你网页里的<a href="/H">链接时,ESP8266会收到一条类似GET /H HTTP/1.1的请求头。你可以通过读取客户端的请求内容,用find()方法精准匹配请求路径里的标识,下面给你一个完整的示例代码参考:
// 假设你已经初始化了WiFi和WebServer,ledPin是你的LED引脚 const int ledPin = D1; WebServer server(80); void setup() { pinMode(ledPin, OUTPUT); // 这里补充你的WiFi初始化代码... server.begin(); } void loop() { WiFiClient client = server.available(); if (client) { // 读取请求直到换行符 String request = client.readStringUntil('\r'); // 检测点亮LED的请求 if (request.find("/H") != -1) { digitalWrite(ledPin, HIGH); sendResponse(client, "LED Ligada!"); } // 检测熄灭LED的请求 else if (request.find("/L") != -1) { digitalWrite(ledPin, LOW); sendResponse(client, "LED Desligada!"); } // 返回主页 else { String webpage = ""; webpage += "Click <a href=\"/H\">here</a> Ligar a led<br>"; webpage += "Click <a href=\"/L\">here</a> Desligar a led <br>"; sendResponse(client, webpage); } client.stop(); } } // 封装响应发送函数,简化代码 void sendResponse(WiFiClient client, String content) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println(); client.println(content); }
需要注意的几个细节:
find()方法如果匹配到目标字符串,会返回它的起始索引值;如果没找到则返回-1,所以判断条件要写成request.find("/H") != -1- 建议匹配
"/H"而不是单纯的"H",这样能避免其他包含字母H的随机请求误触发LED控制逻辑 - 相比于
endsWith,find()的适配性更强——因为HTTP请求头的结尾通常是HTTP/1.1,用endsWith("/H")可能匹配不到,而find()能直接定位到请求路径里的标识
内容的提问来源于stack exchange,提问作者lidiaxp




