[網絡篇]ESP8266-SDK教程(九)之物聯網標配MQTT實際測試


這是關於MQTT的第三篇文章,也是最后一篇關於MQTT的介紹和如何在ESP8266使用的文章,不過本篇文章只是簡單的一個串口收發MQTT消息的小Demo,后面如果我們在實際的小項目中用到關於MQTT相關的內容,將不再做介紹,大家如果還沒有看過前兩篇文章的可以戳下面卡片看一下。

 
 

文章都是利用業余時間所寫,如果有錯誤可以指出我及時改正。

廢話不多說,我們這里直接開始,這里我簡單寫了一個控制LED燈的小Demo方便大家更好的觀看效果,為了好區分,我這里一共有3個主題,每個主題對應不同的操作:

  1. /imliubo/mqtt/recv -> ESP8266訂閱的主題,主要接收電腦端,或者手機端的消息
  2. /imliubo/mqtt/send -> 電腦端或手機端訂閱的主題,接收ESP8266發送的消息
  3. /imliubo/mqtt/blueLED -> 控制LED的主題,發”on“-> 開,發”off “-> 滅

其中ESP8266發送消息是接收到手機或者電腦端消息后才發送,每條消息都有一個序列號,控制LED燈亮滅是必須用”/imliubo/mqtt/blueLED“這個主題,在其他主題下發送”on“或”off“沒有用,我們先看一下主要代碼:

 1 void mqttConnectedCb(uint32_t *args)
 2 {
 3     MQTT_Client* client = (MQTT_Client*)args;
 4     INFO("MQTT: Connected\r\n");
 5     MQTT_Subscribe(client, "/imliubo/mqtt/recv", 0);//訂閱主題
 6     MQTT_Subscribe(client, "/imliubo/mqtt/blueLED", 0);//訂閱主題
 7 
 8     MQTT_Publish(client, "/imliubo/mqtt/send", "This message is ESP8266 send!", sizeof("This message is ESP8266 send!"), 0, 0);
 9     //推送消息
10 }
11 
12 void mqttDataCb(uint32_t *args, const char* topic, uint32_t topic_len, const char *data, uint32_t data_len)
13 {
14     char *topicBuf = (char*)os_zalloc(topic_len+1),
15             *dataBuf = (char*)os_zalloc(data_len+1);
16 
17     MQTT_Client* client = (MQTT_Client*)args;
18 
19     os_memcpy(topicBuf, topic, topic_len);
20     topicBuf[topic_len] = 0;
21 
22     os_memcpy(dataBuf, data, data_len);
23     dataBuf[data_len] = 0;
24 
25     INFO("Receive topic: %s, data: %s \r\n", topicBuf, dataBuf);
26 
27     if(!strcmp(topicBuf,"/imliubo/mqtt/blueLED")){//判斷主題是否是控制LED燈的主題
28         if(!strcmp(dataBuf,"on")){//判斷開關命令
29             GPIO_OUTPUT_SET(GPIO_ID_PIN(14),1);//
30         }else if(!strcmp(dataBuf,"off")){
31             GPIO_OUTPUT_SET(GPIO_ID_PIN(14),0);//
32         }
33     }
34 
35     os_sprintf(send_data,"This message is ESP8266 send! >%d<",send_count);
36     MQTT_Publish(client, "/imliubo/mqtt/send",send_data , sizeof(send_data), 0, 0);//推送消息,send_count每次自增1
37     send_count ++;
38 
39     os_free(topicBuf);
40     os_free(dataBuf);
41 }

這是主要代碼,其實沒多少東西,相信大家一看就懂,大家編譯代碼之前記得要先修改一下app->include->mqtt_config.h文件,如下:

1 #define CFG_HOLDER           0x00FF55A5   //一個標志位,如果下面的配置有更改可以將此標志位加1或者減1再編譯下載
2 
3 #define MQTT_HOST            "192.168.0.106" //MQTT消息服務器IP地址,我這里是在局域網內本機測試的,不懂的可以看前一篇文章
4 #define MQTT_PORT            1883    //默認端口號
5 #define MQTT_CLIENT_ID       "imliubo-esp8266"   // ID,隨意設置一個,也可不填
6 #define MQTT_USER            "admin"    //用戶名,如果服務器開啟了用戶名密碼鑒權登錄,請修改
7 #define MQTT_PASS            "admin"    //密碼,我這里是隨便設置的,因為沒有開啟密碼登錄
8 #define STA_SSID          "CMCC-Master"    // your AP/router SSID to config your device networking
9 #define STA_PASS          "zxcvbnmlk" // your AP/router password

這就是我們需要修改的地方,其他的我們可以先不用管,下面視頻是實際測試視頻,由於我現在主要開發平台也遷移到了Linux上,順便也給大家演示一下如果在Ubuntu下編譯和上傳程序:

呃呃呃,錄好的視頻太大就傳到了B站,但是審核兩天多了一直還在等待審核,有點讓人頭大。。。。。。

 

后面審核通過了會修改本篇文章,各位看官先不要着急,不過前兩個視頻還是可以看的,前面文章沒有看過的,可以先看一下~

IAMLIUBO-嗶哩嗶哩

另外本節代碼已經更新在了我的倉庫,大家可以下載先自己測試一下,其實我是在視頻中演示了如何測試,但是現在遲遲審核不通過,再等等吧~

IAMLIUNO-Github

歡迎大家去我的倉庫點個star,有問題可以提交issues,我看到后會第一時間回復。


視頻已經審核通過,各位看官可以戳上面卡片觀看了~本篇文章對應的是P3喲~

mua!(*╯3╰) mua!(*╯3╰)

QQ交流群:592587184


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM