1. 程式人生 > >如何基於TencentOS tiny,快速打造屬於自己的IoT小應用?

如何基於TencentOS tiny,快速打造屬於自己的IoT小應用?

導語 | 近日,雲+社群技術沙龍“騰訊開源技術”圓滿落幕。本次沙龍邀請了多位騰訊技術專家,圍繞騰訊開源與眾多開發者進行探討,深度揭祕了騰訊開源專案TencentOS tiny、TubeMQ、Kona JDK、TARS以及MedicalNet。本文是葉豐老師的演講整理,編輯:濤濤。本文要點:

  • TencentOS tiny開源專案簡介
  • TencentOS tiny loT解決方案
  • TencentOS tiny開發實踐

近期會有物聯網相關活動上線,大量開發板免費領!關注「雲加社群」,及時獲知最新動態。

一、TencentOS tiny開源專案簡介

什麼是TencentOS tiny呢?TencentOS tiny是騰訊開源的面向物聯網領域的精簡實時作業系統。可能在大家的傳統印象中,騰訊都是做社交和遊戲,解決的是人與人之間的連線,其實騰訊在物聯網領域也有完整的佈局。從下圖中可以看出,在騰訊物聯網全棧產品矩陣中,TencentOS tiny位於整個產品矩陣底層最關鍵的一環,起著為雲側海量資料平臺引流的作用。我們也希望TencentOS tiny能夠降低裝置端開發門檻,提升開發效率,幫助物聯網的終端裝置和業務能夠快速地接入到騰訊雲。

如下圖所示,從TencentOS tiny的產品架構來看,目前TencentOS tiny已經適配了主流的晶片和模組,提供了一個最精簡的RTOS核心、包括任務管理、記憶體管理、IPC通訊、異常處理等。基於RTOS,它還提供了非常豐富的物聯網元件,包括低功耗框架、OTA升級、KV儲存、除錯工具鏈等等。在網路連線方面也集成了一些主流的物聯網協議,包括:MQTT、CoAP、LoRaWAN等。同時我們提供了非常豐富的應用案例,使用者可以基於這些案例做擴充套件,快速實現物聯網應用。

總體來說,TencentOS tiny有下面幾個優勢:小體積,低功耗,豐富的IoT元件,可靠的安全框架,良好的移植性和便捷的除錯手段,可以滿足物聯網終端側的差異化的需求。TencentOS tiny是在今年9月18日正式開源的,釋出一週就上了GitHub的熱榜排名第二,目前獲得star 3500+,Fork 800+,和國內外主流的MCU和硬體廠商合作,目前支援的硬體平臺數已經超過了50+。

二、基於TencentOS tiny系統的落地解決方案

在與公司內外的合作之中,TencentOS tiny已經有了一些落地的物聯網的解決方案,這裡以兩個典型的解決方案為例,來為大家說明。第一個是智慧貨櫃解決方案。TencentOS tiny提供了控制能力,配合中控系統和雲端AI,完成了掃碼開櫃、取物、自動結算流程,實現了無人售貨的場景。針對在真實場景中可能會出現一些不可控的情況,比如說貨品的遮擋導致AI識別率低的情況,TencentOS tiny提供了重力感應能力,來輔助AI決策,提高了AI的識別率。

 第二個解決方案是AI智慧農業種植的方案。在這個方案中,TencentOS tiny主要服務於兩個環節,在環境感知側,通過採集溫溼度、酸鹼度、含氧量、光照強度等環境資料,上報到IoT雲平臺,雲端AI再根據環境資料作出一系列溫室調節的指令。比如說如果光照強度不夠的話,決策演算法會下發預期的光照強度值,調節控制側接受到指令後,通過補光燈來調控。最終在資源使用最優的情況下,達到農作物增產的效果。TencentOS tiny提供的低功耗能力,延長裝置壽命,使裝置能長期穩定的執行。同時提供的多方案網路裝置和安全鏈路的能力,保證了資料的安全。

三、基於TencentOS tiny的開發實踐

接下來以一個小的的開發實踐為例,讓大家更好地瞭解TencentOS tiny。基於上文提到的農業解決方案,我們這次也做一個小型的端到端的農業場景的解決方案。實現內容包括:環境感知功能,採集會場的溫度、溼度和光照強度,以及做簡單的裝置控制。比如說開燈、開啟電機,然後將資料上傳到雲端,同時會有一個小程式實現環境狀態的查詢和遠端的控制。這個實踐的功能非常簡單,主要是想讓大家瞭解到:TencentOS tiny是如何從端側到雲端,最後到小程式?中間具體是如何打通的?以及使用這些產品能夠給開發帶來什麼便利?

在實踐之前,有必要先把整個實踐的流程還有一些準備的工作給大家介紹一下。

1. 定製開發板

首先這個實踐是基於TencentOS tiny的定製開發板,這個開發板是有很好的擴充套件性。如下圖所示,左邊的感測器擴充套件可以根據需要選擇感測器。我們要選擇的是一個農業場景的擴充套件板,它包括了溫溼度和光照強度感測器,剛好可以模擬我們的場景。右邊你可以選擇你需要的通訊模組,支援NB-Iot, 2G,WiFi等,這裡我們選擇esp8266的WiFi模。我們的TencentOS tiny是跑在一個STM32L4的MCU上,我們希望TencentOS tiny可以從感測器這邊採集到資料,再通過通訊模組上傳到雲端。

2. TencentOS tiny啟動流程

為了讓TencentOS tiny在這個開發板上跑起來。需要了解一下啟動的流程:晶片上電之後,會做板級的初始化,然後進行核心的初始化;接著建立任務,編寫任務邏輯;最後啟動核心,開始任務排程。TencentOS tiny的建立任務流程非常簡單,需要先配置一下任務優先順序,還需要配置一下它的任務棧大小,也支援使用ARM的介面標準CMSIS來建立任務。

這裡有個問題,其實我們這個功能可能很簡單,寫個大迴圈或者裸跑的形式也可以實現,為什麼一定要使用RTOS呢?在簡單場景下其實都可以,但裝置端會有一些實時性的要求。如下圖所示左邊的這個例子,我們需要實現一個控制功能:在光照強度太低的時候,可以實時地開啟補光燈。這個例子可能還不夠極端,假設這是一個煙霧感測器,它檢測到了潛在的火災,就需要立即報警,大迴圈順序執行。如果這個時候有延遲的邏輯,這個實時性就無法保證了。如果我們使用RTOS的多工,將實時性要求比較高的業務邏輯抽取到高優先順序的任務,讓RTOS的高優先順序搶佔的排程來保證實時性。TencentOS tiny預設是高優先順序強佔的排程策略,意味著只要高優先順序的任務不主動放棄CPU,它永遠是強佔CPU的。當然TencentOS也支援基於時間片的排程策略。使用多工我們還可以享受一些非同步同步的機制,比如說互斥鎖、訊號量、事件和佇列,可以讓業務邏輯解耦合,同時還可以享受RTOS提供的元件等等,這些都可以減少開發量。

3. 通訊模組實現聯網  

物聯網的解決方案,最重要的是要聯網。我們使用的開發板是基於模組通訊,複雜的網路協議是通過專業的模組來處理,業務邏輯也是跑在MCU上。如果業務邏輯需要用到網路通訊的話,可以通過串列埠的AT指令來控制通行模組實現。

這樣的好處是:業務開發不需要去關注底層複雜的網路協議棧,可以聚焦於業務的邏輯。可能存在的問題就是:因為通訊模組的AT指令集可能不一樣,假如更換模組的話,需要重新適配,而適配的過程也沒有統一的標準,而且面向業務的通訊介面也沒有統一的約定。

TencentOS tiny針對這些問題,提供了一個AT的適配框架,AT框架實現了MCU和模組非同步收發的一個通用的互動邏輯,面向業務的SAL層提供的一個簡單統一的介面,這樣的話,如果你需要適配一個新的模組,實際上就是基於AT的框架去實現SAL層的抽象介面。

通過這個適配之後,就為應用開發提供了簡潔統一的類似Socket介面(connect, send, recv),無需關注底層的細節。另外我們在產品開發中,有可能會替換其他的通訊模組,經過介面抽象後,下面的業務邏輯你都不用修改了,只需要重新適配好另外一個模組就可以了。

4.. 資料上雲

通過通訊模組實現聯網之後,下一步我們就能夠將這些資料上雲。TencentOS tiny現在也集成了主流的一些物聯網協議,包括騰訊雲的SDK,只需要在端側和雲端做一些配置,資料上雲後就可以享受騰訊雲提供的雲產品和服務,包括:裝置管理,裝置影子(儲存裝置的最新狀態,和應用層隔離)等。還可以通過規則引擎將資料轉發到騰訊雲其他的服務,包括雲資料庫,訊息佇列,大資料處理等,產生更多的價值。

端到端的最後一環就是APP應用,主要指的是移動應用。對於物聯網應用來說,小程式其實是非常好的選擇,因為對於物聯網應用來說,往往會有一個裝置互動的需求。比如說一個沒有聯網的音箱你希望它連上WiFi的話,你需要提供WiFi熱點、WiFi密碼等資訊,但是物聯網裝置是沒有輸入的入口的,這個時候就需要APP有藍芽的能力。小程式依託於微信提供的介面,非常方便地呼叫手機的藍芽、WiFi、NFC等硬體能力,實現裝置互動的場景。另外小程式本身易傳播、無需安裝,觸手可得,用完即走等等這些靈活輕便的特性也是lot非常好的入口。此外現在小程式結合雲開發可以降低很多開發成本,比如說雲開發可以提供一些基礎能力,包括雲資料庫、雲端儲存、雲函式,還免除了域名註冊與備案流程,提供雲的彈性伸縮、天然的CDN加速,原生整合微信SDK、微信開放介面免鑑權等,免去了很多介面開發的工作量。所以總的來說,小程式&雲開發依託微信提供的裝置能力,以及騰訊雲提供的雲端資源,可以助力物聯網應用高效,低成本的上線和迭代。

5. 最終實踐

接下來開始實踐,中間使用的原始碼工程,編譯環境等都已經準備好了。首先實現第一個功能,我們採集資料,做實時的裝置控制的反饋。基於讀取感測器的值,我們要做一個控制邏輯:如果光照強度過低的話,我們開啟燈,開啟風扇;如果光照強度恢復的話我們把燈關了,再關閉風扇。 

 接下來我們做第二個任務,把這些感測器的資料快速地上傳到雲端,這是一個端雲對接的例子。這裡面的業務邏輯也很簡單,首先是通過模組進行聯網,聯網成功之後,會進行一個MQTT的連線。我們選擇對接到騰訊的IoT Hub,然後訂閱裝置主題,用於接受下行訊息,下面是一個收發的邏輯。

因為裝置接入雲端需要裝置鑑權和認證,所以有一些配置需要在雲端配置好,開啟騰訊雲的控制檯,對接到的是騰訊雲的物聯網通訊平臺,需要先建立一個產品,然後還要新建裝置,可以獲取到裝置的金鑰,然後把金鑰複製過來,在端側配置。此時AT模組已經開始聯網了,再連線WiFi,連線成功以後,就開始向雲平臺上報現在的環境狀態。開啟雲平臺,可以看到裝置已經線上了,能夠看到裝置影子裡已經接收到上報的環境資訊,同時騰訊雲的物聯網平臺還提供了除錯的工具,我們可以試一下下行是不是通的。

我們再使用一個簡單的json做互動,來控制燈的開啟。到這裡,我們就已經通過TencentOS tiny提供的物聯網元件非常方便的上雲了。接下來再對接小程式,將小程式開啟,小程式主要實現兩個非常簡單的功能:第一個是重新整理查詢,然後實現簡單的控制。主要是要實現兩個雲函式,一個是查詢的雲函式,需要我們事先先建一個。對於APP來說,不需要關注整個裝置的鏈路,因為裝置已經上傳到裝置影子了,我們需要關注的只是如何來用騰訊的API,也即是如何呼叫API的裝置?如何跟裝置互動,那是騰訊雲物聯網平臺做的事情。閱讀API的文件,騰訊雲已經提供了非常完整的API,同時騰訊雲提供了一些更方便的工具,它可以生成一些主流的語言的API SDK。對於小程式,我們使用Node JS,需要一些請求的引數,請求OK就意味著這個API可以直接用,自動生成API SDK程式碼,然後就可以直接用到小程式雲函數了,同樣的方式我們也可以實現控制。通過TencentOS tiny和物聯網通訊平臺以及小程式雲開發可以快速實現了端到端的小應用,它的功能是非常簡單的。

還有一個好處是可以作為開發的一個解耦,對於APP開發來說,只需要關注雲API;對於嵌入式開發來說,我只需要把資料上傳到雲就可以了,同時也是非常低成本的。TencentOS tiny本身是開源免費的,雲開發,包括騰訊雲的物聯網產品都有免費的配額。對於一些初創團隊來說,這是一種快速上線而且低成本的開發方式。

四、Q & A

Q:老師你好,我想問一下對於開發者來說,是否可以基於TencentOS tiny的開發模板,直接設計好它的任務和程式用來做一些其他的解決方案和小程式?您一開始所說的TencentOS Tiny的易移植性是指的哪些方面?A:TencentOS tiny對使用者層提供了很多豐富的物聯網的案例,使用者可以直接用這些案例作拓展,只要硬體支援就可以了,目前國內外的主流晶片模組都已經支援了。即使不支援的話,因為TencentOS tiny的元件是鬆耦合的,移植起來也是很方便的,如果你有相應的嵌入式經驗的話,半個小時就可以完成核心移植,而且GitHub上面有詳細的移植文件,也可以參考一下。

講師介紹

                         

葉豐,騰訊工程師,目前主要負責基於TencentOS tiny的IoT解決方案相關專案,包括智慧零售、智慧農業等。

&n