如果不知道怎么获取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,这样这两个变量才能被其他文件调用。
串口初始化时调用。
使用代码时将连接参数换成自己的阿里云参数。