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元件將適配數量眾多的無線通訊模組,使得使用者可以根據實際需求,便捷選擇模組型號,輕鬆配置進行切換。敬請期待!