【花雕学编程】239种传感器执行器系列实验(资料代码+仿真编程+图形编程)
实验二百四十六:ESP8266串口wifi模块 NodeMCU Lua V3物联网开发板 CH340
实验项目之十三:使用 Web 服务器的 ESP8266 LED 控制
实验开源代码
- /*
- 【花雕学编程】239种传感器执行器系列实验(资料代码+仿真编程+图形编程)
- 实验二百四十六:ESP8266串口wifi模块 NodeMCU Lua V3物联网开发板 CH340
- 实验项目之十三:使用 Web 服务器的 ESP8266 LED 控制
- */
-
- #include <ESP8266WiFi.h> // 包含ESP8266WiFi库,用于WiFi连接
- #include <ESP8266WebServer.h> // 包含ESP8266WebServer库,用于创建Web服务器
-
- #define output2 2
- #define output0 0
-
- // 定义AP模式的SSID和密码
- const char* ssid = "ESP8266_AP"; // 这是ESP8266将广播的SSID
- const char* password = "12345678"; // 密码至少应为8个字符
-
- // 创建全局变量
- String http;
- String output2State = "off";
- String output0State = "off";
-
- // 定义服务端和客户端
- WiFiServer server(80); // 创建一个WiFiServer对象,监听80端口
- WiFiClient client; // 创建一个WiFiClient对象
-
- void setup() {
- Serial.begin(9600); // 初始化串口通信,波特率为9600
- Serial.println(" ");
- Serial.println(" ");
- pinMode(2, OUTPUT); // 设置GPIO 2为输出模式
- pinMode(0, OUTPUT); // 设置GPIO 0为输出模式
- digitalWrite(2, LOW); // 初始化GPIO 2为低电平
- digitalWrite(0, LOW); // 初始化GPIO 0为低电平
- Serial.print("Connecting to ");
- Serial.println(ssid);
-
- // 创建ESP8266接入点
- WiFi.softAP(ssid, password);
-
- Serial.println("");
- Serial.println("WiFi AP is now running");
- Serial.println("IP address: ");
- Serial.println(WiFi.softAPIP());
-
- // 启动ESP8266服务器
- server.begin();
- }
-
- void loop() {
- client = server.available(); // 检查是否有新的客户端尝试连接到服务器
- if (client) {
- Serial.println("New Client.");
- String clientData = "";
- while (client.connected()) { // 等待客户端完成HTTP请求的发送
- if (client.available()) { // 如果有数据
- char c = client.read(); // 读取一个字符
- http += c; // 解析它
- Serial.write(c);
- if (c == '\n') { // 如果字符是换行符
- // 表示客户端HTTP请求结束
- if (clientData.length() == 0) { // 清空clientData
- sendResponse(); // 执行必要操作
- updateLED();
- updateWebpage();
- break;
- } else {
- clientData = ""; // 清空clientData
- }
- } else if (c != '\r') { // 如果字符不是回车符
- clientData += c; // 将字符存储到clientData变量中
- }
- }
- }
- http = "";
- client.stop(); // 断开客户端连接
- Serial.println("Client disconnected.");
- Serial.println("");
- }
- }
-
- void sendResponse() {
- // 发送HTTP响应头
- client.println("HTTP/1.1 200 OK");
- client.println("Content-type:text/html");
- client.println("Connection: close");
- client.println();
- }
-
- void updateWebpage() {
- // 发送整个HTML页面
- client.println("<!DOCTYPE html><html>");
- client.println("<head>");
- client.println("<title>LED Status</title>");
- client.println("</head>");
-
- client.println("<head>");
- client.println("<meta name="viewport" content="width=device-width, initial-scale=1">");
- client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
- client.println("</style></head>");
-
- // 网页标题
- client.println("<body><h1>ESP Web Server!</h1>");
-
- // 显示蓝色LED的按钮
- client.println("<p>1. GPIO 2 is " + output2State + "</p>");
- if (output2State == "off") {
- client.println("<p><a href="/2/on"><button>Turn ON</button></a></p>");
- } else {
- client.println("<p><a href="/2/off"><button>Turn OFF</button></a></p>");
- }
-
- client.print("<hr>");
-
- // 显示绿色LED的按钮
- client.println("<p>2. GPIO 0 is " + output0State + "</p>");
- if (output0State == "off") {
- client.println("<p><a href="/0/on"><button>Turn ON</button></a></p>");
- } else {
- client.println("<p><a href="/0/off"><button>Turn OFF</button></a></p>");
- }
-
- client.println("</body></html>");
- client.println();
- }
-
- void updateLED() {
- if (http.indexOf("GET /2/on") >= 0) {
- Serial.println("GPIO 2 LED on");
- output2State = "on";
- digitalWrite(2, HIGH);
- } else if (http.indexOf("GET /2/off") >= 0) {
- Serial.println("GPIO 2 LED off");
- output2State = "off";
- digitalWrite(2, LOW);
- } else if (http.indexOf("GET /0/on") >= 0) {
- Serial.println("GPIO 0 LED on");
- output0State = "on";
- digitalWrite(0, HIGH);
- } else if (http.indexOf("GET /0/off") >= 0) {
- Serial.println("GPIO 0 off");
- output0State = "off";
- digitalWrite(0, LOW);
- }
- }
复制代码
|