電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 673|回復(fù): 0
收起左側(cè)

轉(zhuǎn)發(fā):【碼上評選】在潤和HiSpark的WiFIIoT開發(fā)板通過MQTT實(shí)現(xiàn)簡易IoT智能網(wǎng)關(guān)

[復(fù)制鏈接]

2607

主題

2607

帖子

7472

積分

高級(jí)會(huì)員

Rank: 5Rank: 5

積分
7472
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2021-1-25 15:56:39 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
轉(zhuǎn)發(fā):【碼上評選】在潤和HiSpark的WiFIIoT開發(fā)板通過MQTT實(shí)現(xiàn)簡易IoT智能網(wǎng)關(guān), 一、 總體介紹

   1.1   視頻展示及源碼

    最新更新:



    視頻展示已上傳到Bilibili,鏈接為https://www.bilibili.com/video/BV1HK4y177XL?from=search&seid=5136887023363432633

    源碼已上傳到Gitee,鏈接為https://gitee.com/Weijunchok/hARMony_mqtt_-io-t ,其中包括新增連接到華為云和Onenet的mqtt_test.c文件,只需修改個(gè)人連接信息即可使用。

    歡迎評委老師和開發(fā)者們批評指正,讓我可以繼續(xù)完善作品





1.2   系統(tǒng)組成

  本作品硬件組成包括HiSpark的WIFIIoT開發(fā)套件的核心板,0.96尺寸的OLED,Dht11溫濕度傳感器,如圖所示。



1.3   系統(tǒng)所需包

  硬件系統(tǒng)實(shí)現(xiàn)需要WIFI驅(qū)動(dòng)包,Paho-MQTT,OLED驅(qū)動(dòng)包,以及DHT11驅(qū)動(dòng)采集包。

  其中,需要用到潤和HiHope社區(qū)的
HarmonyOS-IoT-Application-Development 儲(chǔ)存庫代碼,地址為https://gitee.com/hihopeorg/HarmonyOS-IoT-Application-Development。具體用到的是04_Wifi,實(shí)現(xiàn)聯(lián)網(wǎng)功能,以及03_sensing的oled部分。

  其次,還需用到MQTT功能,是通過Paho-MQTT進(jìn)行移植,CSDN社區(qū)已有博主移植成功,我是沿用其代碼,地址為     https://blog.csdn.net/qq_33259323/article/details/109530970   

  在該代碼的基礎(chǔ)上我重新封裝Publish和訂閱信息到達(dá)的On_message函數(shù)分別用于上傳傳感器數(shù)據(jù)和即時(shí)訂閱APP發(fā)來的控制命令,另外還添加心跳函數(shù)保持連接。

  DHT11移植是借鑒CSDN博主小Caicai以及程序員小哈的文章,在開發(fā)板中進(jìn)行移植,地址為   https://blog.csdn.net/qq_41838541/article/details/106634984      和https://blog.csdn.net/rsd102/article/details/106084826 其中根據(jù)手冊和Harmony系統(tǒng)源碼移植了其中幾個(gè)重要函數(shù),在下面會(huì)給出展示。   

  實(shí)現(xiàn)遠(yuǎn)程控制所需APP我是在Android Studio通過Paho-MQTT包進(jìn)行實(shí)現(xiàn)MQTT通信,其他功能自行設(shè)計(jì)搭建。在我個(gè)人阿里云服務(wù)器上搭載了Mosquitto服務(wù)器以及數(shù)據(jù)庫,用于儲(chǔ)存通過MQTT上傳的溫濕度數(shù)據(jù)。

1.4   系統(tǒng)功能

系統(tǒng)目前能實(shí)現(xiàn)的功能:

1.      開發(fā)板定時(shí)與DHT11通信,采集溫濕度數(shù)據(jù)。

2.      開發(fā)板通過OLED顯示采集到的溫濕度數(shù)據(jù)。

3.      開發(fā)板聯(lián)網(wǎng),并連接云服務(wù)器的MQTT服務(wù)器,能與手機(jī)APP雙向通信。

4.      開發(fā)板在采集到溫濕度數(shù)據(jù)將其通過MQTT發(fā)布,云服務(wù)器監(jiān)測過溫,通過郵件提醒。

5.      開發(fā)板可訂閱手機(jī)APP發(fā)布的控制信息,并根據(jù)信息實(shí)現(xiàn)板載LED燈亮滅。

6.      云服務(wù)器上數(shù)據(jù)庫可存儲(chǔ)開發(fā)板上傳的溫濕度數(shù)據(jù),并可通過瀏覽網(wǎng)頁查看歷史數(shù)據(jù)。

二、 硬件及其功能實(shí)現(xiàn)

2.1   DhT11溫濕度傳感器

  系統(tǒng)接線:

DHT11————WiFIIoT

VCC————3.3V/5V

GND————GND

DATA————GPIO0





  注意事項(xiàng),根據(jù)DHT11手冊,GPIO先設(shè)置成輸出模式,先給出起始信號(hào),其中要保持高/低電平若干us或者ms,這里的實(shí)現(xiàn)需要導(dǎo)入hi_time.h頭文件,調(diào)用hi_udelay()實(shí)現(xiàn)而不能用usleep()函數(shù)。其后,GPIO設(shè)置成輸入模式,接收DHT11響應(yīng)信號(hào),并根據(jù)高電平持續(xù)時(shí)間判斷該位是1還是0,寫入數(shù)據(jù)位。其中幾個(gè)主要函數(shù)如下圖。







2.2   MQTT主要函數(shù)

  MQTT我在Paho_MQTT移植基礎(chǔ)上,根據(jù)實(shí)際需要與傳感器數(shù)據(jù)交互,封裝了如下幾個(gè)函數(shù),以約定的協(xié)議格式(此處沒有用JSON格式,但隨時(shí)可以稍微修改Sprintf的內(nèi)容便可實(shí)現(xiàn)JSON的TYPE3格式上傳數(shù)據(jù))封裝傳感器數(shù)據(jù)成MQTT包,并發(fā)送出去。同時(shí)每隔1s調(diào)用on_message()函數(shù)查看是否有遠(yuǎn)程控制命令到達(dá),并響應(yīng)。   此處在MQTT移植基礎(chǔ)上,第一個(gè)完善了訂閱信息處理,源碼是在Publish完再檢查是否有訂閱信息到達(dá),這會(huì)導(dǎo)致無法及時(shí)響應(yīng)訂閱數(shù)據(jù),所以我采取是新建一個(gè)線程每隔1s就查看是否有命令到達(dá)并響應(yīng)。     第二個(gè)是自定義了Publish函數(shù),更靈活地上傳數(shù)據(jù)。



    雖然這里是連接我自己搭建的MQTT服務(wù)器,但根據(jù)這些源碼,只需根據(jù)華為云或Onenet注冊的信息,對應(yīng)修改MQTT連接的參數(shù)ip、port、Clientid、Username和Password即可搭建通信。再修改Publish函數(shù)為JSON格式的Type3符合云服務(wù)器的格式便可在發(fā)送后在服務(wù)器查看到對應(yīng)數(shù)據(jù)流,如:



   memset(text, 0, sizeof(text));

strcpy(payload, “{“);

memset(text, 0, sizeof(text));

sprintf(text, “\“Temp\“:%.2f,“, Temp);  //這里的f后面有逗號(hào),

strcat(payload, text);

memset(text, 0, sizeof(text));

sprintf(text, “\“Hum\“:%.2f“, Hum);  //注意這里的f后面沒逗號(hào),

strcat(payload, text);

strcat(payload, “}“);

memset(text, 0, sizeof(text));



   但需要注意每個(gè)數(shù)據(jù)流之間有逗號(hào)分隔,而最后一個(gè)數(shù)據(jù)流是沒有逗號(hào)的。

    華為云或者Onenet云具體的注冊步驟就在此不細(xì)說了。

















2.3   OLED主要函數(shù)

OLED————WiFIIoT

VCC————3.3V

GND————GND

SCL————SCL

SDA————SDA

  Oledshowdata主要實(shí)現(xiàn)與傳感器數(shù)據(jù)交互,可視化顯示采集數(shù)據(jù)。其他函數(shù)可以根據(jù)oleddemo,無需太大修改。











三、 實(shí)物效果 3.1 開發(fā)板串口數(shù)據(jù)



3.2 OLED顯示效果









3.3 云服務(wù)器MQTT日志





3.4 云服務(wù)器查看歷史數(shù)據(jù)





3.5 手機(jī)APP顯示效果









3.6 手機(jī)APP遠(yuǎn)程控制效果





3.7 手機(jī)APP設(shè)置MQTT參數(shù)







3.8 溫濕度過限郵件提醒





四、 作品未來展望

4.1 MQTT

  手機(jī)APP在設(shè)計(jì)上面已經(jīng)考慮到連接公有云和私有云的問題,具體區(qū)別在于,例如在連接Onenet,華為云時(shí),MQTT連接時(shí)的ClientID應(yīng)改為對應(yīng)的產(chǎn)品ID,而用戶名和密碼則按照各自規(guī)則修改,修改實(shí)現(xiàn)可通過APP上MQTT參數(shù)設(shè)置修改。

4.2 更多功能

4.2.1 語音模塊或紅外模塊接入

  我手頭上有語音模塊,尚未完成移植,我在其他平臺(tái)上已有實(shí)現(xiàn)初步效果,理論可行,具體實(shí)現(xiàn)開發(fā)板作為網(wǎng)關(guān),用戶可通過語音模塊發(fā)出指令控制開發(fā)板下發(fā)命令控制家居終端。

4.2.2 通信技術(shù)

  未來我計(jì)劃是用華為海思的HPLC高速電力線載波通信技術(shù)連接家居終端,所以目前我先用這款開發(fā)板進(jìn)行鴻蒙系統(tǒng)的學(xué)習(xí),效果十分好。另外還可以使用諸如Zigbee,NB-IOT等技術(shù),目前我還在移植階段,初有成效。

4.3 外設(shè)功能移植



  目前正在進(jìn)行SPI通信以及UARST串口接收信息處理移植,可用于后續(xù)連接更多外設(shè)完善功能。

4.4 美中不足

  作品還存在一定的缺陷,例如,目前僅有網(wǎng)關(guān),還缺少終端節(jié)點(diǎn)。終端節(jié)點(diǎn)理論上可以選用Arduino,STM32平臺(tái)進(jìn)行開發(fā),也已經(jīng)調(diào)好。我預(yù)計(jì)是使用LoRa通信技術(shù)作為網(wǎng)關(guān)和節(jié)點(diǎn)之間的通信橋梁,但個(gè)人能力有限,SPI通信的LoRa驅(qū)動(dòng)庫在開發(fā)板的移植尚未完成,盡管我的節(jié)點(diǎn)已經(jīng)調(diào)好。網(wǎng)關(guān)僅完成到與LoRa模塊通信成功,尚未設(shè)置其他參數(shù),在今后將爭取早日完成LoRa移植,使得網(wǎng)關(guān)能夠與節(jié)點(diǎn)成功通信,實(shí)現(xiàn)智能家居。



五、 總結(jié),分享開發(fā)經(jīng)驗(yàn)   本次作品是我購買潤和HiSpark開發(fā)板后學(xué)習(xí)了幾個(gè)星期后制作出來的,初步實(shí)現(xiàn)預(yù)想功能,還有很多進(jìn)一步開發(fā)的空間。回想起開始板子到手時(shí),我第一時(shí)間是想嘗試燒錄程序,所以進(jìn)行開發(fā)環(huán)境搭建,這個(gè)過程比較痛苦,我折騰了幾個(gè)小時(shí)都沒辦法順利完成,感謝連老師放出的Ubuntu鏡像,解決了我開發(fā)第一步難題。

  我學(xué)習(xí)的第二步就是嘗試對LED示例進(jìn)行小修改,探索代碼組成和工作原理,在這過程里,我學(xué)習(xí)了GPIO基本操作,接入我自己的LED燈模塊實(shí)現(xiàn)了流水燈功能。

  我學(xué)習(xí)的第三步就是開拓思路,計(jì)劃我需要實(shí)現(xiàn)的功能,第一個(gè)是WIFI聯(lián)網(wǎng),第二個(gè)是MQTT通信接入MQTT服務(wù)器,第三個(gè)是傳感器數(shù)據(jù)采集,第四個(gè)是OLED顯示及手機(jī)APP遠(yuǎn)程控制。

  根據(jù)我第三步的計(jì)劃,WIFI功能可以根據(jù)潤和社區(qū)的Demo實(shí)現(xiàn)聯(lián)網(wǎng),緊接著是MQTT通過移植別人做好的基礎(chǔ),然后再根據(jù)自己的想法封裝Publish函數(shù),實(shí)現(xiàn)與傳感器數(shù)據(jù)交互。封裝On_message函數(shù),實(shí)現(xiàn)遠(yuǎn)程控制交互,OLED也同樣道理,在看懂代碼后,封裝OLEDshowdata函數(shù),實(shí)現(xiàn)與傳感器數(shù)據(jù)交互。

  上面是我目前實(shí)現(xiàn)功能的思路,當(dāng)前學(xué)習(xí)我遇到了新的問題,新的想法,比如,在前人沒有給出經(jīng)驗(yàn)和Demo的時(shí)候,遇到一個(gè)陌生的問題如何解決?我目前嘗試是SPI通信,在代碼包里面有Hi3861的app_demo,有wifiiot_spi.c,我該如何利用,調(diào)用它們實(shí)現(xiàn)我的功能。

  簡單的調(diào)用是無法實(shí)現(xiàn)的,比如,我單純調(diào)用wifiiot_spi.c的spiinit(),spihostwrite(),是無法實(shí)現(xiàn)與SPI設(shè)備通信的,其原因可以在app_demo_spi.c中查看。就是因?yàn)閟piinit()前還需要設(shè)置GPIO的功能,所以我封裝了基于wifiiot的頂層函數(shù),用于設(shè)置SPI0,SPI1的引腳功能,再根據(jù)app_demo_spi.c內(nèi)容進(jìn)行函數(shù)移植,去完成SPI通信,目前我已成功與SPI設(shè)備握手并讀取到我需要的數(shù)據(jù)。

六、 鳴謝   鳴謝HarmonyOS & 潤和HiSpark實(shí)戰(zhàn)開發(fā),“碼”上評選活動(dòng)舉辦方,提供一個(gè)學(xué)習(xí)和實(shí)戰(zhàn)機(jī)會(huì)給我,用于實(shí)現(xiàn)心中的想法和更深入掌握鴻蒙系統(tǒng)代碼的編寫。鳴謝潤和HiSpark開發(fā)出一款這么好的開發(fā)板,讓我可以近距離學(xué)習(xí)鴻蒙系統(tǒng)。鳴謝潤和鴻蒙技術(shù)交流群的成員,幫助初學(xué)者入門這款開發(fā)板,對我們遇到的問題給予幫助。鳴謝Gitee的潤和開發(fā)社區(qū)的代碼分享,鳴謝CSDN社區(qū)的多位博主的經(jīng)驗(yàn)。

  最后,希望評委老師和各位開發(fā)者不吝賜教,指出作品存在問題,幫助我一起完善作品,十分感謝。

  七、源碼



  我的源碼上傳到了Gitee,地址是https://gitee.com/Weijunchok/harmony_mqtt_-io-t  有興趣的開發(fā)者可以將app目錄的文件放置在個(gè)人的code-1.0\applications\sample\wifi-iot\app下,將domain里面的各個(gè)lib文件夾放在個(gè)人的code-1.0\domains\iot\link下。下面評論區(qū)我也會(huì)簡單介紹一下基本的開發(fā)過程和注意事項(xiàng),希望大家多多交流和討論。

作者:Aaron

發(fā)表回復(fù)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表