当前位置:   article > 正文

STM32+ESP-01s+EMQX实现单片机MQTT协议传输数据上云(二)STM32F103与ESP-01s的Usart通信,实现STM32连接上网上云_mqtt发送bin文件

mqtt发送bin文件

单片机: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-01sSTM32
TXDRXD
RXDTXD
3.3v3.3v
GNDGND

三、AT指令

STM32 连网+连服务器 AT指令:

  1. //ESP模块初始化
  2. Serial_SendString("AT+RST\r\n");
  3. Delay_s(1);
  4. //ESP模块设置为Station模式
  5. Serial_SendString("AT+CWMODE=1\r\n");
  6. Delay_s(1);
  7. //ESP模块连接进入WIFI(ID:JASON; PASSWORD:88888888)
  8. Serial_SendString("AT+CWJAP=\"JASON\",\"88888888\"\r\n");
  9. Delay_s(1);
  10. //设定ESP模块MQTT属性(服务器ID:JASON123456car; ID:JASON; PASSWORD:123)
  11. Serial_SendString("AT+MQTTUSERCFG=0,1,\"JASON123456car\",\"JASON\",\"123\",0,0,\"\"\r\n");
  12. Delay_s(1);
  13. //ESP模块连接MQTT服务器(服务器域名:123.0.0.1; 服务器端口:1883)
  14. Serial_SendString("AT+MQTTCONN=0,\"127.0.0.1\",1883,0\r\n");
  15. Delay_s(1);

STM32 订阅服务器端口 AT指令:

  1. //ESP订阅TOESP01S端口
  2. Serial_SendString("AT+MQTTSUB=0,\"TOESP01S\",0\r\n");

STM32 发送指令到服务器端口 AT指令:

  1. //不带参:向FROMESP01S端口发送STM_OK信息 消息服务等级QOS为;0
  2. Serial_SendString("AT+MQTTPUB=0,\"FROMESP01S\",\"STM_OK\",0,0\r\n");
  3. //带参:向FROMESP01S端口发送信息i 消息服务等级QOS为;0
  4. printf("AT+MQTTPUB=0,\"FROMESP01S\",\"Num=%d\",0,0\r\n",i)

STM接收订阅的服务器端口的指令信息

  1. if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
  2. {
  3. uint8_t RxData = USART_ReceiveData(USART1);
  4. if (RxStare == 0) //状态1
  5. {
  6. if (RxData == '+' && Serial_RxFlag == 0)
  7. {
  8. RxStare = 1;
  9. pRxPacket = 0;
  10. }
  11. }
  12. else if (RxStare == 1) //状态2
  13. {
  14. if (RxData == '\r')
  15. {
  16. RxStare =2;
  17. }
  18. else
  19. {
  20. Serial_RxPacket[pRxPacket] = RxData;
  21. pRxPacket ++;
  22. }
  23. }
  24. else if (RxStare == 2) //状态3
  25. {
  26. if (RxData == '\n')
  27. {
  28. RxStare = 0;
  29. Serial_RxPacket[pRxPacket] = '\0';
  30. Serial_RxFlag = 1;
  31. }
  32. }
  33. USART_ClearITPendingBit(USART1, USART_FLAG_RXNE);
  34. }

四、联网代码

STM32C8T6-learning-project: STM32 project (gitee.com)

点赞后,发表评论后评论区即可领取解压密码,作者24小时冲浪,秒回!

 本文为作者独立编写

 本BLOG上所有的原创文章未经本人许可,不得用于商业用途及传统媒体。网络媒体转载请注明出处,否则属于侵权行为。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/580735
推荐阅读
相关标签
  

闽ICP备14008679号