本文基于ESP8266_NONOS_SDK_V2.0.0_16_08_10中的示例项目的esp_mqtt_proj。从这个例子中,我们脱离了AT命令模块,开始自己实现功能。该示例项目使用以下协议:MQTT。我一开始不知道这是一种通信协议。我检查了信息,发现此协议是适用于物联网的协议,并且已在Android push中广泛使用。它与HTTP请求响应模式不同,但使用订户和发布者模式。我现在刚刚了解了该协议。出于本文的目的,我可以在示例中成功使用该项目。感兴趣的学生可以看看Nie Yong的博客:MQTT此项目使用esp8266 MQTT客户端库(MQTT客户端库)。 (适用于ESP8266)测试使用开源MQTT来实现mosquitto,可使用apt-get命令将其直接安装在Ubuntu上,如下所示:sudo apt-get install mosquitto然后在mqtt_config.h中更改一些配置// Server IP#定义MQTT_HOST; 192.168.1.103” //服务器端口,默认为1883 #define MQTT_PORT 1883 ///需要连接的无线网络的SSID #define STA_SSID“ TP-LINK_801A” //配置无线网络密码后#3456可以刻录到模块中。但是请注意,该项目使用#define INFO(格式,...)Os_printf(格式,## __VA_ARGS__)此宏来输出调试信息。 os_printf函数的默认输出使用UART0,并且在AT模块中进行了其他配置。日志在UART1上输出。 void mqttConnectedCb(uint32_t * args){MQTT_Client *客户端=(MQTT_Client *)args; INFO(“ MQTT:已连接”); MQTT_Subscribe(client,& Quold; 0,0; / mqtt / quo; 0); / mqtt / topic / 1&rdquo ;, 1); MQTT_Subscribe(client,& ldquo; / mqtt / topic / 2&rdquo ;, 2); MQTT_Publish(客户端,& ldquo; / mqtt / topic / 0& rdquo ;,& ldquo; hello0& rdquo ;, 6,0,0); MQTT_Publish(客户端,& ldquo; / mqtt / topic / 1&rdquo ;,& ldquo; hello1&rdquo ;, 6,1,0); MQTT_Publish(客户端,& ldquo; / mqtt / topic / 2&rdquo ;,& ldquo; hello2” 6,2,0); }订阅了此功能中的三个主题,即& ldquo; / mqtt / topic / 0& rdquo;。 & ldquo; / mqtt / topic / 1& rdquo; & ldquo; / mqtt / topic / 2&rdquo ;,然后发送消息。我们还可以在mosquitto的客户端工具中订阅这三个主题。接下来,我们将开始演示。首先启动mosquitto服务器mosquitto -v#输出1486897303:mosquitto版本1.4.10(构建日期为2016年8月25日星期四,15:32:03 +0100)starTIng1486897303:使用默认config.1486897303:打开1883.1486897303端口上的ipv4监听套接字ipv6监听端口1883上的套接字。如果系统提示您该端口已被占用,则需要杀死该端口所占用的进程。启动mosquitto客户端以订阅主题mosquitto_sub -t / mqtt / topic / 0启动ESP8266,UART0输出调试信息:load。 。 。 MQTT_InitConnecTIon MQTT_InitClient WIFI_INIT已与TP-LINK_801A连接,通道1 dhcp客户端启动。 IP:192.168.1.104,掩码:255.255.255.0,GW:192.168.1.1192.168.TCP:连接到IP 192.168.1.103:1883 MQTT:已连接到代理192.168.1.103:1883。 。 .. .. .. .. .. .. ..这时,我们可以看到刚刚订阅该主题的窗口的输出:mosquitto_sub -t / mqtt / topic / 0