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

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

本文要點:數據庫

  • TencentOS tiny開源項目簡介json

  • TencentOS tiny loT解決方案小程序

  • TencentOS tiny開發實踐安全

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

1、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+。

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

在與公司內外的合做之中,TencentOS tiny已經有了一些落地的物聯網的解決方案,這裏以兩個典型的解決方案爲例,來爲你們說明。

第一個是智能貨櫃解決方案。TencentOS tiny提供了控制能力,配合中控系統和雲端AI,完成了掃碼開櫃、取物、自動結算流程,實現了無人售貨的場景。針對在真實場景中可能會出現一些不可控的狀況,好比說貨品的遮擋致使AI識別率低的狀況,TencentOS tiny提供了重力感應能力,來輔助AI決策,提升了AI的識別率。 

第二個解決方案是AI智慧農業種植的方案。在這個方案中,TencentOS tiny主要服務於兩個環節,在環境感知側,經過採集溫溼度、酸鹼度、含氧量、光照強度等環境數據,上報到IoT雲平臺,雲端AI再根據環境數據做出一系列溫室調節的指令。

好比說若是光照強度不夠的話,決策算法會下發預期的光照強度值,調節控制側接受到指令後,經過補光燈來調控。最終在資源使用最優的狀況下,達到農做物增產的效果。TencentOS tiny提供的低功耗能力,延長設備壽命,使設備能長期穩定的運行。同時提供的多方案網絡設備和安全鏈路的能力,保證了數據的安全。

3、基於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自己是開源免費的,雲開發,包括騰訊雲的物聯網產品都有免費的配額。對於一些初創團隊來講,這是一種快速上線並且低成本的開發方式。

4、Q & A

Q:老師你好,我想問一下對於開發者來講,是否能夠基於TencentOS tiny的開發模板,直接設計好它的任務和程序用來作一些其餘的解決方案和小程序?您一開始所說的TencentOS Tiny的易移植性是指的哪些方面?

A:TencentOS tiny對用戶層提供了不少豐富的物聯網的案例,用戶能夠直接用這些案例做拓展,只要硬件支持就能夠了,目前國內外的主流芯片模組都已經支持了。即便不支持的話,由於TencentOS tiny的組件是鬆耦合的,移植起來也是很方便的,若是你有相應的嵌入式經驗的話,半個小時就能夠完成內核移植,並且GitHub上面有詳細的移植文檔,也能夠參考一下。

講師介紹

                   

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

相關文章
相關標籤/搜索