STM32+ESP8266基于paho MQTT库连接阿里云
如果不知道怎么获取MQTT三元件的可以看下:
linux环境下MQTT连接阿里云_linux mqtt_奇怪的星星!的博客-CSDN博客
下载MQTT的库:Paho https://github.com/eclipse/paho.mqtt.embedded-c
只需要MQTTPacket/src下的所有文件。

首先通过AT指令连接串口发送函数发送AT指令:AT+CWMODE=1设置ESP8266模块为Station模式,该模式下WiFi模块将作为一个终端设备连接到一个现有的无线网络。这条指令的执行需要确认你所使用的设备和模块是否支持该指令。
![]()

连接热点,与服务器建立TCP连接必须先连上网络。AT+CWJAP是用于连接到WiFi网络的AT指令,它用于配置ESP8266 WiFi模块的网络连接参数。
![]()

与服务器建立TCP连接。AT+CIPMUX=0 是用于配置ESP8266 Wi-Fi模块的连接模式,设为0表示为单链接模式,只建立一个TCP连接。AT+CIPSTART用于通过ESP8266 WiFi模块建立网络连接。


调用MQTTSerialize_connect函数将连接的参数打包到buf里面再通过串口发送函数发送到服务器上才能真正建立其连接。在正常传输模式下,WiFi模块通过AT+CIPSEND指令以字节为单位发送数据。每次发送数据之前需要使用AT+CIPSEND指令设置发送的数据长度,再发送数据。


这样就建立起连接了,就可以发送数据上阿里云了。

SHT20_SampleData函数是玩SHT20传感器时写好的函数,如果想尝试发送数据上阿里云的话,将 b = SHT20_SampleData(&temperature, &humidity);注释掉,再将snprintf(payload, sizeof(payload), "{\"params\":{\"CurrentTemperature\":%0.2f}}", temperature);改为snprintf(payload, sizeof(payload), "{\"params\":{\"CurrentTemperature\":27.21}}");就好,27.21这个数字是可以随便填的。标识符一定要与自己的服务器上的产品标识符一致。(可以参考文章开头的链接文章)



完整的连接示例代码,当然这只是简单的连接示例代码。
串口接收函数,在usart.c文件中定义以下函数用于串口接收数据。因为我用的是串口2所以我定义的变量带有uart2,这样调用的时候方便。

去usart.h文件声明,g_uart2_rxbuf、g_uart2_bytes,这样这两个变量才能被其他文件调用。

串口初始化时调用。
![]()
使用代码时将连接参数换成自己的阿里云参数。




魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)