硬件准备
- ESP8266-01S 模块
- USB转TTL烧录板(CH340)
- LED灯(建议使用3.3V LED)
- 220Ω电阻(LED限流)
- 面包板和跳线若干
-
我的是这样的不用接线,其他的参考
ESP8266-01S引脚定义: VCC --- 3.3V GND --- GND TX --- USB转TTL的RX RX --- USB转TTL的TX CH_PD(EN) --- 3.3V GPIO0 --- LED正极(通过220Ω电阻) GPIO2 --- 悬空 RST --- 悬空(烧录时可能需要手动接地复位)
安装CH340驱动
链接:https://pan.baidu.com/s/1PLZ5LIf-Mh-MDAF-YnlurQ?pwd=8888
提取码:8888
插上CH340板子
下载 Arduino IDE1.8
链接https://www.arduino.cc/en/software 右下角对应系统下载。选择JUST DOWNLOAD
安装 ESP8266 核心库
- 打开 Arduino IDE
- 进入 文件 > 首选项
- 在"附加开发板管理器网址"中添加以下URL:
https://arduino.esp8266.com/stable/package_esp8266com_index.json 如果是中国地区,可能需要使用以下镜像地址来替代官方地址: https://arduino.esp8266.com/stable/package_esp8266com_index.json http://arduino.esp8266.com/stable/package_esp8266com_index.json
安装开发板和库
1.进入 工具 > 开发板 > 开发板管理器 搜索"ESP8266" 安装"ESP8266 by ESP8266 Community" 2. 安装 WebSockets 库 在Arduino IDE中,进入 工具 > 管理库 搜索"WebSockets" 找到"WebSockets by Markus Sattler"并安装
报错可本地安装,官方教程:https://docs.arduino.cc/software/ide-v1/tutorials/installing-libraries/
本地8266下载链接:https://github.com/esp8266/Arduino/releases/download/3.1.2/esp8266-3.1.2.zip 将下载的zip解压到: C:\Users\[你的用户名]\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\ 本地WebSockets下载链接:https://github.com/Links2004/arduinoWebSockets/archive/refs/heads/master.zip 解压下载的ZIP文件将解压出来的文件夹重命名为"WebSockets" 将这个文件夹复制到Arduino的libraries目录中:Windows: 文档\Arduino\libraries\
选择开发板
不完全一样,需要问厂家
测试代码
#include <ESP8266WiFi.h> // WiFi功能 #include <ESP8266WiFiMulti.h> // WiFi多连接 #include <WebSocketsServer.h> // WebSocket服务器 #include <Hash.h> // WebSocket需要 #include <ESP8266WebServer.h> // Web服务器 #include <ESP8266mDNS.h> // mDNS服务 /* * ESP8266 WebSocket LED控制示例 * * 使用说明: * 1. 连接WiFi热点: tunc5555 * 2. WiFi密码: 123456789 * 3. 浏览器访问: http://192.168.4.1/ * 4. 点击网页按钮控制LED */ #define USE_SERIAL Serial // 定义串口对象 // WiFi配置参数 static const char ssid[] = "tunc5555"; // WiFi名称 static const char password[] = "123456789"; // WiFi密码 MDNSResponder mdns; // MDNS响应器对象 static void writeLED(bool); // LED控制函数声明 ESP8266WiFiMulti WiFiMulti; // WiFi多连接对象 // 创建服务器实例 ESP8266WebServer server(80); // HTTP服务器(端口80) WebSocketsServer webSocket = WebSocketsServer(81); // WebSocket服务器(端口81) // HTML页面内容 - 这是网页界面的代码 static const char PROGMEM INDEX_HTML[] = R"rawliteral( <!DOCTYPE html> <html> <head> <meta name = "viewport" content = "width = device-width, initial-scale = 1.0, maximum-scale = 1.0, user-scalable=0"> <title>ESP8266 WebSocket Demo</title> <style> "body { background-color: #808080; font-family: Arial, Helvetica, Sans-Serif; Color: #000000; }" </style> <script> var websock; function start() { websock = new WebSocket('ws://' + window.location.hostname + ':81/'); websock.onopen = function(evt) { console.log('websock open'); }; websock.onclose = function(evt) { console.log('websock close'); }; websock.onerror = function(evt) { console.log(evt); }; websock.onmessage = function(evt) { console.log(evt); var e = document.getElementById('ledstatus'); if (evt.data === 'ledon') { e.style.color = 'red'; } else if (evt.data === 'ledoff') { e.style.color = 'black'; } else { console.log('unknown event'); } }; } function buttonclick(e) { websock.send(e.id); } </script> </head> <body onl oad="javascript:start();"> <h1>ESP8266 WebSocket Demo</h1> <div id="ledstatus"><b>LED</b></div> <button id="ledon" type="button" onclick="buttonclick(this);">On</button> <button id="ledoff" type="button" onclick="buttonclick(this);">Off</button> </body> </html> )rawliteral"; // LED相关定义 const int LEDPIN = 0; // LED引脚定义,使用GPIO0 bool LEDStatus; // LED当前状态 // WebSocket控制命令 const char LEDON[] = "ledon"; // 开灯命令 const char LEDOFF[] = "ledoff"; // 关灯命令 void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) { USE_SERIAL.printf("WebSocket事件(%d, %d, ...)\r\n", num, type); switch (type) { case WStype_DISCONNECTED: // 客户端断开连接 USE_SERIAL.printf("[%u] 连接断开!\r\n", num); break; case WStype_CONNECTED: // 客户端连接成功 { IPAddress ip = webSocket.remoteIP(num); USE_SERIAL.printf("[%u] 客户端连接成功 IP: %d.%d.%d.%d URL: %s\r\n", num, ip[0], ip[1], ip[2], ip[3], payload); // 发送当前LED状态给新连接的客户端 if (LEDStatus) { webSocket.sendTXT(num, LEDON, strlen(LEDON)); } else { webSocket.sendTXT(num, LEDOFF, strlen(LEDOFF)); } } break; case WStype_TEXT: // 收到文本消息 USE_SERIAL.printf("[%u] 收到消息: %s\r\n", num, payload); // 处理LED控制命令 if (strcmp(LEDON, (const char *)payload) == 0) { writeLED(true); // 开灯 } else if (strcmp(LEDOFF, (const char *)payload) == 0) { writeLED(false); // 关灯 } else { USE_SERIAL.println("未知命令"); } // 广播消息给所有客户端 webSocket.broadcastTXT(payload, length); break; case WStype_BIN: // 收到二进制消息 USE_SERIAL.printf("[%u] 收到二进制数据,长度: %u\r\n", num, length); hexdump(payload, length); // 回显数据到浏览器 webSocket.sendBIN(num, payload, length); break; default: USE_SERIAL.printf("无效的WebSocket类型 [%d]\r\n", type); break; } } // 处理根路径请求 void handleRoot() { server.send_P(200, "text/html", INDEX_HTML); } // 处理404错误 void handleNotFound() { String message = "File Not Found\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += (server.method() == HTTP_GET) ? "GET" : "POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for (uint8_t i = 0; i<server.args(); i++){ message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; } server.send(404, "text/plain", message); } // LED控制函数 static void writeLED(bool LEDon) { LEDStatus = LEDon; // 注意:HUZZAH板的LED逻辑是反转的 digitalWrite(LEDPIN, LEDon ? 0 : 1); } void setup() { // 初始化LED引脚 pinMode(LEDPIN, OUTPUT); writeLED(false); // 初始化串口通信 USE_SERIAL.begin(115200); // 启动延时倒计时 for(uint8_t t = 4; t > 0; t--) { USE_SERIAL.printf("[启动] 等待 %d 秒...\r\n", t); USE_SERIAL.flush(); delay(1000); } // 配置WiFi接入点模式 WiFi.softAP(ssid, password); IPAddress myIP = WiFi.softAPIP(); USE_SERIAL.print("接入点IP地址: "); USE_SERIAL.println(myIP); // 启动MDNS服务 if (mdns.begin("espWebSock", WiFi.localIP())) { USE_SERIAL.println("MDNS服务启动成功"); mdns.addService("http", "tcp", 80); mdns.addService("ws", "tcp", 81); } else { USE_SERIAL.println("MDNS服务启动失败"); } // 配置Web服务器路由 server.on("/", handleRoot); server.onNotFound(handleNotFound); server.begin(); // 启动WebSocket服务器 webSocket.begin(); webSocket.onEvent(webSocketEvent); } void loop() { webSocket.loop(); // 处理WebSocket事件 server.handleClient(); // 处理HTTP请求 }View Code
编译
上传
测试
硬件连接 将LED连接到ESP8266-01S的GPIO0引脚(注意要串联一个合适的限流电阻) 确保ESP8266-01S正确供电(3.3V) 上传程序后的测试流程: a. 连接WiFi 用手机或电脑搜索WiFi网络 找到名为"tunc5555"的WiFi热点 使用密码"123456789"连接 b. 访问Web界面 打开浏览器 输入地址:http://192.168.4.1 应该能看到一个简单的网页界面,包含: 一个显示"LED"的文本 "On"和"Off"两个按钮 c. 测试LED控制 点击"On"按钮,LED应该会亮起 点击"Off"按钮,LED应该会熄灭 网页上的"LED"文字颜色也会相应变化(开启时为红色,关闭时为黑色) 调试方法: 打开Arduino IDE的串口监视器(波特率设置为115200) 可以看到以下调试信息: 启动倒计时信息 WiFi接入点IP地址 WebSocket连接状态 LED控制命令接收情况
常见问题解决
无法上传程序: 检查COM口是否正确选择 确认已进入烧录模式 尝试按RST按钮重置 找不到WiFi: 检查供电是否正常 查看串口监视器输出信息 尝试重启模块 LED不响应: 检查LED连接极性 确认GPIO0连接正确 查看串口调试信息
标签:烧录,wifi,LED,ESP8266,WiFi,USE,WebSocket,SERIAL From: https://www.cnblogs.com/hiit/p/18657670