Molink-模組連接套件,讓設備不再孤單

語言: CN / TW / HK

通過網絡連接實現設備之間的互聯互通是物聯網應用的核心,當前物聯網設備普遍通過通信模組連接到網絡中,通信模組在物聯網應用中扮演着不可或缺的角色。同時,由於物聯網應用場景的需求各異,各個通信模組廠商都推出了許多針對不同應用場景的通信模組,導致不同廠商、型號的通信模組AT指令集之間存在許多不兼容的地方。這些不兼容的AT指令集給開發者帶來了不便,也讓物聯網終端產品的通信模組優化升級十分困難。

01 Molink 簡介

Molink即ModuleLinkKit (模組連接套件),是一整套針對嵌入式模組開發套件。MoLink提供了模組多實例管理、模組功能適配並向開發者提供統一易用的API(應用程序接口)。它通過架構設計和模組適配實現了對不同的通信模組的統一控制,並向上層框架和應用提供統一的API接口,使開發者不必關心不同模組之間的差異即可完成網絡相關應用的開發。同時MoLink組件設計兼容了通信模組的OpenCPU開發模式,極大提升了用户程序的可移植性,應用程序的無線連網功能可在AT模式和OpenCPU模式下無縫切換。

02 Molink 架構設計

Molink模組連接套件向上層框架和用户應用提供統一的API接口,同時適配了多種型號通信模組的AT指令集,架構如下圖所示:

  • 抽象接口層:提供通用控制、網絡服務、網絡連接、套接字、Wi-Fi管理等多種接口的定義及高層實現。
  • 核心層:提供Molink模組對象定義、模組實例的管理及其他關鍵部分實現。
  • 模組適配層:提供各種型號通信模組的抽象接口層各種接口的適配函數實現。
  • AT解析器:可選模塊,MCU架構下的模組適配通過AT解析器與通信模組進行AT指令通信。

03 Molink 實戰演示

介紹了這麼多Molink相關知識,作為實戰派的一員,我們怎麼能不上手開發試試呢?下面讓我們一起使用萬耦啟物開發板,搭配OneOS系統的Molink與OneNET組件包,實現一個簡易的物聯網小項目吧!


軟件:OneOS 2.3.0(可在官網 Gitee 下載)

硬件:啟物開發板


(生成基礎的BSP工程在上篇博文已詳細介紹,本文不再贅述)

Step1 開啟OneNET組件支持

在OneOS工程目錄下右鍵打開OneOS Cube,進入Components→Cloud→OneNET→MQTT kit選項中,開啟OneNET組件支持:

在Components→Network→Molink→Enable IoT modules support→Moldule→WiFi Modules Support→ESP8266→ESP8266 Config種開啟Enable ESP8266 Module BSD Socket Operates選項以支持socket操作:

進入Components→Network→Protocols→MQTT中開啟Enable MQTT Stack選項,以支持MQTT接口,因為我們需要通過MQTT協議接入OneNET:

保存並退出後使用scons --ide=mdk5命令重新生成工程文件即可:

Step 2 在OneNET平台新建產品與設備

登錄OneNET,然後進入控制枱頁面,在全部產品服務中,找到MQTT物聯網套件:

進入該頁面後,點擊添加產品按鈕新建產品:

產品的產品信息與技術參數設置如下:

這裏的產品名稱與簡介可以自行修改,主要的聯網方式設備接入協議選擇正確即可,完成後點擊確定即可。

添加了產品之後,還需要新建一個設備才能進行測試,產品是一類硬件的模型,最終跟硬件對應的是設備。可以理解為,產品指的就是啟物開發板種硬件,現在已經新建了一個產品對應啟物開發板這類硬件,接下來新建一個設備,對應我們手裏這個板子。

在OneOS系統的組件中默認不開啟自動創建設備,所以還是按照手動創建設備的流程執行一次,先點擊新建好的產品的頁面,找到添加設備:

點擊添加設備後在彈出的頁面填寫設備名稱即可:

完成後,便可在設備列表這一項查看到對應名稱的設備:

Step 3 將OneNET的設備信息與程序關聯

這裏使用OneOS系統專門為啟物開發板定製的demo示例源碼:

onenet_mqtt_demo.c/h文件實現使用OneNET組件的MQTT組件接口實現OneNET的連接與通信接口。sensors_demo.c/h文件實現設備的IOT工作流程框架,調用onenet_mqtt_demo.c/h文件的接口與OneNET進行通信。

這裏我們僅需要確認onenet_mqtt_demo.h中使用的Molink設備名稱信息,以及再次確認WiFi的連接信息即可,一般情況下需要修改的只有WiFi熱點名稱與密碼:

隨後需要將OneNET雲端的設備信息與程序對應,需要打開onenet_device_sample.h文件,這個文件在onenet_matts.c中有包含,可以從這裏右鍵打開:

接下來需要將onenet_device_sample.h文件中的設備信息與我們之前新建的OneNET上的設備信息意義對應起來,首先是設備的ID與access_key,在MQTT物聯網套件的產品概況找到更改新建的產品,查看對應的信息:

然後將ID與access_key填入對應的位置,USER_PRODUCT_ID宏定義填寫產品的ID,另一個USER_ACCESS_KEY宏定義填寫access_key即可:

隨後找到設備列表中對應的設備,這裏使用更改新建的qiwu_test設備的信息:

USER_DEVICE_NAME宏定義填寫設備的名稱,USER_DEVICE_ID宏定義填寫設備IDUSER_KEY宏定義填寫設備的key即可:

至此,硬件的程序信息與OneNET雲端設備已經對應了,編譯程序下載後,即可在設備列表中看到我們的設備狀態變成了在線狀態:

點擊操作的數據流選項,然後勾選實時刷新,就可以看到硬件上傳的數據了,數據會顯示最近的數據的上傳時間:

如果連接了啟物開發板的調試串口,就可以在調試串口看到如下的消息輸出:

至此,啟物開發板與OneNET已經完成了連接通信,此時的啟物開發板就是一個物聯網温濕度計,我們可以藉助微信小程序之類的平台或者自行編寫手機或者PC電腦軟件,通過HTTP協議訪問OneNET來獲取到這個設備的數據。

 Step 4 嘗試從OneNET下發命令給啟物開發板

OneNET連接當然不僅僅只有數據上傳這麼簡單的功能,還有更多的功能可以參考OneOS與OneNET的文檔中心。接下來嘗試增加一個從OneNET下發命令給啟物開發板,讓啟物開發板做出相應反應的功能。

剛剛在onenet_mqtt_demo.h中看到過TEST_DEV_CTRL_CMD宏定義的説明:

那麼先嚐試一下這個命令是否能夠正常使用,在設備列表欄,當設備狀態是在線狀態時,點擊操作下更多操作選項,選擇下發命令:

然後在彈出的下發命令的側邊欄中輸出命令,填入超時時間,這裏填5即可,點擊發送,可以看到下方的響應時間與返回結果顯示本次命令下發成功:

同時在啟物開發板的調試串口會有對應的消息輸出,但並沒有發現啟物開發板按照註釋的説明出現閃燈或者蜂鳴器的控制。

這是因為接收到的命令並沒有傳給onenet_mqtt_demo.c部分,雖然OneNET的MQTT組件確實接收到了命令,但是沒有傳遞到執行的源碼部分:

也就是這個部分的源碼並沒有執行,這是因為onenet_mqtt_cmd並沒有被填入對應的命令數據,我們需要在onenet_mqtts.c中添加一段源碼:

這樣將獲取的命令寫入了onenet_mqtt_demo.c部分的命令緩衝區onenet_mqtt_cmd,隨後在執行sensors_demo.c的控制時檢測到對應的命令就會執行命令的動作了。這裏需要修改修改sensors_demo.c中的sensor_demo_led_ctrl函數:

同時在main.c中添加蜂鳴器初始化源碼:

原本的啟物開發板的RGB燈是三種顏色循環閃爍,將修改完成的源碼編譯燒錄後,復位開發板,等待開發板與OneNET完成連接後下發命令,就可以看到RBG燈運行新的閃爍方式。同時蜂鳴器也會響了,總共會循環宏定義BUZZES_AND_FLASH_LED_TIMES的次數,默認是30次。


好啦,通過前面的實戰,我們已經將硬件與雲端連接,實現了物聯網的硬件控制與雲端數據交互。而後續的用户交互部分,通過HTTP協議訪問雲端,進行數據的獲取與命令下發,就可以將用户也接入到系統中,從而完成完整的物聯網產品數據交互框架。

互聯互通一直是物聯網的核心,OneOS也在為此不斷努力,後期OneOS MoLink組件將適配數量眾多的無線通信模組,使得用户可以根據實際需求,便捷選擇模組型號,輕鬆配置進行切換。敬請期待!