单片机:STM32F103c8t6
WiFi模块:ESP8266-01s
EMQX:自身服务器上搭载emq服务器或者借用emqx window 版本
USB TO TTL模块:CH340
因为CH340不能给ESP-01s供3.3V的电,所以测试时需要外加供电
本章中涉及到的技术原理主要为ESP01S wfi模块的AT指令通信,我在上一篇文章给大家提到了ESP01S AT指令的使用,大家可以先通过我的上一篇文章入门。
STM32+ESP-01s+EMQX实现单片机MQTT协议传输数据上云(一)ESP-01s的AP-MQTT bin文件安装以及指令使用_JASON丶LI的博客-CSDN博客
如果大家嫌我啰嗦,也可以直接去看乐鑫公司AT指令集合,链接我也放下面了
AT 命令集 - ESP32 - — ESP-AT 用户指南 latest 文档 (espressif.com)
一、原理
连接:首先通过STM32的Usart通信给ESP01S(下面简称ESP)模块发送相关指令,开启ESP模块的Station(客户端模式),在进行配网模式,连接进入STM32设定好的WIFI信息,然后定义ESP的MQTT属性,最后连接进入STM32设定好的MQTT服务器。
发送指令:STM32发送指令到ESP使其向对应topic发送任意QOS等级的Message
接收指令:STM32发送指令到ESP使其订阅定义的topic,在指令接收发送方面,采用Usart接收文本数据包的形式。由于MQTT下发的通知默认格式为 '+' 为开头换行符( '/r/n' )为结尾的,所以如下图所示以 '+' 为数据的接收提取标志位,换行符作为接收标志位。
二、接线
ESP-01s | STM32 |
TXD | RXD |
RXD | TXD |
3.3v | 3.3v |
GND | GND |
三、AT指令
STM32 连网+连服务器 AT指令:
//ESP模块初始化
Serial_SendString("AT+RST\r\n");
Delay_s(1);
//ESP模块设置为Station模式
Serial_SendString("AT+CWMODE=1\r\n");
Delay_s(1);
//ESP模块连接进入WIFI(ID:JASON; PASSWORD:88888888)
Serial_SendString("AT+CWJAP=\"JASON\",\"88888888\"\r\n");
Delay_s(1);
//设定ESP模块MQTT属性(服务器ID:JASON123456car; ID:JASON; PASSWORD:123)
Serial_SendString("AT+MQTTUSERCFG=0,1,\"JASON123456car\",\"JASON\",\"123\",0,0,\"\"\r\n");
Delay_s(1);
//ESP模块连接MQTT服务器(服务器域名:123.0.0.1; 服务器端口:1883)
Serial_SendString("AT+MQTTCONN=0,\"127.0.0.1\",1883,0\r\n");
Delay_s(1);
STM32 订阅服务器端口 AT指令:
//ESP订阅TOESP01S端口
Serial_SendString("AT+MQTTSUB=0,\"TOESP01S\",0\r\n");
STM32 发送指令到服务器端口 AT指令:
//不带参:向FROMESP01S端口发送STM_OK信息 消息服务等级QOS为;0
Serial_SendString("AT+MQTTPUB=0,\"FROMESP01S\",\"STM_OK\",0,0\r\n");
//带参:向FROMESP01S端口发送信息i 消息服务等级QOS为;0
printf("AT+MQTTPUB=0,\"FROMESP01S\",\"Num=%d\",0,0\r\n",i)
STM接收订阅的服务器端口的指令信息
if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
{
uint8_t RxData = USART_ReceiveData(USART1);
if (RxStare == 0) //状态1
{
if (RxData == '+' && Serial_RxFlag == 0)
{
RxStare = 1;
pRxPacket = 0;
}
}
else if (RxStare == 1) //状态2
{
if (RxData == '\r')
{
RxStare =2;
}
else
{
Serial_RxPacket[pRxPacket] = RxData;
pRxPacket ++;
}
}
else if (RxStare == 2) //状态3
{
if (RxData == '\n')
{
RxStare = 0;
Serial_RxPacket[pRxPacket] = '\0';
Serial_RxFlag = 1;
}
}
USART_ClearITPendingBit(USART1, USART_FLAG_RXNE);
}
四、联网代码
STM32C8T6-learning-project: STM32 project (gitee.com)
点赞后,发表评论后评论区即可领取解压密码,作者24小时冲浪,秒回!
本文为作者独立编写文章来源:https://www.toymoban.com/news/detail-579166.html
本BLOG上所有的原创文章未经本人许可,不得用于商业用途及传统媒体。网络媒体转载请注明出处,否则属于侵权行为。文章来源地址https://www.toymoban.com/news/detail-579166.html
到了这里,关于STM32+ESP-01s+EMQX实现单片机MQTT协议传输数据上云(二)STM32F103与ESP-01s的Usart通信,实现STM32连接上网上云的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!