最近很多做物联网、DIY 智能家居和毕业设计的同学都开始接触 ESP8266 系列模块,其中 ESP-01S 因为体积小、成本低、自带 WiFi 能力,成为很多入门项目的首选。不过很多初学者第一次拿到 ESP-01S 时,往往不是卡在代码上,而是卡在“怎么把代码烧进去”这一步。
这篇文章就围绕 ESP-01S 的 Arduino IDE 开发环境搭建展开,重点解决软件安装、开发板配置、编译烧录三个环节,同时也把常见的接线方式和坑点整理出来,方便后续做智能开关、MQTT 数据上报、红外遥控等真实项目时直接复用。
1. 了解 ESP-01S 与 Arduino IDE
1.1 ESP-01S 是什么
ESP-01S 是以乐鑫 ESP8266 芯片为核心的一款迷你 WiFi 模块,它把 ESP8266EX 芯片、Flash 存储、PCB 天线和必要的外围电路集成在一块很小的板子上。模块自带两个 GPIO 口(GPIO0 和 GPIO2),支持 UART 串口通信,默认出厂时多数模块会烧录 AT 固件,用户可以通过串口发送 AT 指令操作 WiFi 连接、TCP/IP 通信等。
从本质上看,ESP8266 芯片是一颗可以独立运行程序的微控制器,它内部集成了 Tensilica L106 32 位处理器,主频最高可达 160MHz,同时内置 WiFi MAC/BB/RF 电路。也就是说,它不只是“WiFi 透传模块”,而是一颗具备完整运算能力的 MCU。
相比 ESP-01,ESP-01S 的主要区别在于:
| 对比项 | ESP-01 | ESP-01S |
|---|---|---|
| 供电设计 | 部分版本需要外部稳压 | 多为 3.3V 供电,注意压差 |
| 天线 | PCB 天线 | PCB 天线 |
| 板载 LED | 蓝色 LED | 蓝色 LED,位置略有差异 |
| Flash | 常见 8Mbit(1MB) | 常见 8Mbit(1MB) |
| 引脚 | GPIO0 / GPIO2 | GPIO0 / GPIO2 |
很多同学会把 ESP-01 和 ESP-01S 混用,实际上两者的硬件接口基本兼容,代码和烧录方式也很接近,只是 PCB 版本略有差异。日常开发中可以直接按 ESP-01S 处理。
1.2 为什么选择 Arduino IDE
ESP8266 的官方 SDK 支持多种开发方式,比如乐鑫官方 ESP-IDF、NodeMCU Lua 固件、MicroPython、Arduino IDE 等。对于大多数电子爱好者、嵌入式初学者和快速原型验证场景来说,Arduino IDE 是最容易上手的方案。
Arduino IDE 的优势主要体现在几个方面:
- 语法简单。基于 C++ 封装了很多常用函数,例如
digitalWrite()、delay()、Serial.println(),不需要深入了解寄存器操作。 - 生态丰富。Arduino 社区有大量第三方库,ESP8266 WiFi、HTTP Client、MQTT、JSON 解析等需求都有成熟库可以直接调用。
- 跨平台。Windows、macOS、Linux 都有安装包。
- 编译与烧录一体化。点击“上传”按钮即可完成编译、连接、烧录整个过程。
这篇文章的最终目标,就是让读者在 Arduino IDE 中安装好 ESP8266 开发板支持包,然后成功把第一个程序烧录进 ESP-01S。
2. 环境准备:软件与硬件清单
在开始安装软件之前,先把需要的环境列出来,避免做一半发现缺少工具没法继续。
2.1 软件清单
| 软件 | 说明 |
|---|---|
| Arduino IDE | 集成开发环境,建议在官网下载安装包 |
| CH340/CP2102 驱动 | USB 转串口芯片驱动,具体看你的下载器芯片型号 |
| ESP8266 开发板支持包 | Arduino IDE 的板卡管理器中添加 |
2.2 硬件清单
| 硬件 | 数量 | 说明 |
|---|---|---|
| ESP-01S 模块 | 1 块 | 核心开发对象 |
| USB 转串口模块 | 1 个 | 推荐 CP2102 或 CH340,必须支持 3.3V 输出 |
| 杜邦线 | 若干 | 公对母或母对母均可 |
| 面包板 | 可选 | 方便接线测试 |
| 3.3V 稳压模块 | 可选 | 如果 USB 转串口供电能力不足时需要 |
这里有一个很关键的注意事项:ESP-01S 必须使用 3.3V 供电,绝对不能用 5V 直接供电。很多 USB 转串口模块上有 5V 和 3.3V 两个引脚,接线时务必确认接的是 3.3V。
2.3 版本说明
Arduino IDE 目前常见的有 1.8.x 系列和 2.x 系列。1.8.x 是一个稳定版本,教程资料非常多;2.x 版本界面更新,编译速度更快,但部分老电脑可能会有性能问题。本文以 Arduino IDE 1.8.19 为例进行讲解,如果你使用的是 2.x 版本,操作菜单名称基本一致,不影响学习。
ESP8266 开发板支持包的版本会持续更新,不需要刻意追求最新。只要能够在 Arduino IDE 的“开发板管理器”中搜索并安装,默认最新版本基本都可以正常使用。如果你之前安装过旧版本,并且遇到编译报错,可以考虑卸载后重新安装最新版。
3. 安装 Arduino IDE 与串口驱动
3.1 下载安装 Arduino IDE
Arduino 官网的下载地址是https://www.arduino.cc/en/software,打开后可以看到 Windows、macOS、Linux 三个平台的安装包。
Windows 用户建议选择 Windows Installer 版本,因为安装程序会自动配置好文件关联和快捷方式。下载完成后双击安装,按照默认选项一路点击“下一步”即可。
安装过程中不需要额外手动配置环境变量,Arduino IDE 会跟随安装自动处理。
3.2 安装 USB 转串口驱动
ESP-01S 本身没有 USB 接口,它通过 UART 串口与电脑通信。我们通常使用 USB 转串口模块连接 ESP-01S 和电脑。这个模块上的核心芯片决定了需要安装什么驱动。
市面常见的 USB 转串口芯片有:
- CH340(最常见,国产,很多便宜的模块都在用)
- CP2102(Silicon Labs)
- CP2104
- PL2303
判断方法是查看你手上的 USB 转串口模块上的芯片丝印,也可以直接插上电脑,打开设备管理器查看端口那里有没有出现新的 COM 口。
如果没有出现 COM 口,或者显示为黄色感叹号,说明驱动没有安装正确。以 CH340 为例,可以去搜索“CH340 驱动”下载安装,安装后重新插拔 USB,正常情况下设备管理器中会出现类似USB-SERIAL CH340 (COM3)的条目。
3.3 验证驱动是否正常
在 Windows 系统中,按Win + X,选择“设备管理器”,展开“端口(COM 和 LPT)”节点。如果能看到类似COM3的端口号,说明 USB 转串口模块已经被电脑识别。
这里要特别提醒一下:不同电脑、不同 USB 口,COM 号不一定相同。后面烧录时必须在 Arduino IDE 中选择正确的那个 COM 口,否则会报错Board at COMxx is not available。
4. 在 Arduino IDE 中添加 ESP8266 开发板支持
Arduino IDE 默认并不支持 ESP8266 芯片,我们需要通过“开发板管理器”安装第三方开发板支持包。这一步是整个环境搭建中最容易出问题的环节,下面详细说明。
4.1 打开开发板管理器
打开 Arduino IDE,依次点击菜单栏:
文件->首选项
在“附加开发板管理器网址”一栏中,填入 ESP8266 官方维护的 JSON 地址:
https://arduino.esp8266.com/stable/package_esp8266com_index.json这里需要注意两点:
- 如果你之前填写过其他开发板的地址,例如 ESP32 的 JSON 地址,不要把原来内容删掉,应该用英文逗号分隔后追加新地址。
- 填写后点击“确定”保存,然后重新打开“开发板管理器”。
4.2 安装 ESP8266 支持包
操作步骤为:
- 点击菜单栏
工具->开发板->开发板管理器。 - 在弹出的搜索框中输入
esp8266。 - 找到
ESP8266 by ESP8266 Community。 - 点击“安装”按钮,等待下载完成。
安装过程需要联网下载文件,时间长短取决于网络环境。由于下载源在国外,部分用户可能遇到速度很慢甚至失败的情况。如果卡在下载阶段,可以尝试更换网络环境,或者使用国内镜像源(部分社区会提供镜像地址,这里不展开细说)。
安装完成后,在工具->开发板菜单中就能看到Generic ESP8266 Module选项。
4.3 选择正确的开发板类型
ESP-01S 在 Arduino IDE 中有对应的板型选项。打开:
工具->开发板->Generic ESP8266 Module
或者直接选择ESP8266 Dev Module。对于 ESP-01S 来说,两种选择通常都可以编译成功,但推荐使用Generic ESP8266 Module,这也是很多 ESP-01S 教程中采用的板型。
选择好开发板后,还需要设置几个关键参数:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| Flash Size | 1M (64K SPIFFS) | ESP-01S 常见 Flash 大小 |
| Flash Mode | DIO | 兼容性更好 |
| Reset Method | ck | 自动复位方式 |
| Upload Speed | 115200 | 烧录波特率 |
| Port | 实际 COM 口 | 与设备管理器一致 |
这里要特别说明 Flash Size。如果选择错误,可能会出现烧录后无法启动、程序反复重启的问题。ESP-01S 的 Flash 大小通常是 8Mbit,也就是 1MB。如果你的模块是其他容量,需要根据实际芯片丝印判断。保险的做法是先选择1M (64K SPIFFS),试烧一个程序,如果异常再调整。
5. 硬件接线:ESP-01S 的烧录连接方式
ESP-01S 只有两排排针,引脚定义非常少:
| 引脚名称 | 功能说明 |
|---|---|
| VCC | 3.3V 正极供电 |
| GND | 电源负极 |
| TX | 串口发送 |
| RX | 串口接收 |
| RST | 复位(低电平有效) |
| GPIO0 | 模式选择引脚 / 普通输入输出 |
| GPIO2 | 普通输入输出 |
| CH_PD (EN) | 芯片使能引脚,接高电平 |
5.1 烧录模式与运行模式
ESP8266 在上电时通过 GPIO0 的电平状态决定启动模式:
- 烧录模式:GPIO0 接地(低电平)
- 运行模式:GPIO0 悬空或接高电平
因此,仅仅把 USB 转串口的 TX/RX 接到 ESP-01S 上是不够的,还要在需要烧录时将 GPIO0 接到 GND。等烧录完成后,断开 GPIO0 与 GND 的连接,然后重新上电或复位,模块才会运行用户程序。
5.2 标准烧录接线
USB 转串口模块与 ESP-01S 的接线如下:
| USB 转串口 | ESP-01S |
|---|---|
| 3.3V | VCC |
| GND | GND |
| TXD | RX |
| RXD | TX |
| 3.3V | CH_PD (EN) |
| GND | GPIO0(烧录时接 GND) |
特别提醒:
- USB 转串口的 TX 接 ESP-01S 的 RX,RXD 接 ESP-01S 的 TX,这是串口通信交叉接线的标准方式。
- CH_PD 必须接高电平,否则模块内部不工作。有些 USB 转串口模块没有额外的 3.3V 引脚,此时可以共用电源,但要注意电流是否足够。
- VCC 和 CH_PD 都需要 3.3V。
5.3 关于供电电流的说明
ESP8266 在 WiFi 发射瞬间电流可以达到 200mA 以上,而很多 USB 转串口模块上的 3.3V 引脚是由板载 LDO 从 USB 5V 降压得到的,输出电流可能只有 100mA 左右。
如果烧录过程中出现模块反复复位、连不上串口、上传失败,一个常见原因就是供电不足。此时有两个解决办法:
- 使用外部 3.3V 稳压模块单独给 ESP-01S 供电,但必须共地。
- 使用专门的 ESP-01S 烧录底座,底座自带稳压电路,接线更简单。
从实际经验看,市面上大多数 CP2102 模块的 3.3V 输出可以支撑 ESP-01S 烧录,但如果发现不稳定,优先检查供电。
6. 第一个程序:点亮 ESP-01S 板载 LED
环境配置完成后,我们通过一个最简单的 LED 闪烁程序验证整个工具链是否正常。
6.1 编写代码
打开 Arduino IDE,在编辑窗口中输入以下代码:
// 文件用途:ESP-01S 板载 LED 闪烁测试 // 注意:ESP-01S 板载蓝色 LED 接在 GPIO1(TX)上 // 不过更方便的做法是用 GPIO2,本示例用 GPIO2 验证 #define LED_PIN 2 void setup() { pinMode(LED_PIN, OUTPUT); } void loop() { digitalWrite(LED_PIN, LOW); // LED 点亮 delay(500); // 延时 500ms digitalWrite(LED_PIN, HIGH); // LED 熄灭 delay(500); // 延时 500ms }这里有一个容易让新手疑惑的点:ESP8266 的 GPIO 输出 LOW 时点亮 LED,输出 HIGH 时熄灭 LED。原因是板载 LED 通常接在 GPIO 与 3.3V 之间,当 GPIO 输出低电平时,LED 两端形成压差,LED 点亮。
6.2 编译并上传
代码写好之后,先点击工具栏中的“对勾”按钮(编译),确认代码没有语法错误。编译成功后,选择好开发板类型和 COM 口,点击“右箭头”按钮(上传)。
上传过程中 Arduino IDE 会自动编译并调用烧录工具。如果一切正常,IDE 底部的日志窗口会输出:
Writing at 0x00000000... (100%) Leaving... Hard resetting via RTS pin...这表示烧录成功,模块已经复位并开始运行程序。
6.3 验证结果
烧录成功后,将 GPIO0 从 GND 断开,重新给模块上电。正常情况下,可以观察到 ESP-01S 上的蓝色 LED 会以 0.5 秒为间隔闪烁。
如果只是使用 AT 固件,这个亮灯程序会覆盖掉 AT 固件。也就是说,烧录完之后,模块不再响应AT指令。这一点需要提前了解清楚,如果后续想恢复 AT 固件,需要重新烧录官方 AT 固件包。
7. 第二次烧录:通过串口输出验证通信
对于很多初学者来说,仅仅点亮 LED 还不够,因为他们无法确定模块内部的串口通信是否正常。我们可以写一个串口输出的程序,用来验证 USB 转串口模块和 ESP-01S 之间的收发链路。
7.1 编写串口测试代码
// 串口测试:ESP-01S 上电后发送一段字符串 void setup() { // ESP8266 串口默认波特率使用 115200 Serial.begin(115200); Serial.println(); Serial.println("ESP-01S Serial Test OK!"); Serial.println("Hello CSDN!"); } void loop() { // 持续发送,方便观察 Serial.println("Running..."); delay(1000); }编译并上传。上传时仍需将 GPIO0 接到 GND。上传完成后重新上电,打开 Arduino IDE 的串口监视器:
工具->串口监视器
把串口监视器右下角的波特率设置为115200,这时应该能看到模块不断输出内容。
7.2 串口监视器的作用
串口监视器是 Arduino 开发最常用的调试工具之一。它能显示模块通过串口发送的数据,也能在输入框中输入内容并发送给模块。对于后续调试 WiFi 连接、MQTT 服务器通信、传感器数据采集等场景,串口监视器是排查问题的最直接手段。
注意:串口监视器打开时,会占用 COM 口。此时如果再次点击“上传”,Arduino IDE 会提示端口被占用,需要先关闭串口监视器再上传。
8. 如果你拿到的是 AT 固件模块,先测试再覆盖
前面提到,很多 ESP-01S 出厂时带有 AT 固件。在烧录自己的程序之前,建议先使用串口工具测试一下模块是否能正常响应 AT 指令。这样做的好处是:
- 确认模块硬件正常。
- 确认 USB 转串口模块工作正常。
- 确认接线方式正确。
测试方法:将 GPIO0 悬空,让模块进入运行模式,上电后打开串口监视器,波特率设置为115200,在输入框中输入AT,点击发送。如果模块正常响应,串口监视器会显示:
OK除了AT,还可以尝试以下指令:
| 指令 | 预期响应 | 功能 |
|---|---|---|
AT | OK | 测试通信 |
AT+GMR | 版本信息 | 查询固件版本 |
AT+CWMODE? | 返回当前 WiFi 模式 | 查询模式 |
AT+RST | 模块重启 | 复位 |
这里要特别提醒:AT 指令对格式非常敏感,在串口监视器中发送时,如果输入框自带换行,需要确认发送选项是“换行”或者“换行和回车”。如果发送后没有响应,可以尝试切换不同的发送选项。
如果模块已经烧录过用户程序,那么它不会再响应 AT 指令。不要误以为模块坏了,可以通过重新烧录 AT 固件的方式恢复。
9. 常见问题与排查思路
9.1 上传时报错:A fatal error occurred: Failed to connect to ESP8266
这是 ESP-01S 烧录中最常见的问题。出现这个错误时,优先级最高的是先检查 GPIO0 是否已经接地。如果 GPIO0 没有进入烧录模式,芯片会直接运行 Flash 里的现有程序,不会响应烧录握手信号。
具体排查顺序如下:
- 确认 USB 转串口模块的 TX 接 ESP-01S 的 RX,RX 接 TX。
- 确认 VCC 和 CH_PD 都接 3.3V。
- 确认 GND 已经共地。
- 确认 GPIO0 已经接到 GND。
- 在 Arduino IDE 中点击上传,看到
Connecting........_____.....时,按住 ESP-01S 的 RST 引脚接地再松开,或重新上电一次。
第 5 点是一个比较实用的技巧。因为 ESP-01S 上电后如果 GPIO0 状态不对,或者模块已经运行了程序,在握手阶段可能无法响应。点击上传后,在等待连接阶段给模块手动复位一次,可以提高成功率。
9.2 上传成功后没有任何效果
如果上传日志显示成功,但模块没有按预期工作,可以先区分是供电问题还是程序问题。
- 观察板载 LED 是否点亮。
- 使用万用表测量 VCC 是否为 3.3V。
- 重新上电测试。
- 检查 GPIO0 在运行模式下是否已经断开 GND。
另外要注意,不同 ESP-01S 模块的板载 LED 接法可能有差异。有些接在 GPIO1 上,有些接在 GPIO2 上。如果程序写的是 GPIO2,但你的模块 LED 恰好接在 GPIO1,那么看起来就是没有反应。实际项目中不依赖板载 LED,而是用万用表或外部 LED 确认程序是否运行。
9.3 开发板管理器中没有 ESP8266 选项
出现这种情况,通常是在“附加开发板管理器网址”中没有填入 JSON 地址,或者填写后没有生效。
解决步骤:
- 打开
文件->首选项,检查附加开发板管理器网址是否包含https://arduino.esp8266.com/stable/package_esp8266com_index.json。 - 点击确定后,重新打开开发板管理器。
- 如果仍然搜索不到,关闭 Arduino IDE 后重新打开。
- 确认网络可以正常访问外网。
9.4 CH340 驱动安装后设备管理器仍显示感叹号
这个问题在 Windows 上比较常见,一般是驱动数字签名或驱动版本不匹配导致。可以尝试下载最新版 CH340 驱动,以管理员身份运行安装。安装完成后重启电脑,再次插入 USB 转串口模块。
9.5 上传时报错:error: espcomm_open failed
出现espcomm_open failed,通常意味着 Arduino IDE 无法打开指定的 COM 口。原因可能有:
- 串口监视器窗口没有关闭。
- COM 口号选择错误。
- 其他程序占用了串口,例如某些串口调试助手。
解决办法就是关闭占用程序,重新检查端口选择,然后再次上传。
9.6 烧录后程序反复重启
如果程序在运行过程中不断重启,多半是看门狗或供电不稳定导致。ESP8266 在 WiFi 连接时电流波动较大,如果 3.3V 供电能力不足,芯片会频繁掉电复位。
解决方案是使用外部 3.3V 电源,或者在 VCC 和 GND 之间并联一个 10uF 到 100uF 的电解电容和 0.1uF 陶瓷电容,减小电压波动。
9.7 常见问题速查表
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 无法连接模块 | GPIO0 未接地 | 烧录模式下将 GPIO0 接 GND |
| 上传失败 | 串口被占用 | 关闭串口监视器或其他串口工具 |
| 上传失败 | 端口选择错误 | 在设备管理器中确认 COM 号 |
| 上传失败 | TX/RX 接反 | 交叉接线:TXD -> RX,RXD -> TX |
| 模块反复复位 | 供电电流不足 | 使用外部 3.3V 电源或烧录底座 |
| 程序无反应 | 板载 LED 引脚不同 | 使用外部 LED 验证程序 |
| AT 指令无响应 | 模块已烧录用户程序 | 重新烧录 AT 固件 |
10. 最佳实践与工程建议
10.1 给模块做标记
ESP-01S 模块体积很小,引脚也少,容易搞混。建议在模块上用记号笔标注 TX、RX、VCC、GND,或者直接买一个标注清晰的防水标签贴上去。在实际项目中,接线错误往往会造成模块烧毁。
10.2 不要直接接触引脚
ESP8266 是 3.3V 逻辑器件,虽然内部部分引脚有保护,但依然属于比较脆弱的芯片。在湿度较高或静电较多环境中,尽量避免直接用手触摸芯片引脚。操作前可先触摸金属物体释放人体静电。
10.3 使用独立供电尽量共地
如果使用外部电源给 ESP-01S 供电,务必把外部电源的 GND 与 USB 转串口模块的 GND 连接在一起。否则串口通信的参考地不一致,会导致波特率正常但数据乱码,甚至无法通信。
10.4 建立自己的模板工程
当 Arduino IDE 环境配置好之后,建议把以下代码保存为模板,以后每次新项目都从模板开始,减少重复劳动:
// ESP-01S 标准模板 #include <ESP8266WiFi.h> const char* ssid = "your_wifi_ssid"; const char* password = "your_wifi_password"; void setup() { Serial.begin(115200); Serial.println(); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.print("Connected, IP address: "); Serial.println(WiFi.localIP()); } void loop() { // 主循环 }这个模板已经包含了 WiFi 连接的基本逻辑。后续在这个基础上做 HTTP 请求、MQTT 通信、传感器采集都会非常方便。
10.5 定期备份固件
如果你买到的模块自带 AT 固件,而你的项目暂时不需要 AT 功能,可以先把 AT 固件备份出来。市面上很多串口工具支持备份 Flash 内容,备份后即使误烧录,也可以恢复出厂状态。
10.6 注意 GPIO 引脚的复用限制
ESP-01S 对外可用的 GPIO 只有 GPIO0 和 GPIO2。这两个引脚在启动时承担特殊作用:GPIO0 决定启动模式,GPIO2 在启动时不能为低电平。因此在实际电路设计中,不要在这两个引脚上接会影响上电时序的负载,否则模块可能无法启动。
10.7 关于烧录底座
如果经常做 ESP-01S 开发,强烈推荐购买一个 ESP-01S 烧录底座或继电器模块。烧录底座把 3.3V 稳压、CH_PD 上拉、GPIO0 开关都集成好了,把模块插上去就可以烧录,省去每次接线插拔的麻烦,也能减少接线错误带来的损坏风险。
11. 总结与后续学习方向
到这里,我们已经完成了以下内容:
- 了解了 ESP-01S 模块的基本特性和启动模式。
- 安装并配置了 Arduino IDE 开发环境。
- 安装了 CH340 或 CP2102 串口驱动。
- 在 Arduino IDE 中添加了 ESP8266 开发板支持包。
- 掌握了 ESP-01S 的烧录接线方式。
- 成功烧录了 LED 闪烁程序和串口输出程序。
- 整理了常见的烧录问题与排查方法。
这套环境搭建完成后,后续学习就可以围绕 ESP-01S 的实际应用展开。比较推荐的学习路径是:
- 先写一个简单的 WiFi 连接程序,确认模块能连接路由器并获取 IP。
- 然后尝试通过 HTTP 请求访问一个测试接口,例如天气 API。
- 接着可以使用 MQTT 协议连接公共测试服务器或本地搭建的服务器。
- 最后结合继电器、传感器,做一个完整的物联网设备。
在整个学习过程中,最需要重视的是“先确认硬件链路正常,再写业务逻辑”。很多 ESP-01S 项目看起来是代码问题,其实卡在供电不稳、接线错误、端口占用这些基础环节。希望这篇文章能帮你顺利迈过环境搭建这道门槛。