作者:痴者工良
連結:http://www.cnblogs.com/whuanle/p/10589496.html
一、IOT 平臺的支援
先看國內優秀的雲端計算IOT平臺(不含QQ互聯、小米IOT等針對特定產品的開發者平臺,僅列出部分雲端計算廠商的IOT平臺)
阿裡雲 IOT:https://iot.aliyun.com/
華為物聯網:https://developer.huawei.com/ict/cn/site-iot-next
騰訊雲 物聯網通訊:https://cloud.tencent.com/product/iothub
百度雲 天工:https://cloud.baidu.com/solution/iot/index.html
中國移動 OneNET:https://open.iot.10086.cn
說到 IOT ,要做開發,有多方面的,樣式也不同:裝置認證、裝置接入、閘道器、裝置管理、訂閱、資料管理與分析、應用開發等。這裡單純說嵌入式裝置的開發。
這幾家平臺中,僅有阿裡雲提供 C# 的裝置端 SDK,並且不開源、不能跨平臺 (只能在 .NET Framework 4.7下使用,別問我怎麼知道),裝置接入方式是 HTTP/2。對於 C#/.NET 友好度最高的應該就是阿裡雲了,騰訊雲的 IOT 相對來說搞得不太像樣。
提供的裝置端接入和應用開發,以 C 語言和 Python 為主(C語言是嵌入式開發之王),通訊協議有 HTTPS、MQTT/MQTTS 等。
阿裡雲 IOT 裝置端 SDK 檔案
https://help.aliyun.com/document_detail/101488.html?spm=a2c4g.11186623.2.26.554a5b3eaMSYnh#concept-xlx-dzz-ggb
阿裡雲 IOT 雲端 SDK 檔案https://help.aliyun.com/document_detail/63638.html?spm=a2c4g.11186623.6.678.1ede4c07i0qvHR
國外的話,就只列舉 亞馬遜雲 和 Azure 雲。
https://www.amazonaws.cn/iot/
https://www.azure.cn/zh-cn/
他們有中國區、國際區之分,其中微軟的 Azure 中國區由世紀互聯運營(很不舒服)。
看圖,說明亞馬遜也不支援 C#,嵌入式僅 C 語言,其它方面也不支援 C#/.NET。
只有 Azure 大量、無保留地支援 .NET。
二、嵌入式裝置
物聯網裝置的裝置端,不限於例如樹莓派、手錶、無人機、藍芽之類的裝置,包括手機、手錶、電腦等都可以當作 IOT 裝置端。
這裡只討論 ARM32/64 嵌入式開發板,舉個慄子,樹莓派、國產香橙派。
作業系統有 Win 10 IOT Core、Ubuntu、Debain 等。
要買就買樹莓派,別買別的牌子,不然你得哭。
1、系統支援
樹莓派支援大量系統,並且系統核心較新,裝 .NET Core SDK 和 Runtime,幾乎一套直接安裝完成。
國產香橙派呢,就是個坑貨,系統核心較舊,GCC版本也低,驅動各種不相容,系統也沒幾個能正常使用,而且發熱量特大。
不久前我就買了 Orange PI 3,安裝 .NET Core SDK 2.2,要先更換 apt 源,然後更新 apt 串列,裝上新版本的 gcc (.NET Core 需要 gcc 大於 5.2以上,Debain 系統必須大於等於9 )。
2、資原始檔
樹莓派流行度很高,很多軟體都是支援樹莓派的,與嵌入式有關的技術幾乎都會提及樹莓派,你不怕沒有學習資料,不怕沒有相應的感測器。
其它就不贅述了。
也只有記憶體較大、CPU較大的開發板可以使用 .NET 開發的程式,底層 C 語言才是王道,特麼一個微控制器得記憶體才那麼幾KB,光 ARM 版本的 .NET Core 就需要至少 300MB 的記憶體。
三、目前筆者瞭解到的 .NET 開發嵌入式應用方式
1、使用 C/C++生成的動態連結庫
跨平臺開發 — C# 使用 C/C++ 生成的動態連結庫https://www.cnblogs.com/whuanle/p/10582654.html
透過使用 C/C++ 封裝的介面,控制 GPIO (就是板子的那些針腳) 等,這一方式只能在Linux下使用。開發C#程式不需要直接跟底層打交道,透過預留的 C/C++ 介面,間接操控。C/C++ 寫好各類通訊協議、邏輯處理、電路控制等,與硬體打交道,封裝好 .SO 庫,給 C# 使用。這樣開發專案時無需關心底層實現,專註於業務開發。
筆者有篇文章 .NET Core 跨平臺 串列埠通訊 ,用到 SerialPortStream 庫,這個庫可以在 Windows/Linux 下使用,如果要在 Linux 下使用,必須先把官方用 C 寫的專案編譯、生成動態連結庫放到專案裡再執行,底層使用 C語言,實現與通訊方式無關的應用開發。
2、使用 Windows 10 IoT Core
就是說使用 Windows 10 IoT Core 系統,在此係統上進行開發。
好處:先來幾個圖
一套 C# 就可以搞好各方面的開發,官方直接提供類庫操作裝置的各種介面、針腳,你無需掌握大量的硬體知識即可快速上手專案,直接使用 C#/.NET 與各種感測器互動,Visual Studio 宇宙第一 IDE 的開發支援,對接優秀的雲端計算平臺 Azure、優秀的生態支援、可以使用傳統Wpf等軟體介面、維護方便、視覺化… …
以往使用開發板需要掌握開發嵌入式裝置,WIFI、藍芽、GPIO、網絡卡、ARM32/64、電路等協議、硬體知識,使用C語言開發底層,現在使用 C# 就能一套搞定。
3、mono
筆者在學習使用開發板時,發現有些庫可以在 mono 上使用,使用 Monodevelop 可以開發 C# 專案,管控 GPIO,筆者對 mono 不瞭解,沒有去實際實現。
.NET Core 實現嵌入式開發,就筆者目前的菜水平來說,沒發現 .NET Core 開發嵌入式軟體的優勢。
其一,.NET Core (目前 最新 ARM 2.2.105) 不能直接使用感測器。這個可能是筆者水平不夠,暫時沒有發現有在 Linux 下使用 .NET Core 控制感測器、使用 GPIO 等的實體。
當然,有在Windows 10 IOT Core 上開發 .NET Core 專案使用 GPIO 的實體,不過是使用 Windows.Devices.Gpio ,並且不是在 Linux下。
其二,沒幾個雲端計算廠商支援 .NET ,這裡的支援,是指在裝置中支援 .NET 開發接入 IOT 平臺,像樹莓派這樣功能完整、硬體配置齊全的裝置可以直接連線伺服器,其它一些不具備網絡卡、CPU和記憶體非常小的裝置,只能使用C語言開發、只能透過閘道器接入IOT平臺。就算裝置接入底層搞好了,要接入IOT平臺,要有API、SDK、檔案呀,.NET 的資料真的非常非常少。
個人感覺 .NET Core 在雲端計算、Docker、網站開發等方面發展的很好,嵌入式方面不太行。當然這個只是個人感覺。
如果使用 Windows IOT Core 的話,是.NET Core 還是 .NET Framework 都不重要了。
期待 .NET Core 3.0正式版的釋出。
以上內容僅為個人理解,筆者現在是大三學生,經驗不足,以上內容有錯誤或者觀點不對,懇請各位大神指點一二。