硬件准备

  • 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 onload="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请求
}

编译

上传

测试

硬件连接
将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连接正确
查看串口调试信息

ESP8266 wifi模块+CH340烧录板安装使用运行教程的更多相关文章

  1. 用ESP8266 WIFI模块连接服务器,并实现与服务器相互通讯

    最近在做一个智能锁的项目,该项目要求实现在任何地方(当然是要有网络的)可以在手机上用APP开锁.而我负责的部分主要是实现底层与服务器连接,并且要能相互通讯.考虑了很多问题,最终选择了用ESP8266 ...

  2. ARDUINO MEGA2560 经过ESP8266 WIFI模块上传温湿度数据到 OneNet 服务器

    简述 原来写了一个C++的wifi库但是发现用c++ arduino这小身板有点扛不住,代码比较大,使用String类型数据处理速度慢,而且很容易无缘无故跑飞.而且封装成库后使用还需要修改arduin ...

  3. ESP8266 wifi 模块配置,Wechat+APP控制实现

    首先刷入安信可的AiCloud 2.0 SDK文件,AiCloud 2.0具体信息参见AiCloud 1.0 和AiCloud 2.0对比 APP见如下二维码下载. 1.安信可AiCloud 2.0 ...

  4. 【stm32】基于hal库使用野火指南者esp8266 WIFI模块进行TCP传输

    UART.c #include "stm32f1xx_it.h" #include "LED.h" #include "UART.h" #i ...

  5. JMeter的下载安装以及运行教程

    一.安装JMeter的必要准备 1.安装JDK JDK下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html ...

  6. ESP8266串口模块的基本使用【转】

    本文转载自:http://www.shaoguoji.cn/2017/01/15/ESP8266-usage/ ESP8266是一款超低功耗的UART-WiFi 透传模块,拥有业内极富竞争力的封装尺寸 ...

  7. 消息中间件系列二:RabbitMQ入门(基本概念、RabbitMQ的安装和运行)

    一.基本概念 1. AMQP AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议.支持不同语言和不同的产品 2. 生产者 ...

  8. Beaglebone Black– 智能家居控制系统 LAS - 刷 WiFi 模块 ESP8266 Firmware 和 ESP8266 直接收发 GPIO 信号

    用 Windows 来刷 ESP8266 固件有很多中文教程,来试试直接用 BBB 刷吧.目标是 NodeMCU,ESP-01 可用,就是我买的那个. 接线方式在上一篇.当 echo ‘BB-UART ...

  9. 玩转X-CTR100 l STM32F4 l ESP8266串口WIFI模块

    我造轮子,你造车,创客一起造起来!更多塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]- ESP8266是一款非常火的WIFI模块,性价 ...

  10. 中国移动OnetNet云平台 使用WIFI模块ESP8266 TCP非透传模式传输数据流步骤

    测试使用工具: WIFI模块型号:ESP8266 https://item.taobao.com/item.htm?spm=a1z10.1-c.w137712-175513579.2.btbD9X&a ...

随机推荐

  1. 一文彻底搞透Redis的数据类型及具体的应用场景

    Redis 提供了丰富的数据类型,每种数据类型都有其独特的存储结构和操作方法,可以满足不同的业务场景需求.下面详细介绍 Redis 支持的主要数据类型及其底层实现,并结合具体的应用场景说明其使用. 1 ...

  2. vue项目整合echarts

    准备工作: 首先我们初始化一个vue项目,执行vue init webpack echart,接着我们进入初始化的项目下.安装echarts, npm install echarts -S //或   ...

  3. Java将html文本转成纯文本

    Java将html文本转成纯文本 public static String splitAndFilterString(String input, int length) { if (input == ...

  4. 【一步步开发AI运动小程序】十四、主包超出2M大小限制,如何将插件分包发布?

    随着人工智能技术的不断发展,阿里体育等IT大厂,推出的"乐动力"."天天跳绳"AI运动APP,让云上运动会.线上运动会.健身打卡.AI体育指导等概念空前火热.那 ...

  5. AI那么厉害,那测试开发和自动化测试这些职位是不是就多余了?

    在当今科技飞速发展的时代,AI大模型如ChatGPT等如同璀璨星辰般闪耀登场,它们的强大功能引发了各个领域的诸多思考.在软件测试领域,不少人心里直犯嘀咕:这AI大模型都这么厉害了,那测试开发和自动化测 ...

  6. Java垃圾回收器总结

    什么是Java垃圾回收器 Java垃圾回收器是Java虚拟机(JVM)的三个重要模块(另外两个是解释器和多线程机制)之一,为应用程序提供内存的自动分配(Memory Allocation).自动回收( ...

  7. 使用 Antlr 处理文本

    高 尚 (gaoshang1999@163.com), 软件工程师, 中国农业银行软件开发中心 简介: Antlr 是一个基于 Java 开发的功能强大的语言识别工具,其主要功能原本是用于识别编程语言 ...

  8. Java 网页浏览器组件介绍

    王 凯迪, 软件工程师, Convergys 上海研发中心 简介: 使用 Java 开发客户端应用有时会需要使用到浏览器组件,本文将介绍在 Java 用户界面中使用浏览器的四种方法,并且比较它们各自的 ...

  9. 鸿蒙NEXT开发案例:九宫格随机

    [引言] 在鸿蒙NEXT开发中,九宫格抽奖是一个常见且有趣的应用场景.通过九宫格抽奖,用户可以随机获得不同奖品,增加互动性和趣味性.本文将介绍如何使用鸿蒙开发框架实现九宫格抽奖功能,并通过代码解析展示 ...

  10. Mysql的整体架构设计

    整体分层 连接层 服务层 存储引擎层 连接层 客户端要连接到服务器 3306 端口,必须要跟服务端建立连接,那么 管理所有的连接,验证客户端的身份和权限,这些功能就在连接层完成. 服务层 连接层会把 ...