You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于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控制逻辑
  • 相比于endsWithfind()的适配性更强——因为HTTP请求头的结尾通常是HTTP/1.1,用endsWith("/H")可能匹配不到,而find()能直接定位到请求路径里的标识

内容的提问来源于stack exchange,提问作者lidiaxp

火山引擎 最新活动