區塊鍊技術叢書 點選檢視第二章
基于區塊鍊的物聯網項目開發
Hands-On IoT Solutions with Blockchain

[巴西]馬克西米利亞諾·桑托斯(Maximiliano Santos)
埃尼奧·莫拉(Enio Moura)著
董甯 王冰 朱軒彤 譯
第1章
了解物聯網并在IBM Watson物聯網平台上開發
當今世界,計算機能夠處理難以想象的資料量,任何人都可以生産和銷售自己的裝置。正因為如此,物聯網(Internet of Things,IoT)已經成為目前商業環境中的一個熱門話題,人們之間的聯系也比以往任何時候都更加緊密。
在本章中,你會看到物聯網是如何改變遊戲規則的,物聯網産業可以做些什麼。我們将研究如何在物聯網世界中起步,了解IBM物聯網平台特點,并學習如何利用該平台建立自己的物聯網解決方案。
本章将讨論如下主題:
- 物聯網技術。
- 物聯網通用案例。
- 物聯網技術要素。
- IBM Watson物聯網平台特性和功能。
- 在IBM Watson物聯網平台上建立物聯網解決方案。
1.1 什麼是物聯網
有很多關于物聯網的定義,網絡上常見的文章通常都認為它是一組通過網際網路連接配接的各種事物,包括人、物體、計算機、電話、建築物、動物等。
物聯網這一術語是自嵌入式系統能夠連接配接到網際網路以後才開始使用的。物聯網的範圍也在不斷擴大,從電腦、行動電話,到智能手表、恒溫器和冰箱,甚至包括整條生産線。
DIY群體進一步深化了這一變革,在世界範圍内,你會發現多種通過物聯網搭建的原型系統,如Arduino、Raspberry Pi以及其他晶片系統,它們價格更低廉,程式設計語言對使用者更為友好,甚至支援圖形程式設計。
例如,冰箱互聯有哪些優點?物聯網技術使得制造商能夠了解使用者行為,判斷使用者從上午9點到下午6點不在家,因為在這個時間段,冰箱門連續一個月都沒有打開過。如果可據此對冰箱程式進行重新程式設計以減少在此期間的能耗,會怎樣?如果同一家制造商檢視所有此類使用者資料,會怎樣?結論是,通過深入了解不同群體每天如何與冰箱互動,并據此建立新的模型,這種解決方案在環保、定制化和經濟性方面更具優勢,而且還可以據此更新冰箱軟體,使其更智能,而不必重新購買新軟體。
在這種大的背景下,蘋果公司也釋出了HomeKit和HealthKit等物聯網方案實施架構,這些架構的設計都是針對不同的應用目标,但其原理大同小異,都是通過事物互聯來實作各種應用。
例如,人們可以将門窗感應器、照相機、恒溫器、燈泡和鎖等物體連接配接到網際網路,然後使用iPhone上的HomeKit等APP在世界任何角落控制它們。這樣就可以在回家的路上自動啟動恒溫器,或者當你在外面的時候能收到諸如開門之類的通知,它甚至可以通過與體重秤相連,告知你每天的體重。Google、亞馬遜和其他公司也推出了類似實施架構。
IBM Watson 物聯網平台差別于以上實施架構的是,它并不提供具體的應用,而是側重于提供一個安全的、可擴充的、可靠的平台,作為裝置和應用之間的橋梁。
1.2 物聯網通用案例
冰箱是物聯網在家用電器領域應用的典型案例,在本章中,我們還将讨論其他幾個比較成功的物聯網應用案例。
1.2.1 車互聯
從自動駕駛汽車來看,汽車制造商可通過車互聯了解司機駕車習慣,據此提升自動駕駛系統的人性化及安全性。
從廠商角度來看,車互聯還可以提前檢測出問題元件,進而提前召回,提升顧客滿意度,同時降低問題元件生産成本;從車主角度來看,車互聯可以監測汽車零部件磨損情況,并降低維修費。
1.2.2 人互聯
人們在運動時,可通過智能手表來監測自身健康狀況。存儲和分析這些資料,可為醫學研究提供依據,據此預測疾病,改善生活品質。
此外,健康裝置互聯(如體重秤、心髒監測儀和血壓計)并使用區塊鍊技術共享資料,可為每人建立統一的醫療報告。醫生利用這些資料,可提升診斷準确性,也使疾病分析預測成為可能。
物聯網還在2016年裡約熱内盧奧運會上發揮了重要作用。比賽中使用了許多互聯裝置來采集運動員運動過程的身體資訊,利用這些資訊可随時跟蹤運動員比賽過程中的身體異常狀況。也可據此研制或改進體育裝備,例如自行車等,并研發新的體育項目。
以上執行個體說明,物聯網将徹底改變我們的生活方式,我們應該對此更加關注。
1.3 物聯網技術要素
物聯網解決方案的實作需要一組要素,而不是僅僅依賴某些裝置和應用就能實作。這些要素可為公司和員工提供更多價值。在本節中,我們将讨論這些要素中的一部分,如裝置、硬體和軟體,這些對于設計和實作有效的物聯網解決方案至關重要。
1.3.1 裝置
裝置處于物聯網解決方案的邊緣,事實上,這些裝置就是我們物聯網中提到的事物,這些事物通常可以發送和接收資料資訊。
舉個例子,嵌入式土壤水分探測儀可監測土壤濕度,當濕度降至43%時,該裝置會向其連接配接的平台發送報告,該平台存儲資料的同時進行判斷,并向該裝置發送打開水閥的指令,以恢複土壤濕度。當然,這種互動還涉及裝置相關的其他方面,這将在接下來的部分中讨論。現在,我們先看一下裝置部分。
這裡的裝置是具有模拟或數字(或兩者兼備)處理能力的計算單元,通過探測儀和執行器讀取和寫入模拟和數字信号來實作互動功能。
模拟信号是一種可以在一定範圍内變化的信号。以Arduino Uno闆為例,它有一個10位分辨率的模數轉換器(ADC),這意味着它可以讀取0~5V之間的電壓,并将它們映射到0~1 023之間的整數值(210 = 1 024)。模拟信号通常用于讀取模拟傳感器的據。
數字信号是二進制信号,隻有兩個可能的值:0或1,高或低。這種信号主要用于識别或改變開關狀态,例如,打開或關閉LED燈泡。
1.3.2 邊緣計算
裝置還可以自行處理一些簡單任務,例如,在土壤濕度低于50%時,打開水閥1分鐘,5分鐘之後再檢查一次土壤濕度。
也可處理一些複雜任務,例如,确定一輛無人駕駛汽車的攝像頭拍攝到的某個物體是等待過馬路的行人還是一棵樹。
必須擷取和分析這類資訊的裝置不能總是依賴于網絡或應用程式,如果其中一個出現問題,整個系統就會失靈。
為此,人們為這類裝置提供了一種不同的能力,叫作邊緣計算功能,即在解決方案的邊緣(也就是裝置自身)分析處理的能力。邊緣計算允許裝置在“脫機”狀态下執行一些操作和計算,而不需要與網絡連接配接。
裝置是物聯網解決方案的重要組成部分,在選擇使用哪類裝置時,最好的辦法就是確定裝置本身具備所有功能。
但由于一個物聯網解決方案涉及的裝置數量非常多,如果裝置設計過于備援,又會引發項目成本、耗電、連接配接協定、使用者體驗甚至解決方案複雜性等問題。
1.3.3 網絡
将這些裝置連接配接到網際網路是物聯網解決方案的另一重要因素,如何連接配接就變得至關重要。現在普遍使用的網絡标準是無線(Wi-Fi)或有線網絡、蜂窩/移動網絡、LPWAN和LoRa。這些網絡标準各有利弊,具體如下。
1. Wi-Fi或有線網絡
Wi-Fi(無線)是網際網路上最常見的标準通信模式,它假設互聯物體能夠連接配接到IEEE 802.x網絡,是以能夠處理基于IP的網絡。
市場上有許多具有Wi-Fi功能的裝置,如ExpressIf ESP-8266和ESP-32子產品、Texas Instruments CC3200、Microchip ATSAMW25、Intel Edison和Galileo等。當然還有許多其他組合,它們整合了Wi-Fi控制器和微控制器(MCU)功能。
Wi-Fi子產品相對便宜,特點是能夠支援較高有效載荷傳輸,其可靠性較高,連接配接速度高達6.7 Gbps。
下圖為基于Wi-Fi的物聯網解決方案示例:
多個裝置可以連接配接到一個節點,例如路由器上,路由器再連接配接到網際網路,并允許連接配接到路由器上的裝置通路網際網路。
2. 蜂窩/移動網絡
行動電話使用的網絡連接配接即是蜂窩網絡。這種網絡的基本思想是将一個大的區域劃分為多個小的區域,每個小區域都有一個由基站和多個收發器組成的無線網絡連接配接,可提供語音、文本和資料傳輸等服務。
如果某解決方案中的裝置處于Wi-Fi網絡覆寫範圍之外,例如汽車中,這種情況下可以使用移動網絡。如果解決方案不能依靠使用者的網絡,例如,你使用的裝置需要付費訂閱且裝置的使用依賴網絡連結,那麼這種情況下也需要使用移動網絡。當使用付費訂閱網絡時,即使使用者禁用網絡連接配接,裝置也可繼續工作。
下圖描述了标準移動網絡工作情況:
從上圖可見,移動天線向一定區域提供信号,範圍内的裝置可通過無線網絡連接配接到移動天線,并使用移動服務提供商提供的網際網路連接配接等服務。
3. LPWAN
LPWAN(低功耗廣域網)屬于無線網絡的一種,适用于遠端、低比特率、資料傳輸量較小的網絡環境。
LPWAN主要使用低功耗、低比特率和低頻裝置,但在連接配接到事物時網絡會變得非常強大。這是因為它使用的是長效電池和低功率裝置。但也有許多限制,例如每天對有效載荷或傳輸的消息有一定限制。
較低的頻率使得LPWAN非常可靠并且對幹擾不敏感,甚至在大範圍傳播資訊時也是如此。LPWAN提供商通常限制網絡中的資訊數量。有很多LPWAN提供商,其中最有名的大概是Sigfox。
LPWAN沒有從裝置或網關到網際網路的直接連接配接。相反,它們通常有預先準備好的網絡,網絡的一端是裝置,另一端則擁有許多Web hook和功能,你可以在這一端連接配接到你的應用或平台:
與移動網絡不同的是,LPWAN網絡不提供到裝置的網際網路連接配接,而是提供方法建立從裝置向網絡發送的事件的觸發器。舉個例子,你可以在LPWAN 供應商網絡的“邊緣”建立一個應用和一個連結到網際網路的觸發器,這樣無論何時從一個裝置收到資料觸發事件,它就利用從裝置釋出的事件中得到的資料調用一個網際網路上的可用服務。
4. LoRa或LoRaWAN
LoRa網絡圖類似LPWAN網絡,除了不使用服務提供商基礎設施之外,LoRa網絡可以有一個允許裝置連接配接到網際網路的網關。負責LoRa網絡基礎設施的人是網絡的所有者,這意味着不依賴網絡服務提供商就可以建立自己的網絡:
有幾種技術與LoRa的模型相同,具有不同的協定,例如ZigBee。Phillips Hue使用同樣的方法将燈泡、LED條紋和其他Hue裝置連接配接到ZigBee網關,然後再将ZigBee網關連接配接到Hue雲。
5. 網絡小結
總之,當選擇網絡連接配接時,下表可作為參考:
1.3.4 應用程式協定
物聯網解決方案确定了最合适的裝置後,下一步就是确定用于與裝置通信的協定。物聯網解決方案傾向于使用輕量級協定,如MQTT等。這不是唯一可以在物聯網中使用的協定,但是由于IBM Watson物聯網平台依賴于MQTT和REST,而且REST非常流行,下面看一下MQTT。
MQTT
MQTT代表消息隊列遙測傳輸。它是一種基于釋出和訂閱模式的極其輕量級的消息傳遞協定。與任何消息隊列模型一樣,它是一個異步協定。
如下圖所示,釋出和訂閱(pub/sub)模型依賴于三個要素:
這三個要素情況如下:
- 釋出者是生成任何内容并将其釋出到指定主題的參與者。
- 訂閱者是事件使用者。訂閱者訂閱其感興趣的主題,并在發行者每次為其訂閱建立釋出時擷取釋出的事件。
- 代理負責接收釋出物并将感興趣的主題通知訂閱者。
現在讓我們繼續讨論下一個重要的技術元素。
1.3.5 分析與人工智能
在物聯網解決方案中分析軟體或人工智能軟體元件并非不可缺少,但如果使用它們處理從裝置收集的資料,則可提前預警裝置故障,也可更好地了解使用者行為等。
例如,通過一組節能洗衣機捕獲的資料可能會發現,該裝置能耗比想象中要多。根本原因是由于缺乏潤滑劑,因為現有潤滑劑量對于非熱帶國家的發動機是不夠的。
據此,再将這些資訊與銷售資料一并分析,發現大約8個月前歐洲售出了100萬台此類洗衣機。對于洗衣機制造商,可從洗衣機必須更換備件的早期運費中獲益;還可以為其供應商提供潤滑劑需求預測資料;也可根據此資料分析進行新産品設計。
1.4 IBM Watson物聯網平台特性
IBM Watson物聯網平台是連接配接各類應用、裝置、網關、事件處理和管理任務等物聯網解決方案的紐帶,它支援REST和MQTT協定,可以在IBM Cloud平台(以前的IBM Bluemix)上使用。IBM Cloud平台是一個基于Cloud Foundry和Kubernetes的雲平台。
本節我們将讨論IBM Watson物聯網平台的以下主要特性:
- 儀表盤。
- 裝置、網關和應用。
- 安全性。
開始啦!
1.4.1 儀表盤
當通路IBM Watson物聯網平台時,将首先看到商業智能儀表盤。這個儀表盤可以由許多儀表盤和卡片組成,為物聯網解決方案提供了一些可視化形式:
研究一下這個螢幕上的儀表盤和卡片,以熟悉界面。
1.4.2 裝置、網關和應用
該平台中的另一個功能是裝置管理控制。這一功能可以建立和删除裝置、網關、應用和裝置類型,還可以對裝置進行檢查和啟動操作,例如固件更新請求或重置:
你還可以建立API密鑰,以便其他應用可以連接配接到物聯網,并與解決方案的其他元件進行互動。
1.4.3 安全性
還可利用IBM Watson物聯網平台保障解決方案的安全性。包括建立裝置連接配接政策、裝置IP位址白名單和黑名單,或者檢視一些國家的相關規定。你還可以對物聯網解決方案管理者進行授權。
1.5 建立你的第一個物聯網解決方案
本章前幾節沒有對裝置和應用進行深入剖析,要了解它們在物聯網解決方案中的作用,還需要舉些例子。
這裡的場景是,有一台裝置連接配接到IBM Watson物聯網平台,裝置發送時間戳作為資料,還用到一個應用,該應用使用Node.js将資料列印到stdout:
改進一下,在解決方案中增加一個網關,如下圖所示:
總而言之,網關連接配接與裝置連接配接的不同之處在于,你可以使連接配接到物聯網平台的裝置更加抽象化或專業化,是否增加網關還要取決于這樣做是否能夠使解決方案更簡單、成本更低或者帶來其他便利。
1.5.1 建立網關
建立網關的首要任務就是建立一個物聯網機構。如果你沒有IBM ID和IBM Cloud賬戶,注冊過程也非常直覺,隻需幾分鐘。如果你已經擁有IBM ID和IBM Cloud賬戶,請通路
http://bluemix.net的IBM Cloud平台。首先,登入并為本書中的練習建立一個新空間。
登入到IBM雲平台并通路指定空間後,選擇Creat resource選項以通路服務目錄:
在菜單中選擇Internet of Things,并建立一個名為Internet of Things Platform的服務,然後選擇Create選項:
建立完成之後,選擇Launch 選項,通路這個物聯網平台:
此物聯網平台網址是:
https://xxxxxx.internetofthings.ibmcloud.com/。
這裡,xxxxxx是你的機構ID,整個過程中都要使用它。
1.5.2 建立應用
建立應用就是允許實際的應用或服務連接配接到指定的Wastson物聯網平台機構。
- 為了做到這一點,可以通過IBM Cloud儀表盤通路物聯網平台,從旁邊的菜單選擇App,然後選擇Generate API key,在Description字段填寫:Hands-On IOT Solutions with Blockchain-Chapter 1 App。最後,單擊Next:
帶你讀《基于區塊鍊的物聯網項目開發》之一:了解物聯網并在IBM Watson物聯網平台上開發第1章 - 在下拉清單中選擇Standard Application,并單擊Generate Key。你将獲得一個API密鑰和身份驗證令牌。以表格形式記錄這些内容,如下所示,因為你需要使用這些資訊才能連接配接到應用程式:
帶你讀《基于區塊鍊的物聯網項目開發》之一:了解物聯網并在IBM Watson物聯網平台上開發第1章 - 接下來,打開首選項的IDE,建立一個新的Node.js項目,并安裝ibmiotf程式包:
帶你讀《基于區塊鍊的物聯網項目開發》之一:了解物聯網并在IBM Watson物聯網平台上開發第1章 - package.json檔案大緻如下所示:
帶你讀《基于區塊鍊的物聯網項目開發》之一:了解物聯網并在IBM Watson物聯網平台上開發第1章
5.現在,建立一個名為應用application.json的檔案,内容如下:
6.建立一個名為index.js的檔案,并添加以下内容:
7.通過運作npm start指令來測試應用:
祝賀你,你剛建立了連接配接到IBM Watson物聯網平台的應用。
8.現在,更新index.js,使其具有以下内容:
現在,每當裝置釋出事件時,都會将事件列印到stdout。在下一節中,我們将建立一個裝置來釋出事件。
1.5.3 建立裝置
在本節中,你将執行類似的步驟,建立一個連接配接到IBM Watson物聯網平台并釋出事件的假裝置(fake device)。
- 按照安裝步驟建立物聯網平台服務,在菜單中選擇Devices,然後選擇Add Device。建立名為DeviceSimulator的裝置,并在Device ID字段中填寫DeviceSimulator01。
帶你讀《基于區塊鍊的物聯網項目開發》之一:了解物聯網并在IBM Watson物聯網平台上開發第1章 - 因為它隻是一個模拟器,是以隻需單擊Next,直到你到達向導的末尾:
帶你讀《基于區塊鍊的物聯網項目開發》之一:了解物聯網并在IBM Watson物聯網平台上開發第1章
3.注意生成的裝置憑據格式如下:
- 回到你喜歡的IDE,并建立與以前的應用基本相同的項目:
帶你讀《基于區塊鍊的物聯網項目開發》之一:了解物聯網并在IBM Watson物聯網平台上開發第1章 - package.json檔案如下所示:
帶你讀《基于區塊鍊的物聯網項目開發》之一:了解物聯網并在IBM Watson物聯網平台上開發第1章 - 建立一個名為device.json的檔案,内容如下:
帶你讀《基于區塊鍊的物聯網項目開發》之一:了解物聯網并在IBM Watson物聯網平台上開發第1章 - 建立一個名為index.js的檔案,并添加以下内容:
帶你讀《基于區塊鍊的物聯網項目開發》之一:了解物聯網并在IBM Watson物聯網平台上開發第1章 - 可以通過運作npm start指令來測試裝置模拟器:
帶你讀《基于區塊鍊的物聯網項目開發》之一:了解物聯網并在IBM Watson物聯網平台上開發第1章 - 現在,更新代碼,将具有目前時間的事件發送到物聯網平台服務:
帶你讀《基于區塊鍊的物聯網項目開發》之一:了解物聯網并在IBM Watson物聯網平台上開發第1章
- 再次運作npm start,每2秒裝置将發送一個事件到Watson聯網平台。你可以檢查應用的日志,看看它是否收到了事件,如下所示:
帶你讀《基于區塊鍊的物聯網項目開發》之一:了解物聯網并在IBM Watson物聯網平台上開發第1章
再次祝賀你,你的裝置模拟器現在正在釋出事件,你的應用正在接收它們!
1.6 小結
在本章中,我們概述了物聯網環境,學習了物聯網解決方案技術要素,還研究了不同類型的網絡特點、選擇裝置時需要注意的重要事項,以及如何建立連接配接到IBM Watson物聯網平台的裝置和應用。在下一章中,我們将通過建立一個簡單花園澆水系統來提高開發技能。
1.7 補充閱讀
可以在IBM Watson物聯網平台文檔中查閱使用其他語言,如Python、Java、C++和C#的案例,連結為:
https://console.bluemix.net/docs/services/IoT/getting-started.html#getting-started-with-iotp