包含必要的库

#include <WiFi.h>

定义WiFi凭据和服务器端口

const char* ssid = "your_SSID";     // 替换为你的WiFi名称
const char* password = "your_PASSWORD"; // 替换为你的WiFi密码

WiFiServer server(80);  // 设置服务器端口为80

定义LED控制引脚和变量

int ledPin = 2;         // GPIO2用于控制LED
String header;          // HTTP请求头

初始化设置

void setup() {
  Serial.begin(115200);
  pinMode(ledPin, OUTPUT); // 设置ledPin为输出模式
  digitalWrite(ledPin, LOW); // 确保LED开始时是关闭的
  ...
}

连接到WiFi网络

  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected.");
  
  // 启动服务器
  server.begin();
}

主循环

void loop(){
  WiFiClient client = server.available();   // 监听客户端连接
  ...
}

处理客户端连接

  if (client) {                             // 如果有客户端连接
    String currentLine = "";                // 创建一个字符串来保存收到的数据
    while (client.connected()) {            // loop while the client's connected
      if (client.available()) {             // 如果有字节可读
        char c = client.read();             // 读取一个字节
        header += c;
        if (c == '\n') {                    // 如果字节是换行符
          ...
        }
      }
    }
    ...
  }

将读取的字符添加到请求头字符串中。

解析HTTP请求并控制LED

          if (currentLine.length() == 0) {
            ...
            // 检查请求的URL
            if (header.indexOf("GET /2/on") >= 0) {
              Serial.println("GPIO 2 on");
              digitalWrite(ledPin, HIGH);
            } else if (header.indexOf("GET /2/off") >= 0) {
              Serial.println("GPIO 2 off");
              digitalWrite(ledPin, LOW);
            }
          } else {
            currentLine = "";
          }
        } else if (c != '\r') {
          currentLine += c;
        }
      }
    }
    // 清除请求头
    header = "";
    // 关闭连接
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}

响应客户端请求并发送HTML内容

            // 发送HTTP响应头
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
            ...
            client.println("</body></html>");