零基础 ESP-01S使用AT指令连接阿里云(含ESP-01S 固件烧录)

一、前言

在物联网开发中,ESP-01S因其体积小、功耗低、价格亲民等特点,成为众多开发者的首选。而阿里云作为国内领先的云服务提供商,为物联网开发者提供了丰富的服务。本教程旨在帮助零基础的用户,从固件烧录开始,通过AT指令将ESP-01S连接到阿里云,实现物联网设备的接入和控制。

百度网盘链接

教程用到的资料都放在百度网盘的链接里面了
在这里插入图片描述

链接:https://pan.baidu.com/s/1abde1Mv5gqrObWjb4GtAug?pwd=h3in
提取码:h3in
如果遇到什么疑问,欢迎加入单片机与物联网开发的讨论群!一起学习,互相进步。在这里插入图片描述

二、准备工作

1. ESP-01S模块
2.USB转TTL模块(用于与电脑通信)
3.杜邦线若干
4.阿里云账号及物联网平台服务
5.串口调试工具(如SSCOM、PuTTY等)
6.ESP8266烧录工具(如FlashBurner、ESPtool等)
7.ESP8266固件文件(确保与你的模块型号相匹配)

三、ESP8266 01S 烧录固件

1.下载ESP01s固件文件【本实验用到的是MQTT透传AT固件(固件号:1471)】

网址:
https://docs.ai-thinker.com/%E5%9B%BA%E4%BB%B6%E6%B1%87%E6%80%BB

2.下载ESP8266烧录工具(flash_download_tool)

网址:
https://www.espressif.com.cn/zh-hans/support/download/other-tools

3.按照下面的接线方式连接ESP8166 01S模块和USB转TTL模块

(注意:CH340没有多余的供电引脚,所以需要外接3.3V电源)

USB转TTL模块      ESP8266-01S
    3.3V     -------> 3.3V
    3.3V     -------> EN
    GND      -------> GND
    TXD      -------> RX
    RXD      -------> TX
    GND      -------> IO0
4.打开下载工具
1.选择端口
2.选择波特率
3.选择固件文件
4.先点击Erase,再点击START

在这里插入图片描述

5.烧录完成后这样接线
  ESP-01S      USB转TTL模块
    3.3V     -------> 3.3V
    GND      -------> GND    
    TXD      -------> RX
    RXD      -------> TX

四、阿里云物联网平台配置

具体可以参考我的上一篇文章:

零基础搭建自己的阿里云物联网平台

五、AT指令连接阿里云

1.打开串口调试工具

1.选择端口
2.选择波特率
3.选择发送换行
4.点击打开

2.连接阿里云的AT指令介绍

1.AT
指令:AT
说明:测试AT指令是否正常
返回:OK
2.AT+RST
指令:AT+RST
说明:软重启模组
返回:OK
3.AT+CWMODE=1
指令:AT+CWMODE=1
说明:设置模组工作模式为STA模式
返回:OK
注意:如果返回ERROR,请检查是否正确连接ESP8266-01S模块
4. AT+CIPSNTPCFG=1,8,“ntp1.aliyun.com”
指令:AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"
说明:设置SNTP服务器地址
返回:OK
5. AT+CWJAP=“WIFI名字”,“WIFI密码”
    指令:AT+CWJAP="WIFI名字","WIFI密码"
    说明:连接到指定的WiFi网络
    返回:OK
6. AT+MQTTUSERCFG=0,1,“NULL”,“用户名”,“密码”,0,0,“”
    指令:AT+MQTTUSERCFG=0,1,"NULL","用户名","密码",0,0,""
    说明:配置MQTT连接参数
    返回:OK
    举例:AT+MQTTUSERCFG=0,1,"NULL","device_klx&a1smmmV6Xz0","f3139b3188c9fd8a67f01729cc2819fead22818446ac1098237e5ef2f524c37b",0,0,""
7. AT+MQTTCLIENTID=0,“clientId”
    指令:AT+MQTTCLIENTID=0,"ClientId"
    说明:配置MQTT客户端ID
    返回:OK
    注意:配置clientid时逗号前面要加\
    举例:AT+MQTTCLIENTID=0,"a1smmmV6Xz0.device_klx|securemode=2\,signmethod=hmacsha256\,timestamp=1708563604419|" 
8. AT+MQTTCONN=0,“连接域名”,1883,1
    指令:AT+MQTTCONN=0,"连接域名",1883,1  
    说明:连接到指定的MQTT服务器
    返回:OK
    举例:AT+MQTTCONN=0,"a1smmmV6Xz0.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883,1
9. AT+MQTTSUB=0,“订阅主题”,1
    指令:AT+MQTTSUB=0,"订阅主题",1
    说明:订阅指定的MQTT主题
    返回:OK
    举例:AT+MQTTSUB=0,"/sys/a1smmmV6Xz0/device_klx/thing/service/property/set",1
10. AT+MQTTPUB=0,“发布主题”,“AJson格式内容”,1,0
    指令:AT+MQTTPUB=0,"发布主题","AJson格式内容",1,0
    说明:发布指定的MQTT主题
    返回:OK
      注意:逗号前面要加反斜杠 \ ,引号变为 \"
    举例:AT+MQTTPUB=0,"/sys/a1smmmV6Xz0/device_klx/thing/event/property/post","{\"params\":{\"temperature\":45\,\"LightLux\":67\,\"WaterLevel\":78}}",1,0
11.AT+MQTTCLEAN=0
    指令:AT+MQTTCLEAN=0
    说明:断开MQTT连接
    返回:OK

六.AT指令连接阿里云图片

1.串口助手AT指令连接阿里云图片

依次输入以下指令,即可连接阿里云

1.AT
2.AT+RST
3.AT+CWMODE=1
4.AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"
5.AT+CWJAP="wxlzss","123456789"
6.AT+MQTTUSERCFG=0,1,"NULL","device_klx&a1smmmV6Xz0","f3139b3188c9fd8a67f01729cc2819fead22818446ac1098237e5ef2f524c37b",0,0,""
7.AT+MQTTCLIENTID=0,"a1smmmV6Xz0.device_klx|securemode=2\,signmethod=hmacsha256\,timestamp=1708563604419|"
8.AT+MQTTCONN=0,"a1smmmV6Xz0.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883,1

在这里插入图片描述

2.阿里云产品在线图片

在这里插入图片描述

4.订阅主题指令图片

指令:AT+MQTTSUB=0,“/sys/a1smmmV6Xz0/device_klx/thing/service/property/set”,1

这个时候我们订阅了/sys/a1smmmV6Xz0/device_klx/thing/service/property/set主题,可以使用阿里云在线调试进行模拟调试

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5.发布主题图片
我们在串口调试助手发送以下指令:
    AT+MQTTPUB=0,"/sys/a1smmmV6Xz0/device_klx/thing/event/property/post","{\"params\":{\"temperature\":45\,\"LightLux\":67\,\"WaterLevel\":78}}",1,0

在这里插入图片描述

这个时候,平台会收到我们发布的消息,并且会进行物模型数据的显示
在这里插入图片描述

九、总结

本教程从固件烧录开始,详细介绍了如何使用AT指令将ESP8266-01S连接到阿里云物联网平台。对于零基础的用户来说,只要按照教程操作,就能够轻松实现物联网设备的接入和控制。希望本教程能够对大家在物联网开发过程中有所帮助。最后呢,在编写博客的过程中,我尽量保持内容的准确性和完整性,但也难免会有疏漏或错误之处。欢迎各位读者指出其中的问题,帮助我不断进步。

<think>好的,我现在要解决用户的问题,即如何配置STM32F103C8T6通过USART2与ESP01S模块通信,并使用AT指令连接阿里云MQTT并发布数据。首先,我需要整理已有的信息,然后分步骤分析。 用户提供的引用内容提到了ESP-01S需要烧录固件,特别是MQTT固件库,这一点很重要。另外,STM32和ESP01S的连接需要正确配置引脚,比如USART2的TX和RX对应到ESP01S的RX和TX,同时电源电压要匹配,可能需要3.3V或5V,具体看之前的烧录情况。还有,用户提到参考了B站视频和资料,说明可能有现成的AT指令流程可以参考。 接下来,我需要考虑硬件连接部分。STM32的USART2对应的引脚是PA2(TX)和PA3(RX),需要连接ESP01S的RX和TX,同时要确保电源和地线正确连接,CH_PD可能需要接高电平来使能模块。此外,可能需要复位引脚的连接,但用户的问题中没有提到,可能需要保持默认状态。 然后是软件配置部分。STM32的USART2需要初始化为合适的波特率,通常ESP01S默认是115200,但可能根据固件不同有所变化。需要配置USART的波特率、数据位、停止位、校验位等参数,并启用接收中断,以便处理来自ESP01S的响应。发送AT指令时,要注意每条指令的格式和等待响应,可能需要超时机制和重试策略。 接下来是AT指令的具体步骤。首先发送AT测试通信,然后配置为Station模式,连接到Wi-Fi网络,再连接阿里云MQTT服务器。需要获取阿里云的三元组信息(ProductKey、DeviceName、DeviceSecret),生成MQTT连接参数,比如clientId、username、password。然后发送MQTT连接指令,订阅主题,发布数据。这里需要确保每个步骤的AT指令正确,并且处理可能的错误响应。 在代码实现方面,需要编写USART2的初始化函数,发送和接收函数,处理中断接收的数据,并解析AT指令的响应。可能需要使用状态机来管理不同的AT指令步骤,确保顺序执行。例如,先发送AT,收到OK后发送Wi-Fi连接指令,成功后再发送MQTT连接指令,最后发布数据。 还需要考虑错误处理,比如超时没有收到响应,或者返回ERROR,这时候可能需要重试或者报错。此外,阿里云MQTT的参数生成可能需要动态计算,比如使用时间戳和签名方法,用户可能需要参考阿里云的文档来生成正确的username和password。 最后,测试和调试是关键。通过串口打印调试信息,或者使用调试器检查程序流程,确保每一步都正确执行。同时,检查硬件连接是否稳固,电源是否稳定,避免因为硬件问题导致通信失败。 现在,需要将这些步骤组织成清晰的指导步骤,确保用户能够按照顺序配置硬件、初始化USART、发送AT指令,并处理响应。同时,提醒用户注意常见问题,比如波特率不匹配、Wi-Fi密码错误、三元组信息错误等,以及如何排查这些问题。</think>### STM32F103C8T6通过USART2与ESP-01S通信配置步骤 #### 一、硬件连接 1. **引脚接线** - STM32 USART2_TX (PA2)ESP-01S_RX - STM32 USART2_RX (PA3)ESP-01S_TX - STM32 3.3V → ESP-01S_VCC (需确认固件烧录时电压选择) - STM32 GND → ESP-01S_GND - ESP-01S_CH_PD → 3.3V (模块使能) - ESP-01S_RST悬空或接上拉电阻 2. **电源要求** - 确保ESP-01S供电稳定,建议使用独立3.3V LDO稳压器[^3] #### 二、STM32软件配置 1. **USART2初始化** ```c void USART2_Init(uint32_t baudrate) { GPIO_InitTypeDef GPIO_InitStruct; USART_InitTypeDef USART_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); // TX配置 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); // RX配置 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStruct); USART_InitStruct.USART_BaudRate = baudrate; // 通常115200 USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(USART2, &USART_InitStruct); USART_Cmd(USART2, ENABLE); USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); // 启用接收中断 } ``` 2. **AT指令发送函数** ```c void ESP_SendCmd(char* cmd, uint32_t timeout) { USART_SendData(USART2, (uint8_t*)cmd, strlen(cmd)); // 添加超时等待逻辑 } ``` #### 三、AT指令操作流程 1. **基础通信测试** ``` AT 响应: OK ``` 2. **WiFi连接配置** ```c ESP_SendCmd("AT+CWMODE=1\r\n", 2000); // 设置为Station模式 ESP_SendCmd("AT+CWJAP=\"SSID\",\"PASSWORD\"\r\n", 10000); // 连接路由器 ``` 3. **MQTT连接阿里云** ```c // 生成三元组参数(需提前计算) char mqtt_cmd[256]; sprintf(mqtt_cmd, "AT+MQTTCONN=\"%s.iot-as-mqtt.cn-shanghai.aliyuncs.com\",1883,1,\"%s\",\"%s\"\r\n", productKey, clientId, username, password); ESP_SendCmd(mqtt_cmd, 5000); ``` - **参数生成公式**: - $clientId = deviceId|securemode=3,signmethod=hmacsha1|$ - $username = deviceName\&productKey$ - $password = hmacsha1(deviceSecret, clientId)$ 4. **数据发布** ```c char pub_cmd[128]; sprintf(pub_cmd, "AT+MQTTPUB=\"/sys/%s/%s/thing/event/property/post\",1,\"{...}\"\r\n", productKey, deviceName); ESP_SendCmd(pub_cmd, 3000); ``` #### 四、关键实现细节 1. **响应解析** - 在接收中断中缓存数据,使用状态机解析`OK`/`ERROR`响应 - 实现超时重传机制(建议3次重试) 2. **阿里云三元组配置** -物联网平台获取:$productKey$, $deviceName$, $deviceSecret$ - 密码生成示例(伪代码): $$password = hmac_sha1(deviceSecret, clientId)$$ 3. **JSON数据格式** ```json {"params":{"Temperature":25.6,"Humidity":60}} ``` #### 五、常见问题排查 1. **无响应** - 检查硬件接线是否交叉(TX→RX) - 确认波特率与固件匹配(AT+UART?查询) 2. **MQTT连接失败** - 检查时间戳同步(误差需<15分钟) - 验证三元组计算准确性 3. **数据发布失败** - 使用`AT+MQTTSUB`先订阅主题 - 确认JSON格式有效性
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨小羽ovo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值