系列文章目录
STM32-ESP8266-EMQX-WPF方案实现之STM32通过ESP8266发送数据到EMQX服务器
前言
通过STM32采集数据,ESP8266连接热点发送数据到云服务器EMQX,EMQX转发给WPF应用程序的方案
此文章是通过STM32采集流量传感器YF-S201数据和发送数据到ESP8266。主要内容就是STM32采集流量数据,通过串口让ESP8266发送数据到EMQX服务器
一、ESP8266向EMQX服务器发送消息功能
STM32通过串口发送AT指令,让ESP8266在连接到网络的情况下能够向EMQX服务器订阅消息。
代码如下:
/*以下为测试代码1,测试ESP8266向EMQX服务器发送消息和订阅主题功能*/
sprintf((char *)AT_USERCFG,"AT+MQTTUSERCFG=0,1,\"%s\",\"\",\"\",0,0,\"\"\r\n",ClintID);
sprintf((char *)AT_Connect,"AT+MQTTCONN=0,\"%s\",1883,1\r\n",Url);
HAL_UART_Transmit(&huart1 , (uint8_t *)AT_USERCFG,sizeof(AT_USERCFG), 0xFFFF);
//HAL_UART_Transmit(&huart2 , (uint8_t *)AT_USERCFG,sizeof(AT_USERCFG), 0xFFFF);
HAL_Delay(1000);
HAL_UART_Transmit(&huart1 , (uint8_t *)AT_Connect,sizeof(AT_Connect), 0xFFFF);
//HAL_UART_Transmit(&huart2 , (uint8_t *)AT_Connect,sizeof(AT_Connect), 0xFFFF);
HAL_Delay(1000);
while(1)
{
sprintf((char *)AT_Pub,"AT+MQTTPUB=0,\"%s\",\"%s\",0,0\r\n",PublishTopic,SendMessage);
HAL_UART_Transmit(&huart1 , (uint8_t *)AT_Pub,sizeof(AT_Pub), 0xFFFF);
HAL_Delay(3000);
//HAL_UART_Transmit(&huart1 , (uint8_t*)"AT+MQTTCLEAN=0\r\n",sizeof("AT+MQTTCLEAN=0\r\n"), 0xFFFF);
//HAL_Delay(10000);
}
前提条件是已经通过串口调试助手连接到了热点,此后ESP8266上电默认连接了热点。
指令步骤:
1.配置MQTT客户端的基本信息(设备ID,账号密码等等)
2.AT连接MQTT服务器指令,Url为我的EMQX服务器的IP地址,PublishTopic为发送主题,SendMessage为发送的消息
3.AT发送信息到MQTT服务器主题的指令
以上为发送的大致指令,如果需要断开则使用AT+MQTTCLEAN=0即可。
二、EMQX服务器内部新建客户端进行测试
1.添加客户端并订阅
2.PCB板上电测试
总结
此时就完成了STM32将采集的流量数据发送到EMQX服务器上并转发给订阅了此主题的其他设备的功能
剩下的就是新建一个WPF应用程序订阅EMQX服务器的主题并且将接收到的数据存储到数据库内。