ESP-01S 入门指南:从烧录到运行的嵌入式开发教程

以下是一个适合初学者的 ESP-01S 嵌入式设备学习入门教程,介绍我第一次烧录和运行过程:

我的体验是:不要接错线,否则会烧录不成功。

1. ESP-01S 简介

1.1 ESP-01S的特点和用途

ESP-01S 是一款基于 ESP8266 芯片的小型 Wi-Fi 模块,完整的 TCP/IP 协议栈。用户可以使用该模块为现有的设备添加联网功能,也可以构建独立的网络控制器。支持IEEE 802.11 b/g/n 标准,1MB的板载Flash存储,支持 Arduino IDE 开发环境。

1.2 ESP-01S硬件规格和引脚功能

引脚 功能
3.3 3.3V供电,避免使用5V供电
RX UART_RXD,异步串口接受端
RST 外部复位引脚,低电平有效,默认高电平
IO0 GPIO 0引脚;状态:1.悬空:Flash下载模式和工作模式;2.下拉:串口下载模式
EN 使能端口,高电平工作,低电平模块不工作
IO2 GPIO2引脚,开机上电时禁止下拉,默认高电平
UTXD UART_TXD,异步串口发送端
GND GND接地引脚

规格说明书:docs.ai-thinker.com/_media/esp-...

2. 开发环境搭建

软件环境:

- 名称 备注
操作系统 rockylinux 9.5桌面版本 我的开发电脑
代码开发工具 Arduino IDE 2.3.4 编程工具
自建MQTT服务 emqx MQTT服务(可选)

准备材料:

材料 名称 备注
烧录器 USB转TTL CH340 1块
线缆 准备至少10根杜邦线(母対母) 至少10根
调试模块 USB转ESP8266模块 1块
其他板件 万能洞洞板 1片

建议准备魔法,要不然github可能打不开。

2.1 USB转TTL CH340模块和esp-01s、USB转ESP8266模块图样

esp-01s

USB转TTL CH340图

USB转ESP8266模块

2.2 安装 Arduino IDE

下载地址:www.arduino.cc/en/software...

2.2 配置 ESP8266 开发板支持

  • 打开Arduino IDE

  • 进入文件(File) -> 首选项(Perferences)

  • 附加开发板管理器网址(Additional boards manager URLS)中添加:http://arduino.esp8266.com/stable/package_esp8266com_index.json。我是配置了我自己的魔法代理网络,所以下载快了些。网上也有直接下载别人打包好的包。

  • 点击"确定(OK)"。

  • 进入工具(Tools) -> 开发板(Borad) -> 开发板管理器,搜索"ESP8266"并安装(Install);或者点击左边栏第二图图标,也能呼出开发板管理器

备注:esp8266 github仓库:github.com/esp8266/Ard...

  • 配置 ESP8266参数

重点关注这几个参数: Upload Speed=115200,Crystal Frequency=26MHZ,Flash Size=1MB,FS: 64KB,OTA:~470KB,Flash Mode=DIO

3. 安装MQTT相关库PubSubClient(可选)

由于我这次要编写的代码是将ESP-01S连接到EMQX MQTT服务器,所以需要安装这个库。

进入工具(Tools) -> 管理库(Manage Libraries),搜索PubSubClient并安装;或者直接点击左边栏第三个图标,也能呼出。

备注:自建MQTT服务的话,请看这里。github.com/emqx/emqx,或 docs.emqx.com/en/emqx/lat...

4. 安装esptool

安装了python,再安装esptool。

shell 复制代码
sudo yum install python3
pip install esptool

这个工具很方便擦除已上传的程序,然后重新上传新的代码。

5. 连接ESP-01S进行编程

5.1 ESP-01S的连接方式(使用USB转TTL适配器):

ESP-01S 板上引脚 对应连接的USB转TTL模块引脚 备注
3.3v 3.3V ------
GND GND ------
TX RXD ------
RX TXD ------
IO0 GND 编程烧录模式

注意:编程时需要将USB转TTL适配器引脚IO0接地,上传完成后断开此连接。实际的接线,可以参考我的,我用了一个万能洞洞板,焊在洞洞板上的每排排针都是用焊锡连通,这样就能实现ESP-01S的GNDIO0都能接到USB转TTL模块的GND

重点:反正ESP-01S的GNDIO0都能接到USB转TTL模块的GND,要不然烧录失败。

5.2 擦除代码

说明:如果出现上传失败,才执行这一步骤。请关闭Arduino IDE软件,然后再去执行擦除esp-01s上已有程序或固件。

命令行终端执行的方式擦除最快捷。

/dev/ttyUSB0 是esp-01s在我电脑上的串口端口。

shell 复制代码
[xxxxx@rockylinux95 ~]$ esptool.py --port /dev/ttyUSB0 flash_id

esptool.py v4.8.1
Serial port /dev/ttyUSB0
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting...
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: (我隐藏了)
Uploading stub...
Running stub...
Stub running...
Manufacturer: 20
Device: 4014
Detected flash size: 1MB
Hard resetting via RTS pin...

看到这样的返回,这样就表示擦除成功。

5.3 写一个程序

备注:除了下面的代码,Arduino IDE 默认也带了很多示例 ,在文件(File)-> 示例(Examples),可以选择文件(File)-> 示例(Examples)->ESP8266->Blink

点击文件(File)-> sketch(项目),下面程序的内容是连接上wifi并发送数据到自建的MQTT服务。

代码如下:

C++ 复制代码
#include <ESP8266WiFi.h>
#include <PubSubClient.h>

// Wi-Fi 配置
const char* ssid = "wifi名称"; // wifi名称
const char* password = "wifi密码"; // wifi密码

// EMQX MQTT 配置
const char* mqttServer = "EMQX 服务器 IP"; // EMQX 服务器 IP
const int mqttPort = MQTT端口; // MQTT 端口,我用的我自建的emqx MQTT服务,用的tcp端口
const char* mqttUser = "MQTT用户名"; // MQTT 用户名(可选)
const char* mqttPassword = "MQTT密码"; // MQTT 密码(可选)

// MQTT Topic
const char* topicPublish = "esp01s/temperature"; // 发布消息的 Topic
const char* topicSubscribe = "esp01s/control"; // 订阅消息的 Topic

WiFiClient espClient;
PubSubClient client(espClient);

// 模拟传感器数据
float readTemperature() {
    return 25.5; // 替换为实际传感器读取代码
}

// Wi-Fi 连接
void setupWiFi() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
}

Serial.println("WiFi connected");

}


// MQTT 回调函数
void callback(char* topic, byte* payload, unsigned int length) {
    Serial.print("Message arrived [");
    Serial.print(topic);
    Serial.print("] ");
    for (int i = 0; i < length; i++) {
        Serial.print((char)payload[i]);
    }

    Serial.println();

    // 处理订阅消息
    if (strcmp(topic, topicSubscribe) == 0) {
        String message = "";
        for (int i = 0; i < length; i++) {
            message += (char)payload[i];
        }

        Serial.println("Received command: " + message);

    }

}


// MQTT 连接

void reconnect() {
    while (!client.connected()) {
        Serial.println("Connecting to MQTT...");
        if (client.connect("ESP01S_Client", mqttUser, mqttPassword)) {
            Serial.println("MQTT connected");
            client.subscribe(topicSubscribe); // 订阅 Topic
        } else {
            Serial.print("MQTT connection failed, rc=");
            Serial.print(client.state());
            Serial.println(" retrying in 5 seconds...");
            delay(5000);
        }

    }

}

// 发布传感器数据
void publishSensorData() {
    float temperature = readTemperature();
    String payload = String(temperature);
    client.publish(topicPublish, payload.c_str());
    Serial.println("Temperature published: " + payload);
}


void setup() {
    Serial.begin(115200);
    setupWiFi();
    client.setServer(mqttServer, mqttPort);
    client.setCallback(callback);
}


void loop() {
    if (!client.connected()) {
        reconnect();
    }
    client.loop();

    // 每 10 秒发布一次数据
    static unsigned long lastPublish = 0;
    if (millis() - lastPublish > 10000) {
        publishSensorData();
        lastPublish = millis();
    }

}

备注:MQTT 用户名、密码,在emqx管理后台的【客户端认证】,我用的是Password-Based

5.4 执行代码验证

编写完成代码,接下来执行验证,检查代码是否有编译错误:点击项目(Sketch)->验证/编译(Verify/Compile)

5.5 开始烧录

接下来上传代码。如果上一步执行了擦除操作,请重新插拔USB转TTL适配器,要不然出现上传不了代码。点击项目(Sketch)->上传(Upload)

出现Hash of data verified.,就烧录成功了。

5.6 验证烧录好的设备运行情况

  • 点击右上角的串口监控器(Serial Monitor),串口监控器(Serial Monitor)的波特率也要是115200,否则无法正常运行。

  • 将esp-01s插到USB转ESP8266模块上,然后将USB转ESP8266模块插到电脑USB上;

Arduino IDE的串口监控器(Serial Monitor)截图:

EMQX服务上能正常看到已连接上的客户端截图:

相关推荐
楼台的春风5 小时前
【高斯滤波器(Gaussian Filter)详解】
图像处理·人工智能·opencv·算法·计算机视觉·matlab·嵌入式
用户235716688572 天前
Raspberry Pi边缘计算网关设计与LoRa通信实现
嵌入式
羑悻的小杀马特3 天前
嵌入式迷雾:现状谜团待解,未来行情走向何方?
c++·嵌入式
楼台的春风4 天前
【图像亮度、对比度调整,直方图均衡化及图像平滑】
图像处理·人工智能·opencv·算法·计算机视觉·matlab·嵌入式
FreakStudio5 天前
手把手教你用 MicroPython 玩转幻尔串口舵机,代码+教程全公开
python·嵌入式·大学生·面向对象·技术栈·电子diy·电子计算机
楼台的春风5 天前
【图像的读写与基本操作】
图像处理·人工智能·深度学习·opencv·算法·计算机视觉·嵌入式
fanged5 天前
CMake小结2(PICO为例)
学习·嵌入式
FreakStudio6 天前
开源一款DDS信号发生扩展板-FreakStudio多米诺系列
单片机·嵌入式·电子diy·电子计算机
FreakStudio7 天前
开源一款数据转换扩展板-FreakStudio多米诺系列
python·单片机·嵌入式·电子diy