在鴻蒙開發(fā)板上使用MQTT協(xié)議、OneNET實現(xiàn)第一個物聯(lián)網(wǎng)項目
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz
通常來說,一個物聯(lián)網(wǎng)產(chǎn)品應(yīng)當包括設(shè)備、云平臺、手機APP。我將在鴻蒙系統(tǒng)上移植MQTT協(xié)議、OneNET接入?yún)f(xié)議,實現(xiàn)手機APP、網(wǎng)頁兩者都可以遠程(跨網(wǎng)絡(luò),不是局域網(wǎng)的)訪問開發(fā)板數(shù)據(jù),并控制開發(fā)板的功能。
理論上來說,任何以MQTT協(xié)議為基礎(chǔ)的物聯(lián)網(wǎng)云平臺都可以支持接入。
關(guān)于phomqtt 和onenet軟件包,已提供下載,聲明:所有源碼均遵守開源協(xié)議。
支持鴻蒙系統(tǒng)的 harmony_mqtt 代碼倉庫:
https://gitee.com/qidiyun/harmony_mqtt
支持鴻蒙系統(tǒng)的 onenet接入軟件包倉庫:
https://gitee.com/qidiyun/harmony_onenet
3.11.1 效果
先看下效果,我這邊使用的是OneNET物聯(lián)云平臺,進入應(yīng)用,可以看到如下網(wǎng)頁界面。該網(wǎng)頁的溫度、濕度數(shù)據(jù)由 鴻蒙開發(fā)板(Hi3861)上傳,同時有一個開關(guān)按鈕,可以控制開發(fā)板的LED燈。

另外,也提供一個手機APP,

以上界面比較簡陋,但不妨礙我們使用,另外選擇OneNET云平臺的主要是原因是接入方式比較簡單方便,易于學(xué)習(xí),另外一個是OneNET提供了物聯(lián)網(wǎng)云平臺、手機APP,不需要大家自己再去實現(xiàn),可以更多地將注意力放在鴻蒙系統(tǒng)開發(fā)上。
當我們按下開關(guān)按鈕時,可以看到開發(fā)板打印信息如下:

云平臺發(fā)送過來的時一串json字符串,key為“ledSwitch”,值為1時,可以看到開發(fā)板的LED燈亮,值為0時,開發(fā)板LED燈滅。
3.11.2 軟件包
我這邊已經(jīng)將mqtt 和 onenet 以軟件包的形式發(fā)布,兩個軟件包分別是:
(1)onenet——實現(xiàn)onenet 接入能力
(2)pahomqtt——實現(xiàn)MQTT協(xié)議功能

只需要將這兩個軟件包放到 third_party 文件夾下即可。然后修改code-1.0\vendor\hisi\hi3861\hi3861\BUILD.gn 文件,將pahomqtt和onenet加入到編譯中。

我們來看下onenet 文件夾:

其中 onenet.h 是頭文件
onenet_mqtt.c 是全部源碼,它基于paho mqtt的MQTTClient編程模型。
另外 samples文件夾下是一個示例代碼,代碼內(nèi)容如下:
- #include <stdio.h>
- #include <unistd.h>
- #include "MQTTClient.h"
- #include "onenet.h"
- #define ONENET_INFO_DEVID "597952816"
- #define ONENET_INFO_AUTH "202005160951"
- #define ONENET_INFO_APIKEY "zgQdlB5y3Bi9pNd2bUYmS8TJHIY="
- #define ONENET_INFO_PROID "345377"
- #define ONENET_MASTER_APIKEY "gwaK2wJT5wgnSbJYz67CVRGvwkI="
- extern int rand(void);
- void onenet_cmd_rsp_cb(uint8_t *recv_data, size_t recv_size, uint8_t **resp_data, size_t *resp_size)
- {
- printf("recv data is %.*s\n", recv_size, recv_data);
- *resp_data = NULL;
- *resp_size = 0;
- }
- int mqtt_test(void)
- {
- device_info_init(ONENET_INFO_DEVID, ONENET_INFO_PROID, ONENET_INFO_AUTH, ONENET_INFO_APIKEY, ONENET_MASTER_APIKEY);
- onenet_mqtt_init();
- onenet_set_cmd_rsp_cb(onenet_cmd_rsp_cb);
- while (1)
- {
- int value = 0;
- value = rand() % 100;
- if (onenet_mqtt_upload_digit("temperature", value) < 0)
- {
- printf("upload has an error, stop uploading");
- //break;
- }
- else
- {
- printf("buffer : {\"temperature\":%d} \r\n", value);
- }
- sleep(1);
- }
- return 0;
- }
手機APP下載:https://open.iot.10086.cn/doc/art656.html#118
由于本節(jié)內(nèi)容較多,將分成多個文章,陸續(xù)放出,目前規(guī)劃如下:
(1)paho mqtt client移植。其實我之前已經(jīng)有一篇文章講了paho mqtt的移植,但是那篇文章只是簡單的移植,并不支持多任務(wù),這一次mqtt移植將支持多任務(wù)。
(2)onenet協(xié)議的移植與實現(xiàn)。主要講如何在mqtt的基礎(chǔ)上實現(xiàn)onenet接入。
(3)如何使用onenet云平臺
(4)設(shè)備(鴻蒙開發(fā)板)如何接入到onenet,實現(xiàn)數(shù)據(jù)互傳。
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz