如果不知道怎么获取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,这样这两个变量才能被其他文件调用。

 串口初始化时调用。

使用代码时将连接参数换成自己的阿里云参数。
 

 ​​​​​​

 

Logo

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

更多推荐