物聯(lián)網(wǎng)程序設(shè)計(jì):基于微軟的物聯(lián)網(wǎng)解決方案
定 價(jià):139 元
叢書名:物聯(lián)網(wǎng)核心技術(shù)叢書
- 作者:[美] 大衛(wèi)·博里基(Dawid Borycki)
- 出版時(shí)間:2019/6/1
- ISBN:9787111626428
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP393.409
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書涵蓋了三個(gè)主要的物聯(lián)網(wǎng)程序設(shè)計(jì)部分,可幫助我們快速實(shí)施物聯(lián)網(wǎng)解決方案。具體內(nèi)容包括:如何準(zhǔn)備開發(fā)環(huán)境、從傳感器讀取數(shù)據(jù)、與其他配件通信、構(gòu)建人工視覺、構(gòu)建電機(jī)、構(gòu)建聽力系統(tǒng),以及如何將機(jī)器學(xué)習(xí)和人工智能融入設(shè)備。書中還展示了如何設(shè)置遠(yuǎn)程遙測和預(yù)測性維護(hù),如Azure IoT解決方案,以及如何從頭開始構(gòu)建自定義IoT解決方案。
近些年,物聯(lián)網(wǎng)(IoT)、大數(shù)據(jù)、機(jī)器學(xué)習(xí)和人工智能已成為非常熱門的話題。物聯(lián)網(wǎng)被定義為設(shè)備互聯(lián)的全球網(wǎng)絡(luò)。這些設(shè)備可以像植入式葡萄糖連續(xù)監(jiān)測儀或可穿戴設(shè)備一樣小,也可以像信用卡大小的計(jì)算機(jī)一樣大,如Raspberry Pi。隨著此類設(shè)備數(shù)量的不斷增加,它們產(chǎn)生的數(shù)據(jù)量也將迅速增加,并將出現(xiàn)新的技術(shù)挑戰(zhàn)。
第一個(gè)挑戰(zhàn)與存儲有關(guān)。小型設(shè)備具有物理約束,不能存儲大型數(shù)據(jù)集。第二個(gè)挑戰(zhàn)是大數(shù)據(jù)的量超出了傳統(tǒng)算法的計(jì)算能力范圍,需要不同的基于統(tǒng)計(jì)的方法。這些方法可以由人工智能的一個(gè)分支——機(jī)器學(xué)習(xí)提供。因此,物聯(lián)網(wǎng)、大數(shù)據(jù)、機(jī)器學(xué)習(xí)和人工智能是緊密相關(guān)的概念。通常,設(shè)備是端,它通過網(wǎng)絡(luò)將數(shù)據(jù)發(fā)送到云,在云中存儲和處理數(shù)據(jù)以獲得全新的見解,而這些見解依靠以前的技術(shù)是很難獲得的。這些見解有助于理解和優(yōu)化智能設(shè)備監(jiān)控的流程。
雖然這種描述聽起來很吸引人,但我們要實(shí)施自定義IoT解決方案,所需要學(xué)習(xí)的新技術(shù)很多,多到令人生畏。幸運(yùn)的是,Microsoft創(chuàng)建了Windows 10 IoT Core和Azure IoT Suite,使你能夠快速編寫自定義IoT解決方案。它們的功能僅受你的想象力限制。在本書中,許多項(xiàng)目將會逐步呈現(xiàn)。通過完成這些項(xiàng)目,你不僅可以獲得設(shè)備編程的基礎(chǔ)知識,而且還可以編寫代碼來徹底改變設(shè)備和機(jī)器人,讓它們?yōu)槟愎ぷ鳎?br>本書分三個(gè)主要部分來幫助讀者掌握物聯(lián)網(wǎng)編程。每部分都包含適當(dāng)?shù)募?xì)節(jié),具體內(nèi)容包括如何準(zhǔn)備開發(fā)環(huán)境、從傳感器讀取數(shù)據(jù)、與其他配件通信、構(gòu)建人工視覺、構(gòu)建電機(jī)、構(gòu)建聽力系統(tǒng),以及將機(jī)器學(xué)習(xí)和人工智能融入設(shè)備。本書還展示了如何設(shè)置遠(yuǎn)程遙測和預(yù)測性維護(hù)功能,如Azure IoT解決方案,以及如何從頭開始構(gòu)建自定義物聯(lián)網(wǎng)解決方案。
本書讀者對象和所需技能
本書面向?qū)W生、程序員、工程師、愛好者、設(shè)計(jì)師、科學(xué)家和研究人員,他們希望利用現(xiàn)有的編程技能開發(fā)定制設(shè)備和傳感器的軟件,并使用云來存儲、處理和可視化遠(yuǎn)程傳感器讀數(shù)。
我們假設(shè)你了解C#編程的基礎(chǔ)知識,并且有豐富的Windows編程經(jīng)驗(yàn)。因此,本書沒有專門討論C#語言或編程基礎(chǔ)知識。本書不需要你了解音頻和圖像處理、機(jī)器學(xué)習(xí)或Azure的知識,這些主題將在對應(yīng)章節(jié)中詳細(xì)介紹。
工具和所需硬件
在本書中,使用Windows 10和Visual Studio 2015/2017作為開發(fā)環(huán)境。我們使用的大多數(shù)硬件組件都來自Adafruit Industries提供的用于Raspberry Pi的Microsoft IoT Pack。本書中出現(xiàn)的其他硬件,如相機(jī)、Raspberry Pi的擴(kuò)展板、通信適配器或電機(jī),都將在相關(guān)章節(jié)中進(jìn)行描述。
本書的組織結(jié)構(gòu)
本書分為基礎(chǔ)知識、設(shè)備編程和Azure IoT Suite三個(gè)部分。
第一部分介紹嵌入式編程的基礎(chǔ)知識,并討論它們與桌面、Web和移動應(yīng)用程序編程的區(qū)別,還將展示如何配置編程環(huán)境,編寫“Hello,world!”程序,并運(yùn)行在Windows 10 IoT Core上。此外,還會介紹有關(guān)UWP線程模型和XAML標(biāo)記的幾個(gè)用于聲明UI的基本概念。大多數(shù)有經(jīng)驗(yàn)的開發(fā)人員可以跳過這部分內(nèi)容,直接進(jìn)入第二部分。
第二部分介紹如何用Windows 10 IoT Core和UWP進(jìn)行設(shè)備編程。首先展示如何從多個(gè)傳感器獲取數(shù)據(jù)并控制設(shè)備。隨后,將解釋如何從麥克風(fēng)和攝像頭獲取并處理信號。然后,將展示如何使用各種通信協(xié)議,包括串行通信、藍(lán)牙、Wi-Fi和AllJoyn,使物聯(lián)網(wǎng)模塊能夠與其他設(shè)備通信。此外,還會展示如何控制電機(jī)并使用Microsoft Cognitive Services(微軟認(rèn)知服務(wù))和Azure Machine Learning(Azure機(jī)器學(xué)習(xí))為我們使用的設(shè)備添加智能。
第三部分聚焦于云計(jì)算,將展示如何使用兩個(gè)預(yù)配置的Azure IoT解決方案進(jìn)行遠(yuǎn)程設(shè)備遙測和預(yù)測性維護(hù)。在最后一章中,將介紹從頭開始構(gòu)建自定義物聯(lián)網(wǎng)解決方案的詳細(xì)過程。該過程展示了物聯(lián)網(wǎng)編程的本質(zhì),包括如何將遠(yuǎn)程傳感器的數(shù)據(jù)傳輸?shù)皆,在云中存儲、處理和呈現(xiàn)。此外,該部分還會解釋如何直接向Windows 10上運(yùn)行的移動應(yīng)用程序報(bào)告異常傳感器讀數(shù)。
本書有6個(gè)附錄,補(bǔ)充了一些其他的材料,包括如何使用Visual Basic和JavaScript(附錄A)、實(shí)現(xiàn)LED閃爍、Raspberry Pi的HDMI模式(附錄B)、位編碼(附錄C)、代碼共享策略(附錄D)、Visual C++ / Component Extensions相關(guān)介紹(附錄E)以及如何為物聯(lián)網(wǎng)開發(fā)設(shè)置Visual Studio 2017(附錄F)。這些附錄可在線獲取,網(wǎng)址為https://aka.ms/IoT/downloads,也可在華章公司網(wǎng)站下載:www.hzbook.com。
關(guān)于附帶內(nèi)容
書中添加了配套代碼以豐富你的學(xué)習(xí)體驗(yàn)?梢詮囊韵戮W(wǎng)址下載本書的配套代碼:
https://aka.ms/IoT/downloads
也可以從GitHub下載代碼:
https://github.com/ProgrammingForTheIoT
源代碼放在相應(yīng)章節(jié)和附錄的子文件夾中。為了提高圖書的可讀性,在書中很多地方都會直接參考配套代碼,而不是顯示完整的代碼。在閱讀本書時(shí)打開配套代碼是個(gè)不錯(cuò)的主意。
致謝
如果沒有Devon Musgrave的支持,這本書今天就不會存在。關(guān)于我的這本圖書,他熱情地給出回應(yīng),進(jìn)行了初步審閱并提供了寫作指導(dǎo)。
我很感謝Chaim Krause徹底檢查了本書中討論的每一個(gè)項(xiàng)目,并找到了很多問題,有些甚至是非常細(xì)微的問題。我也非常感謝Kraig
Dawid Borycki 是一名軟件工程師和生物醫(yī)學(xué)研究員,他擁有豐富的 Microsoft技術(shù)棧相關(guān)經(jīng)驗(yàn),完成了一系列具有挑戰(zhàn)性的項(xiàng)目,包括開發(fā)設(shè)備原型軟件(主要是醫(yī)療設(shè)備)、嵌入式設(shè)備接口以及桌面和移動編程。
譯者序
前言
第一部分 基礎(chǔ)知識
第1章 嵌入式設(shè)備編程 2
1.1 什么是嵌入式設(shè)備 2
1.1.1 專用固件 2
1.1.2 微控制器的存儲器 3
1.2 嵌入式設(shè)備無處不在 4
1.3 連接嵌入式設(shè)備:物聯(lián)網(wǎng) 5
1.4 嵌入式設(shè)備的基礎(chǔ) 7
1.5 嵌入式設(shè)備編程與桌面、Web和移動編程 9
1.5.1 相似之處及用戶互動 9
1.5.2 硬件抽象層 10
1.5.3 魯棒性 10
1.5.4 資源 10
1.5.5 安全 11
1.6 Windows 10 IoT Core和通用Windows平臺的優(yōu)勢 11
1.7 總結(jié) 12
第2章 嵌入式設(shè)備上的UWP 13
2.1 什么是Windows 10 IoT Core 13
2.2 UWP的功能 14
2.3 工具的安裝和配置 15
2.3.1 Windows 10 15
2.3.2 Visual Studio 2015或更高版本 16
2.3.3 Windows IoT Core項(xiàng)目模板 17
2.3.4 Windows 10 IoT Core Dashboard 18
2.4 配置設(shè)備 19
2.4.1 用于RPi2和RPi3的Windows 10 IoT核心入門套件 19
2.4.2 安裝Windows 10 IoT Core 21
2.4.3 配置開發(fā)板 22
2.5 “Hello,World!”Windows IoT 24
2.5.1 電路連接 24
2.5.2 使用C#和C++打開和關(guān)閉LED 30
2.6 實(shí)用工具和程序 40
2.6.1 Device Portal 40
2.6.2 Windows IoT遠(yuǎn)程客戶端 41
2.6.3 SSH 43
2.6.4 FTP 44
2.7 總結(jié) 46
第3章 Windows IoT編程精粹 47
3.1 將RPi2連接到外部顯示器并進(jìn)行引導(dǎo)配置 47
3.2 有界面和無界面模式 48
3.3 無界面應(yīng)用 50
3.3.1 C# 50
3.3.2 C++ 52
3.3.3 小結(jié) 58
3.4 有界面應(yīng)用程序的入口點(diǎn) 58
3.5 異步編程 63
3.5.1 工作線程和線程池 63
3.5.2 計(jì)時(shí)器 66
3.5.3 工作線程與UI同步 71
3.6 使用DispatcherTimer閃爍LED 75
3.7 總結(jié) 79
第4章 有界面設(shè)備的用戶界面設(shè)計(jì) 80
4.1 UWP應(yīng)用程序的UI設(shè)計(jì) 80
4.2 可視化編輯器 81
4.3 XAML命名空間 83
4.4 控件的聲明、屬性和特性 85
4.5 Style類 87
4.5.1 樣式聲明 87
4.5.2 樣式定義 88
4.5.3 StaticResource和ThemeResource標(biāo)記擴(kuò)展 92
4.5.4 視覺狀態(tài)和VisualStateManager 95
4.5.5 自適應(yīng)和狀態(tài)觸發(fā)器 100
4.5.6 資源集合 103
4.5.7 默認(rèn)樣式和主題資源 109
4.6 布局 109
4.6.1 StackPanel 109
4.6.2 Grid 111
4.6.3 RelativePanel 114
4.7 事件 116
4.7.1 事件處理 116
4.7.2 事件處理函數(shù)和視覺設(shè)計(jì)器 120
4.7.3 事件傳播 121
4.7.4 聲明和觸發(fā)自定義事件 123
4.8 數(shù)據(jù)綁定 126
4.8.1 綁定控件屬性 126
4.8.2 轉(zhuǎn)換器 128
4.8.3 綁定到字段 129
4.8.4 綁定到方法 134
4.9 總結(jié) 136
第二部分 設(shè)備編程
第5章 從傳感器讀取數(shù)據(jù) 139
5.1 位、字節(jié)和數(shù)據(jù)類型 140
5.2 解碼和編碼二進(jìn)制數(shù)據(jù) 141
5.2.1 按位運(yùn)算符 141
5.2.2 移位運(yùn)算符、位掩碼和二進(jìn)制表示 141
5.2.3 字節(jié)編碼和字節(jié)順序 150
5.2.4 BitConverter 151
5.2.5 BitArray 153
5.3 Sense HAT擴(kuò)展板 156
5.4 用戶界面 156
5.5 溫度和氣壓 158
5.6 相對濕度 169
5.7 加速度計(jì)和陀螺儀 173
5.8 磁力計(jì) 177
5.9 傳感器校準(zhǔn) 183
5.10 單例模式 184
5.11 總結(jié) 185
第6章 輸入和輸出 187
6.1 觸覺按鈕 188
6.2 操縱桿 190
6.2.1 中間件層 191
6.2.2 控制桿狀態(tài)可視化 196
6.3 LED陣列 199
6.4 操縱桿和LED陣列集成 206
6.5 LED陣列與傳感器讀數(shù)集成 209
6.6 觸摸屏和手勢處理 210
6.7 總結(jié) 215
第7章 音頻處理 216
7.1 語音合成 216
7.2 語音識別 220
7.2.1 背景 220
7.2.2 應(yīng)用程序功能和系統(tǒng)配置 220
7.2.3 UI更改 221
7.2.4 一次性識別 222
7.2.5 連續(xù)識別 225
7.3 使用語音命令進(jìn)行設(shè)備控制 227
7.3.1 設(shè)置硬件 227
7.3.2 編碼 228
7.4 波的時(shí)域和頻域 231
7.4.1 快速傅里葉變換 232
7.4.2 采樣率和頻率范圍 238
7.4.3 分貝 239
7.5 波形譜分析器 240
7.5.1 讀取文件 240
7.5.2 波形音頻文件格式閱讀器 241
7.5.3 信號窗口和短時(shí)傅里葉變換 244
7.5.4 譜直方圖 245
7.5.5 頻譜顯示:整合 247
7.5.6 在LED陣列上顯示頻譜 250
7.6 總結(jié) 254
第8章 圖像處理 255
8.1 使用USB攝像頭獲取圖像 256
8.2 人臉檢測 261
8.3 面部追蹤 265
8.3.1 在UI中顯示面部位置 268
8.3.2 在LED陣列上顯示面部位置 269
8.4 OpenCV與原生代碼接口 272
8.4.1 解決方案配置和OpenCV安裝 272
8.4.2 圖像閾值 274
8.4.3 處理結(jié)果的可視化 278
8.4.4 對象檢測 283
8.4.5 用于物體識別的機(jī)器視覺 286
8.5 總結(jié) 294
第9章 連接設(shè)備 295
9.1 串行通信 295
9.1.1 UART環(huán)回模式 296
9.1.2 項(xiàng)目輪廓 296
9.1.3 串行設(shè)備配置 297
9.1.4 寫數(shù)據(jù)和讀數(shù)據(jù) 300
9.2 為設(shè)備內(nèi)部通信寫應(yīng)用程序 303
9.2.1 連接轉(zhuǎn)換器 304
9.2.2 遠(yuǎn)程控制物聯(lián)網(wǎng)設(shè)備 305
9.3 藍(lán)牙 318
9.3.1 設(shè)置連接 319
9.3.2 藍(lán)牙綁定和配對 321
9.3.3 LED顏色命令 323
9.3.4 Windows Runtime組件對LedArray類的要求 324
9.3.5 有界面客戶端應(yīng)用程序 329
9.4 Wi-Fi 331
9.5 AllJoyn 335
9.5.1 內(nèi)省XML文件 336
9.5.2 AllJoyn Studio 338
9.5.3 生產(chǎn)者 340
9.5.4 IoT Explorer for AllJoyn 343
9.5.5 自定義消費(fèi)者 345
9.6 Windows Remote Arduino 350
9.7 總結(jié) 350
第10章 電機(jī) 351
10.1 電機(jī)和設(shè)備控制基礎(chǔ) 351
10.2 電機(jī)HAT 352
10.3 脈沖寬度調(diào)制 353
10.4 直流電機(jī) 359
10.4.1 用PWM信號實(shí)現(xiàn)電機(jī)控制 360
10.4.2 有界面應(yīng)用程序 363
10.5 步進(jìn)電機(jī) 365
10.5.1 全步模式控制 367
10.5.2 有界面應(yīng)用程序 372
10.5.3 自動調(diào)節(jié)速度 373
10.5.4 微步進(jìn) 376
10.6 伺服電機(jī) 381
10.6.1 硬件組裝 382
10.6.2 有界面應(yīng)用程序 383
10.7 提供者模型 385
10.7.1 Lightning提供者 386
10.7.2 PCA9685控制器提供者 387
10.7.3 直流電機(jī)控制 390
10.8 總結(jié) 391
第11章 設(shè)備學(xué)習(xí) 392
11.1 微軟認(rèn)知服務(wù) 393
11.1.1 情緒檢測 393
11.1.2 使用LED陣列指示情緒 402
11.1.3 計(jì)算機(jī)視覺API 404
11.2 定制人工智能 406
11.2.1 動機(jī)和概念 406
11.2.2 Microsoft Azure Machine Learning Studio 408
11.3 異常檢測 416
11.3.1 訓(xùn)練數(shù)據(jù)集采集 416
11.3.2 使用一類支持向量機(jī)進(jìn)行異常檢測 421
11.3.3 準(zhǔn)備和發(fā)布Web服務(wù) 424
11.3.4 實(shí)現(xiàn)Web服務(wù)客戶端 427
11.3.5 組合所有的內(nèi)容 432
11.4 總結(jié) 435
第三部分 Azure IoT Suite
第12章 遠(yuǎn)程監(jiān)控 438
12.1 設(shè)置預(yù)先配置的解決方案 439
12.2 預(yù)配設(shè)備 441
12.2.1 注冊新設(shè)備 441
12.2.2 發(fā)送設(shè)備信息 442
12.3 發(fā)送遙測數(shù)據(jù) 448
12.4 接收和處理遠(yuǎn)程命令 452
12.4.1 更新設(shè)備信息 452
12.4.2 響應(yīng)遠(yuǎn)程命令 454
12.5 Azure IoT服務(wù) 456
12.6 總結(jié) 457
第13章 預(yù)測性維護(hù) 458
13.1 預(yù)配置解決方案 459
13.1.1 解決方案儀表板 460
13.1.2 機(jī)器學(xué)習(xí)工作區(qū) 461
13.1.3 Cortana Analytics Gallery 465
13.2 Azure資源 465
13.3 Azure Storage 467
13.3.1 預(yù)測性維護(hù)存儲 467
13.3.2 遙測和預(yù)測結(jié)果存儲 468
13.3.3 設(shè)備列表 469
13.4 Azure Stream Analytics 470
13.5 解決方案源代碼 472
13.6 Event Hub和機(jī)器學(xué)習(xí)事件處理器 473
13.6.1 機(jī)器學(xué)習(xí)數(shù)據(jù)處理器 477
13.6.2 Azure Table存儲 480
13.7 WebJob模擬器 484
13.8 預(yù)測性維護(hù)Web應(yīng)用程序 487
13.8.1 模擬服務(wù) 487
13.8.2 遙測服務(wù) 488
13.9 總結(jié) 490
第14章 自定義解決方案 491
14.1 IoT Hub 492
14.1.1 客戶端應(yīng)用 493
14.1.2 設(shè)備注冊表 496
14.1.3 發(fā)送遙測數(shù)據(jù) 500
14.2 流分析 501
14.2.1 存儲賬戶 501
14.2.2 Azure Table 503
14.2.3 Event Hub 503
14.2.4 Stream Analytics Job 504
14.3 事件處理器 510
14.4 使用Microsoft Power BI進(jìn)行數(shù)據(jù)可視化 517
14.5 Notification Hub 521
14.5.1 關(guān)聯(lián)Windows Store 522
14.5.2 通知客戶端應(yīng)用 522
14.5.3 Notification Hub的創(chuàng)建和配置 527
14.5.4 使用事件處理器發(fā)送Toast通知 529
14.6 將Event Hub處理器部署到云端 532
14.7 總結(jié) 535