【ESP-01S ESP8266 AT指令连接阿里云物联网平台】_esp826601s at模式下控制gpio 0

微信公众号 | electronic造物实验室

阿里云物联网平台

新建设备

  1. 注册阿里云账号并搜索物联网服务。选择并进入物联网平台产品页。
    搜索物联网
  2. 点击管理控制台,进入物联网平台管理界面。进入物联网平台
  3. 选择公共实例(如果尚未开通,需要先进行开通,具体步骤不再赘述),然后点击进入。选择公共实例
  4. 创建一个新的产品。填写产品名称所属品类等必要信息,并完成产品创建步骤。创建产品
    在这里插入图片描述
  5. 在创建完成的产品页面上,添加设备。输入设备名称并确认。添加设备在这里插入图片描述
  6. 输入设备名称,输入完成后点击确认;
    在这里插入图片描述
    至此,阿里云物联网平台创建设备完成,接下来获取MQTT连接参数。

获取AT参数

创建设备成功后进入设备详情页,查看MQTT连接参数,并进行保存。MQTT连接参数
通过上述步骤,你可以获取到阿里云物联网平台上设备的MQTT连接参数,并进行保存。这些参数将用于在ESP-01S / ESP8266上配置AT指令,实现设备与物联网平台之间的通信。

AT指令介绍

AT命令,用来控制TE(TerminalEquipment)和MT(Mobile Terminal)之间交互的规则。AT指令可以参考乐鑫官方提供的AT 命令集

连接阿里云AT指令介绍

  1. AT+RST 复位ESP-01S / ESP8266模块;
  2. AT+CWMODE=3 设置ESP模块为Station+SoftAP模式;
  3. AT+CWJAP=“SSID”,“PWD” 设置ESP模块连接无线网络 *注意双引号为英文;
  4. AT+MQTTUSERCFG=0,1,“NULL”,“username”,“password”,0,0,“” 设置 MQTT 用户属性;
  5. AT+MQTTCLIENTID=0,“clientId” 设置MQTT 的clientId参数;
  6. AT+MQTTCONN=0,“host”,1883,1 连接 MQTT Broker;
  7. AT+MQTTCLEAN 断开MQTT连接。
    以上为连接阿里云MQTT服务器需要的配置命令,接下来在阿里云新建设备,获取AT指令需要填充的参数。

MQTT固件

ESP-01S 1M Flash固件下载1MB AT MQTT
ESP8266 4M Flash固件下载4MB AT MQTT

固件下载

硬件连接

USB转TTL推荐使用带有独立LDO的模块,因为ESP8266EX通讯时电流较大,如无独立LDO可能导致ESP8266EX掉电重启。
可以使用下图模块,带独立LDO,可以提供一定带负载能力;
请添加图片描述

下图模块不推荐使用,无独立LDO,3V3为CH340提供,带负载能力弱。
请添加图片描述
ESP-01烧录固件

VCC -----> TTL  3.3V 
GND -----> TTL GND
TXD -----> TTL RXD
RXD-----> TTL TXD
EN-------> TTL 3.3V 
RST ----> TTL RST
GPIO0 ---> GND
GPIO2 ---> 3.3V (不接也可以)

基本接法如下图所示:
ESP-01烧录固件接线
ESP-01S烧录固件

VCC -----> TTL  3.3V 
GND -----> TTL GND
TXD -----> TTL RXD
RXD-----> TTL TXD
RST ----> TTL RST
GPIO0 ---> GND

ESP-01S烧录固件

固件烧录

下载AT指令固件到本地后,需要使用乐鑫提供的flash_download_tool工具。下载后直接解压即用,运行烧录工具。乐鑫官网 - 支持 - 相关下载 - 工具-Flash 下载工具
Flash 下载工具
选择型号,选择ESP8266
在这里插入图片描述
打开烧录软件, 从"…“选择要烧录的bin文件: ESP8266-AT_MQTT-1M.bin;填写烧录地址"0x0000”SPI MODE选择 “DOUT”;FLASH SIZE选择 “8Mbit”;"DoNotChgBin"不变;“COM” 选择你USBtoTTL的COM口;波特率默认即可。
在这里插入图片描述上述配置完成后, 点击START开始烧录, 若一直停在等待上电同步可以就将RST连接GND再断开, 就可以开始下载了。

串口助手调试

在进行串口助手调试之前,需要进行正确的硬件连接。

硬件连接

对于ESP-01,需要使用两个上拉电阻将EN和RST引脚上拉到3.3V,如下图所示:
在这里插入图片描述
对于ESP-01S,只需要连接3.3V、RXD、TXD和GND即可。

测试指令

在串口软件中打开COM口,选择波特率115200,加回车换行;发送AT指令,并等待接收到回复的"OK"。
在这里插入图片描述
接下来将MQTT信息填充进AT命令中进行连接测试。

  1. AT+RST 复位ESP-01S / ESP8266模块;
  2. AT+CWMODE=3 设置ESP模块为Station+SoftAP模式;
  3. AT+CWJAP=“SSID”,“PWD” 设置ESP模块连接无线网络 *注意双引号为英文;
  4. AT+MQTTUSERCFG=0,1,“NULL”,“username”,“passwd”,0,0,“” 设置 MQTT 用户属性;
  5. AT+MQTTCLIENTID=0,“clientId” 设置MQTT 的clientId参数;
  6. AT+MQTTCONN=0,“host”,1883,1 连接 MQTT Broker;
  7. AT+MQTTCLEAN 断开MQTT连接。
    AT+MQTTUSERCFG中的username和passwd与下图对应填写,AT+MQTTCLIENTID中的clientId也与下图对应,AT+MQTTCONN的host与下图mqttHostUrl对应。
    需要注意AT+MQTTCLIENTID指令中的clientId中的逗号前需要加’ \ '符号进行转义,假设clientId为“a1Tt5hwk2af.Device1|securemode=2,signmethod=hmacsha256,timestamp=1685260171273|”,那么发送的AT指令应为AT+MQTTCLIENTID=0,“723712|securemode=2,signmethod=hmacsha256,timestamp=1685260171273|”
    在这里插入图片描述
    发送完以上指令后,在阿里云物联网平台中刷新设备网页,你将会看到设备已成功上线的信息。

[18:24:44.609]发→◇AT
□
[18:24:44.613]收←◆AT

OK

[18:30:14.787]发→◇ATE0
□
[18:30:14.791]收←◆ATE0

OK

[18:30:31.339]发→◇AT+CWMODE=3
□
[18:30:31.344]收←◆
OK

[18:31:21.198]发→◇AT+CWJAP="Xiaxxxx81","dsssxx1"
□
[18:31:22.397]收←◆WIFI CONNECTED

[18:31:23.908]收←◆WIFI GOT IP

OK

[19:24:10.517]发→◇AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"
□
[19:24:10.530]收←◆
OK

[19:24:53.745]发→◇AT+MQTTUSERCFG=0,1,"NULL","Devixx1&a1Ttxxxaf","05314xxxxxxxxxxxxxxxxxxxxxxc5de74",0,0,""
□
[19:24:53.755]收←◆
OK

[19:25:09.562]发→◇AT+MQTTCLIENTID=0,"a1xxxxf.Device1|securemode=2\,signmethod=hmacsha256\,timestamp=1685260171273|"
□
[19:25:09.571]收←◆
OK

[19:25:21.162]发→◇AT+MQTTCONN=0,"a1xxxxxaf.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883,1
□
[19:25:21.347]收←◆+MQTTCONNECTED:0,1,"a1Tt5wtm2af.iot-as-mqtt.cn-shanghai.aliyuncs.com","1883","",1

OK


可以看到设备已成功上线。
在这里插入图片描述

AT_Command移植

AT_Command由魔罗大佬开发,是一款管理AT命令通信交互组件, 适用于Modem、WIFI模块、蓝牙等使用AT命令或者ASCII命令行通信的场景。本次AT连接使用AT_Command移植到STM32F103C8T6进行运行。AT_Command Gitee链接
本次的项目环境为HAL库+CubeMx进行配置开发。

  1. 首先需要定义适配器,完成驱动接口及缓冲区设置
    在wifi_uart.c文件中,进行了串口发送和接收回调的实现。
/\*
 \* @brief 向串口发送缓冲区内写入数据并启动发送
 \* @param[in] buf - 数据缓存
 \* @param[in] len - 数据长度
 \* @return 实际写入长度(如果此时缓冲区满,则返回len)
 \*/
unsigned int wifi\_uart\_write(const void \*buf, unsigned int len)
{   
    unsigned int ret;
    ret = ring\_buf\_put(&rbsend, (unsigned char \*)buf, len);  
    HAL\_UART\_Transmit(&wifi_uart,(unsigned char \*)buf,len,0xffff);  // wifi串口数据发送
    return ret; 
}
/\*
 \* @brief WIFI串口接收
 \* @param[in] none
 \* @return none
 \*/
void WIFI\_UART\_RxCpltCallback(unsigned char \*data, uint8\_t len)
{
	ring\_buf\_put(&rbrecv, data, len);           /\*将数据放入接收缓冲区\*/  
}

串口数据接收使用串口2(TX为PA2, RX为PA3)的是DMA+空闲中断的方式进行接收,在stm32f1xx_it.c文件中:

/\*\*
 \* @brief This function handles USART2 global interrupt.
 \*/
void USART2\_IRQHandler(void)
{
  /\* USER CODE BEGIN USART2\_IRQn 0 \*/

  /\* USER CODE END USART2\_IRQn 0 \*/
  HAL\_UART\_IRQHandler(&huart2);
  /\* USER CODE BEGIN USART2\_IRQn 1 \*/
	if(\_\_HAL\_UART\_GET\_FLAG(&huart2, UART_FLAG_IDLE) != RESET)  // 空闲中断
	{
		\_\_HAL\_UART\_CLEAR\_IDLEFLAG(&huart2);  // 清除空闲中断标志位
		HAL\_UART\_DMAStop(&huart2);  // 停止DMA接收
		
		if( wifiConnectFlag == 0)  // 未完成配置
			WIFI\_UART\_RxCpltCallback(uart2_rx_buf, strlen(uart2_rx_buf));  // 数据处理函数
		else  // 配置完成 等待设备连接
			wifi\_connnect\_calback(uart2_rx_buf, strlen(uart2_rx_buf));
		memset(uart2_rx_buf, 0, strlen(uart2_rx_buf));  // 清除数据
		
		HAL\_UART\_Receive\_DMA(&huart2, uart2_rx_buf, buf_size);  // 重新打开DMA接收
	}
  /\* USER CODE END USART2\_IRQn 1 \*/
}

  1. 使用AT适配器创建AT通信对象,在wifi.c文件中:
static at_obj_t at;static at_obj_t at;
/* 
 * @brief    wifi初始化  配置8266
 */
void wifi_init(void)
{
	static char wifi_msg[128] = {0};
	// WIFI 串口初始化
    wifi_uart_init(115200);
    at_obj_init(&at, &at_adapter);
	// 关闭回显
    at_send_singlline(&at, NULL, "ATE0");  	// OK
    // AT测试
    at_send_singlline(&at, NULL, "AT");  // OK  ERROR *
	// 配置工作模式 AP模式
	at_send_singlline(&at, NULL, "AT+CWMODE=3");  
	// 创建路由器
	sprintf(wifi_msg, "AT+CWJAP=\"%s\",\"%s\"", SSID, PWD);
	at_send_singlline(&at, NULL, wifi_msg);  
	// 设定域名
	at_send_singlline(&at, NULL, "AT+CIPSNTPCFG=1,8,\"ntp1.aliyun.com\"");  
## 最后

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**

**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/8a3f05eecfdd2fa0ef7613d4cf0bebb2.png)

![img](https://img-blog.csdnimg.cn/img_convert/cb5d7df8e5e37cdda727a5ee2642bddf.jpeg)

![img](https://img-blog.csdnimg.cn/img_convert/052e21407be634ac1ed1c36b176260d8.png)

 ![img](https://img-blog.csdnimg.cn/img_convert/958a8c0409e3589d06360fc8db6d539d.png)

![img](https://img-blog.csdnimg.cn/img_convert/759b26ac6c41f5a887afe25b33f37a18.png)

![img](https://img-blog.csdnimg.cn/img_convert/caeb1eb552a9749e44d24a4f5f55c58b.png)

![](https://img-blog.csdnimg.cn/img_convert/0e81af25ed64c2d47045ad29c5d57e78.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!


中...(img-9GzJ9cIX-1715606833387)]

[外链图片转存中...(img-1vHYXjWh-1715606833388)]

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!


ESP8266是一款可以通过Wi-Fi连接网络的微控制器模块,支持订阅和发布MQTT消息。MQTT是一种轻量级的发布/订阅消息协议,可用于连接各种IoT设备和平台,包括阿里云。 为了实现在ESP8266上使用MQTT协议订阅阿里云,我们需要使用ESP8266AT指令集。ESP8266AT指令集是这种微控制器模块的AT命令集,它可以通过串口通信控制模块的各种功能。 在阿里云的MQTT控制台中,我们需要创建一个设备,并在该设备下创建一个Topic,该Topic将用于订阅或发布消息。使用ESP8266AT指令,我们可以将设备证书、客户端ID、用户名和密码设置为模块。然后,我们可以使用AT+CIPSTART命令连接阿里云MQTT服务器,并使用AT+CIPSEND命令向服务器发送订阅信息。 下面是一个示例代码: AT+CWJAP="ssid","password" AT+CWMODE=3 AT+CIPMUX=0 AT+CIPSTART="TCP","mqtt.xxxxx.aliyuncs.com",1883 AT+CIPSEND=<len> <Packet> AT+CIPCLOSE 在代码中,<len>是发送数据包的总长度,<Packet>是MQTT订阅的消息。 在ESP8266成功连接阿里云MQTT服务器并订阅消息后,我们可以在UI上设置其它功能,如心跳间隔、消息重试等。 通过使用ESP8266AT指令集,我们可以实现在ESP8266上订阅阿里云MQTT消息,并轻松地与阿里云IoT平台进行通信。同时,我们可以通过该模块,控制各种智能家居和IoT设备,使其能够与阿里云平台无缝协作,为用户提供更好的体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值