3dwoo大學簡體電腦書店
Python物聯網程序設計
( 簡體 字)
作者:[美]加斯頓·C. 希勒 著 類別:1. -> 程式設計 -> Python
   2. -> 程式設計 -> 物聯網
譯者:鄭軼文 譯
出版社:清華大學出版社Python物聯網程序設計 3dWoo書號: 54293
詢問書籍請說出此書號!
有庫存
NT售價: 595
出版日:2/1/2021
頁數:324
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 字 )
ISBN:9787302570813 加入購物車加到我的最愛 (請先登入會員)
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社)
第1章了解和設置基礎物聯網硬件 1
1.1了解IntelGalileoGen2主板及其組件 1
1.2識別輸入/輸出和Arduino1.0引腳 7
1.3認識額外的擴展和連接功能 11
1.4了解按鈕和指示燈 14
1.5檢查和升級主板的固件 17
1.5.1檢查固件版本 17
1.5.2在Windows系統中更新固件 19
1.5.3在MacOSX系統中更新固件 20
1.6牛刀小試 22
1.7小結 22
第2章結合使用IntelGalileoGen2和Python 23
2.1設置主板以使用Python作為編程語言 23
2.1.1可能需要另購的硬件 23
2.1.2下載YoctoLinux啟動鏡像 24
2.1.3在Windows系統中提取并寫入鏡像 25
2.1.4在MacOSX系統中提取并寫入鏡像 27
2.1.5啟動IntelGalileoGen2主板 30
2.2檢索主板分配的IP地址 31
2.2.1通過路由器回收主板IP地址 31
2.2.2使用Bonjour瀏覽器 32
2.3連接到主板的操作系統 35
2.3.1在Windows系統中安裝和配置PuTTY終端 35
2.3.2在OSX系統中通過ssh命令連接到YoctoLinux 37
2.4安裝和升級必要的庫以與主板交互 39
2.4.1檢查現有庫的版本 39
2.4.2安裝最新版本的庫 41
2.5安裝pip和其他庫 45
2.5.1安裝pip軟件包管理系統 45
2.5.2安裝wiring-x86軟件包 46
2.6調用Python解釋器 47
2.7牛刀小試 48
2.8小結 49
第3章使用Python實現交互式數字輸出 51
3.1打開和關閉板載組件 51
3.1.1編寫點亮或熄滅LED的Python代碼 51
3.1.2使用FileZilla將Python代碼文件傳輸到主板 52
3.1.3在主板上運行Python代碼 55
3.2認識面包板 58
3.3制作數字輸出示例 60
3.3.1使用電子示意圖 61
3.3.2使用LED 63
3.3.3認識電阻 65
3.3.4連接元器件 66
3.3.5編寫從1數到9的Python代碼 67
3.3.6測試代碼 68
3.3.7代碼解釋 70
3.4編寫面向對象的代碼控制數字輸出結果 72
3.4.1創建一個Led類來表示連接到主板的LED 72
3.4.2編寫控制數字輸出的代碼 73
3.5改進面向對象代碼以提供新功能 75
3.5.1創建NumberInLeds類 75
3.5.2編寫從0數到9的代碼 76
3.6隔離引腳編號以改善布線 76
3.6.1優化布線方案 77
3.6.2編寫代碼隔離引腳編號 78
3.7使用wiring-x86庫控制數字輸出 81
3.7.1編寫Board類和新Led類的代碼 82
3.7.2修改__main__方法 83
3.8牛刀小試 84
3.9小結 85
第4章使用RESTfulAPI和脈寬調制 87
4.1使用RESTfulAPI以通過LED顯示數字 87
4.1.1安裝Tornado 87
4.1.2安裝HTTPie 88
4.1.3使用Tornado構建RESTfulAPI 90
4.1.4啟動HTTP服務器 94
4.1.5編寫和發送HTTP請求 94
4.2控制LED的亮度 99
4.2.1關于LED亮度控制原理 99
4.2.2連接方案 100
4.2.3使用PWM生成模擬值 102
4.2.4創建新的AnalogLed類 104
4.2.5編寫控制LED亮度的代碼 106
4.2.6啟動HTTP服務器和RESTfulAPI 110
4.2.7通過HTTP請求生成模擬值 110
4.3為Web應用程序需求準備RESTfulAPI 113
4.3.1編寫新的PutRGBBrightnessHandler類 113
4.3.2創建tornado.web.Application類的實例 114
4.3.3啟動HTTP服務器和新版本的RESTfulAPI 114
4.3.4通過HTTP請求控制LED分量的亮度 115
4.4使用PWM和RESTfulAPI設置RGBLED的顏色 115
4.4.1使用RGBLED 116
4.4.2連接方案 117
4.4.3測試新版本的RESTfulAPI 118
4.5使用wiring-x86庫控制脈寬調制 120
4.6牛刀小試 121
4.7小結 122
第5章使用數字輸入 123
5.1了解按鈕和上拉電阻 123
5.1.1按鈕 123
5.1.2上拉電阻和下拉電阻 125
5.2使用數字輸入引腳連接按鈕 127
5.2.1連接方案 128
5.2.2創建PushButton類表示按鈕 129
5.2.3輪詢按鈕是否被按下 131
5.2.4測試輪詢代碼 132
5.2.5輪詢和中斷的區別 133
5.3讀取按鈕狀態并運行RESTfulAPI 133
5.3.1在BoardInteraction類中添加類屬性和類方法 134
5.3.2聲明tornado.web.RequestHandler的兩個子類 136
5.3.3創建tornado.web.Application類的實例 136
5.3.4修改__main__方法 137
5.3.5一致性測試 138
5.4使用wiring-x86庫讀取數字輸入 140
5.5使用中斷來檢測按下的按鈕 142
5.5.1連接方案 142
5.5.2創建PushButtonWithInterrupt類 144
5.5.3修改BoardInteraction類 146
5.5.4聲明觸發中斷時要調用的函數 147
5.5.5修改__main__方法 147
5.5.6中斷處理測試 148
5.6牛刀小試 149
5.7小結 150
第6章使用模擬輸入和本地存儲 151
6.1理解模擬輸入 151
6.2使用模擬輸入和mraa庫測量電壓 153
6.2.1連接方案 153
6.2.2創建VoltageInput類 155
6.2.3編寫代碼檢索電壓值 156
6.3將光敏電阻連接到模擬輸入引腳 157
6.3.1連接方案 158
6.3.2創建DarknessSensor類以表示光敏電阻 159
6.3.3循環檢測照明條件變化 161
6.3.4測試 162
6.4環境光變化時觸發動作 163
6.4.1連接方案 163
6.4.2創建BoardInteraction類 165
6.4.3基于環境光設置RGBLED的亮度 166
6.4.4測試 167
6.5使用wiring-x86庫控制模擬輸入 168
6.6使用本地存儲記錄日志 170
6.6.1添加日志記錄功能 171
6.6.2測試日志功能 172
6.7使用U盤存儲 173
6.7.1連接U盤 174
6.7.2在U盤上創建日志文件夾 176
6.7.3修改代碼中的日志路徑 176
6.7.4啟動示例將日志保存到U盤 177
6.7.5拔出U盤前的操作 177
6.8小試牛刀 178
6.9小結 178
第7章使用傳感器從現實世界中檢索數據 181
7.1了解傳感器及其連接類型 181
7.1.1傳感器選擇考慮因素 182
7.1.2模塊連接類型 184
7.1.3關于mraa庫 185
7.2使用加速度計 186
7.3將模擬加速度計連接到模擬輸入引腳 187
7.3.1使用模擬加速度計的分線板 187
7.3.2連接方案 187
7.3.3創建Accelerometer類表示模擬加速度計 190
7.3.4編寫主循環 191
7.3.5測試模擬加速度計 192
7.4將數字加速度計連接到I2C總線 193
7.4.1使用數字加速度計的分線板 194
7.4.2連接方案 195
7.4.3創建Accelerometer類表示數字加速度計 197
7.4.4編寫主循環 199
7.4.5測試數字加速度計 199
7.5使用mraa庫通過I2C總線控制數字加速度計 200
7.5.1編寫新的Adxl1345類 200
7.5.2創建新的Accelerometer類 206
7.6使用模擬溫度傳感器 207
7.6.1連接方案 207
7.6.2創建TemperatureSensor類表示溫度傳感器 209
7.6.3編寫主循環 210
7.6.4測試溫度傳感器 211
7.7將數字溫度和濕度傳感器連接到I2C總線 211
7.7.1連接方案 212
7.7.2創建TemperatureAndHumiditySensor類表示溫度和濕度傳感器 214
7.7.3編寫主循環 215
7.7.4測試溫度和濕度傳感器 216
7.8牛刀小試 217
7.9小結 217
第8章顯示信息和執行操作 219
8.1了解LCD顯示屏及其連接類型 219
8.1.1關于LCD顯示屏 220
8.1.2選擇LCD模塊時的考慮因素 220
8.2將LCDRGB背光分線板連接到I2C總線 221
8.2.1連接方案 222
8.2.2創建Lcd類 224
8.2.3創建TemperatureAndHumidityLcd子類 226
8.2.4編寫主循環 227
8.2.5測試LCD顯示 228
8.3將OLED點陣屏連接到I2C總線 228
8.3.1關于OLED點陣屏 228
8.3.2連接方案 230
8.3.3創建Oled類 231
8.3.4創建TemperatureAndHumidityOled子類 232
8.3.5編寫主循環 233
8.3.6測試OLED屏顯示 234
8.4連接伺服電機 234
8.4.1通過旋轉伺服電機的軸顯示溫度 234
8.4.2連接方案 236
8.4.3創建TemperatureServo類表示伺服電機 238
8.4.4修改主循環 239
8.4.5測試 240
8.5牛刀小試 240
8.6小結 241
第9章使用云 243
9.1使用dweepy將數據發布到云 243
9.1.1關于dweet.io 243
9.1.2安裝dweepy 244
9.1.3修改__main__方法 245
9.1.4測試 247
9.2使用Freeboard構建基于Web的儀表板 250
9.2.1關于freeboard.io 251
9.2.2創建Freeboard賬戶 251
9.2.3創建儀表板 251
9.3使用PubNub通過Internet實時發送和接收數據 256
9.3.1關于MQTT和PubNub 256
9.3.2創建PubNub賬戶并生成發布和訂閱密鑰 257
9.3.3安裝PubNubPythonSDK 258
9.3.4創建MessageChannel類 259
9.3.5修改__main__方法 262
9.3.6通過PubNub云發布帶有命令的消息 263
9.3.7修改MessageChannel類 268
9.3.8測試 271
9.4使用PythonPubNub客戶端將消息發布到云 273
9.4.1創建Client類 273
9.4.2創建__main__方法 276
9.4.3測試客戶端 277
9.5使用Mosquitto和EclipsePaho 279
9.5.1安裝paho-mqtt模塊 280
9.5.2創建MessageTopic類 280
9.5.3修改__main__方法 285
9.5.4啟動代碼運行 287
9.6使用Python客戶端將消息發布到Mosquitto代理 287
9.6.1創建MQTT客戶端中事件的回調函數 287
9.6.2創建__main__方法 289
9.6.3測試客戶端 290
9.7牛刀小試 291
9.8小結 292
第10章使用基于云的IoTAnalytics服務分析海量數據 293
10.1理解物聯網與大數據之間的關系 293
10.2了解IntelIoTAnalytics結構 295
10.3在IntelIoTAnalytics中設置設備 297
10.3.1使用iotkit-admin命令行 297
10.3.2刷新激活碼 298
10.3.3查看激活的設備 300
10.4在IntelIoTAnalytics中設置組件 300
10.4.1查看組件定義 301
10.4.2創建新組件 302
10.4.3注冊組件的設備 303
10.4.4檢索設備令牌 306
10.5使用IntelIoTAnalytics收集傳感器數據 308
10.5.1安裝requests軟件包 308
10.5.2創建IntelIotAnalytics類 309
10.5.3修改__main__方法 313
10.5.4運行并查看結果 314
10.6使用IntelIoTAnalytics分析傳感器數據 315
10.7使用IntelIoTAnalytics中的規則觸發警報 319
10.7.1定義規則 320
10.7.2查看規則觸發的警報 320
10.8牛刀小試 324
10.9小結 324
各章牛刀小試答案 327
第1章了解和設置基礎物聯網硬件 327
第2章結合使用IntelGalileoGen2和Python 327
第3章使用Python實現交互式數字輸出 327
第4章使用RESTfulAPI和脈寬調制 328
第5章使用數字輸入 328
第6章使用模擬輸入和本地存儲 328
第7章使用傳感器從現實世界中檢索數據 328
第8章顯示信息和執行操作 329
第9章使用云 329
第10章使用基于云的IoTAnalytics服務分析海量數據 329
《Python物聯網程序設計》詳細闡述了與Python物聯網程序開發相關的基本解決方案,主要包括了解和設置基礎物聯網硬件、結合使用Intel Galileo Gen 2和Python、使用Python實現交互式數字輸出、使用RESTful API和脈寬調制、使用數字輸入、使用模擬輸入和本地存儲、使用傳感器從現實世界中檢索數據、顯示信息和執行操作、使用云、使用基于云的IoT Analytics服務分析海量數據等內容。此外,本書還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現過程。
本書適合作為高等院校計算機及相關專業的教材和教學參考書,也可作為相關開發人員的自學教材和參考手冊。
物聯網(Internet of Things,IoT)正在改變我們的生活方式,它是IT行業最大的挑戰之一。開發人員正在創造大量低成本設備,以收集大量數據,彼此交互并利用云服務和基于云的存儲方案。世界各地的創客都在進行這種創造,它可以將日常物品轉換為帶有傳感器和執行器的智能設備。
例如,咖啡杯已不再是一個簡單的杯子,它可以向智能手表發送一條消息,指示其中的液體溫度是否合適,這樣你就可以放心飲用它而不必考慮是否太燙。如果你在收到消息之前移動了咖啡杯,則可穿戴設備會震動提示你現在還不到喝咖啡的時候。
你可以在智能手機中查看到咖啡機的咖啡豆余量,而不必擔心購買了過多的咖啡豆:當咖啡機的咖啡豆余量不足時,咖啡機會提前一天自動下單購買。你只需要批準智能咖啡機建議的在線咖啡豆訂單即可。根據某些統計算法,咖啡機將知道何時訂購最為合適。
當有更多人來到辦公室,他們的智能手表或智能手機將與咖啡機通信并下訂單,以防出現咖啡不足的情況。我們有智能咖啡杯、智能咖啡分配器、智能手表、智能手機和可穿戴設備,所有這些都可以利用云來創建一個智能生態系統,為人們的工作和生活提供更大的便利。
Intel Galileo Gen 2主板是用于物聯網項目的功能強大且用途廣泛的微型計算機主板。我們可以啟動Linux版本并輕松執行可以與主板上包含的不同組件進行交互的Python腳本。本書將教你開發物聯網原型,從選擇硬件到使用Python 2.7.3的所有必要軟件包、庫和工具,應有盡有。如果你需要較小的主板或其他主板,則本書中包含的所有示例均與Intel Edison主板兼容,因此,你可以根據需要切換到該主板。
Python是最流行的編程語言之一。它是開源和跨平臺的,你可以使用它來開發任何類型的應用程序,從網站到極其復雜的科學計算應用程序均可。Python是開發完整的物聯網項目的理想選擇。本書涵蓋了將日常對象轉換為物聯網項目所需的所有知識。
本書將告訴你如何使用Python語言從頭開始設計和開發物聯網解決方案。你將學會利用現有的Python知識來捕獲現實世界中的數據,與物理對象進行交互,開發API,以及使用不同的物聯網協議。你將通過特定的庫輕松地使用底層硬件、傳感器、執行器、總線和顯示屏。最終,你將掌握如何通過Intel Galileo Gen 2主板開發有趣的物聯網項目。

本書涵蓋的內容
第1章“了解和設置基礎物聯網硬件”,主要介紹了Intel Galileo Gen 2主板提供的不同功能,并逐一講解了其不同組件。本章解釋了不同引腳、LED和連接器的作用。
第2章“結合使用Intel Galileo Gen 2和Python”,主要介紹了將Linux Yocto鏡像寫入microSD卡、配置主板使其引導該映像、更新庫以使用其最新版本,以及啟動Python解釋器等操作。
第3章“使用Python實現交互式數字輸出”,重點介紹了如何使用兩個不同的庫來控制Python中的數字輸出:mraa和wiring-x86。我們將把LED和電阻器連接到面包板上,并編寫代碼以打開0至9個LED。此外,本章還改進了Python代碼以利用其面向對象功能。
第4章“使用RESTful API和脈寬調制”,介紹了使用Tornado Web服務器、Python、HTTPie命令行HTTP客戶端以及mraa和wiring-x86庫。本章生成了多版本的RESTful API,以便在連接到局域網的計算機和設備中與主板交互。
第5章“使用數字輸入”,介紹了通過輪詢讀取按鈕狀態與使用中斷之間的區別。本章將編寫代碼,使用戶可以通過主板上的按鈕或HTTP請求執行相同的操作。
第6章“使用模擬輸入和本地存儲”,介紹了如何使用模擬輸入來測量電壓值。本章使用模擬引腳以及mraa和wiring-x86庫來測量電壓,通過實例演示了將可變電阻轉換為電壓源,并使用模擬輸入、光敏電阻和分壓器來測量照明。當環境光線變化時,將觸發動作,同時使用模擬輸入和輸出。
第7章“使用傳感器從現實世界中檢索數據”,介紹了使用各種傳感器從現實世界中檢索數據。本章利用了upm庫中包含的模塊和類,同時使用了模擬和數字傳感器。
第8章“顯示信息和執行操作”,介紹了通過I2C總線連接到開發板的不同顯示。本章先是使用帶RGB背光的LCD顯示屏制作示例,然后又替換使用了OLED點陣屏。此外,本章還編寫了與模擬伺服電機交互的代碼。
第9章“使用云”,介紹了如何結合基于云的服務,這些服務使開發人員能夠輕松發布從傳感器收集的數據,并在基于Web的儀表板上可視化它們。本章使用了MQTT協議及其發布/訂閱模型、與MQTT協議底層的PubNub云、Mosquitto和Eclipse Paho等。
第10章“使用基于云的IoT Analytics服務分析海量數據”,闡釋了物聯網和大數據之間的緊密關系,并介紹了如何使用Intel IoT Analytics REST API進行交互。本章還介紹了IoT Analytics提供的用于分析大數據的不同選項,并定義了觸發警報的規則。

充分利用本書
為了使用不同工具連接到Intel Galileo Gen 2主板并實現Python示例,你需要配置有Intel Core i3或更高CPU和至少4 GB RAM的計算機。此外,你可以使用以下任何操作系統:
? Windows 7或更高版本(Windows 8、Windows 8.1或Windows 10)。
? Mac OS X Mountain Lion或更高版本。
? 任何能夠運行Python 2.7.x的Linux版本。
? 任何具有JavaScript支持的現代瀏覽器。
你還需要一塊Intel Galileo Gen 2主板和一個面包板,面包板要求帶有830個連接點(用于連接的孔)和兩條電源軌。
此外,你還需要不同的電子元器件和分線板來制作本書包含的示例。本書在具體的章節中提供了對這些元器件和分線板的詳細介紹。
本書適合的讀者
本書非常適合想探索Python生態系統中的工具以構建自己的物聯網項目的Python程序開發人員。具有創作和設計背景的人們也會發現這本書的有用之處。
本書約定
在本書中,你將看到許多不同的文本樣式。以下是這些樣式的一些示例以及對其含義的解釋。
(1)在界面詞匯后面使用括號附加對應的中文含義,方便讀者對照查看。以下段落就是一個示例:

初始視圖將顯示Details(詳細信息)選項卡。如果Activation Code(激活碼)包含代碼已過期(Code Expired)字樣,則意味著激活碼不再有效,必須單擊Activation Code(激活碼)文本框右側的刷新圖標(第二個帶有兩個箭頭的圖標)。

(2)代碼塊顯示如下:

if __name == "__main__":
print ("Mraa library version: {0}".format(mraa.getVersion()))
print ("Mraa detected platform name: {0}".format(mraa.
getPlatformName()))

number_in_leds = NumberInLeds()
# 從0到9計數
for i in range(0, 10):
number_in_leds.print_number(i)
time.sleep(3)

(3)當我們希望引起你對代碼塊特定部分的注意時,相關的行或項目將以粗體顯示:

class NumberInLeds:
def __init__(self):
self.leds = []
for i in range(9, 0, -1):
led = Led(i, 10 - i)
self.leds.append(led)

def print_number(self, number):
print("==== Turning on {0} LEDs ====".format(number))
for j in range(0, number):
self.leds[j].turn_on()
for k in range(number, 9):
self.leds[k].turn_off()

(4)新術語和重要單詞以中英文對照的形式表示,中文在前:

我們可以輕松識別出主板上出現的許多標簽,它們是符號中每個連接器的標簽。Fritzing使我們可以輕松使用面包板(Breadboard)和電子示意圖。

圖標旁邊的文字表示警告或重要的信息。
圖標旁邊的文字表示提示或技巧。
下載示例代碼文件
讀者可以下載本書的示例代碼文件。具體步驟如下:
(1)登錄或注冊。
(2)選擇Support(支持)選項卡。
(3)單擊Code Downloads & Errata(代碼下載和勘誤表)。
(4)在Search(搜索)框中輸入圖書名稱Internet of Things with Python,然后按照界面上的說明進行操作。
下載文件后,請確保使用最新版本解壓縮或解壓縮文件夾:
? WinRAR/7-Zip(Windows系統)。
? Zipeg/iZip/UnRarX(Mac系統)。
? 7-Zip/PeaZip(Linux系統)。
該書的代碼包也已經在GitHub上托管

如果代碼有更新,也會在現有GitHub存儲庫上更新。
下載彩色圖像
本書還提供了一個PDF文件,其中包含書中屏幕截圖/圖表的彩色圖像
關于作者
Gaston C. Hillar是意大利人,從8歲開始就學習計算機。20世紀80年代初,他開始使用傳奇的Texas TI-99/4A和Commodore 64家用計算機進行編程。他擁有計算機科學學士學位(以優異的成績畢業)和MBA學位(以出色的論文畢業)。目前,Gaston是一名獨立的IT顧問和自由作家,他一直在全球范圍內尋找新的機會。
他一直是Dr. Dobb’s Journal電子雜志的資深特約編輯,并撰寫了一百多篇有關軟件開發主題的文章。Gaston還是技術計算方面的微軟MVP。他7次獲得享有盛譽的Intel ? Black Belt Software Developer獎。
他是Intel? Software Network的特邀博主。
他與妻子Vanesa和兩個兒子Kevin和Brandon住在一起。
致謝
在撰寫本書時,我很幸運地能與Packt Publishing Ltd的優秀團隊一起工作,他們的貢獻極大地改善了本書的呈現方式。Reshma Raman給了我機會,我提出了編寫本書的想法,然后我就投入了一個激動人心的項目,教授如何將電子組件、傳感器、執行器、Intel Galileo Gen 2主板和Python組合在一起,以創建令人興奮的物聯網項目。Divij Kotian幫助我完善了對本書的構想,并針對文本、格式和流程提供了許多聰明的建議。在此還要感謝技術審核人員和校對人員的全面審核和有見地的評論。這本書之所以成為可能,正是因為他們提供了寶貴的反饋意見。
特別要感謝我的父親Jose C. Hillar,他在很早時就向我介紹電子產品。我在晶體管、電阻器和烙鐵的陪伴中長大。他對電子組件、微控制器和微處理器的發展有著清晰的認知和理解,這也使我得以熟悉和了解構建物聯網項目所需的一切。他還和我一起測試了本書中包含的所有示例項目。
與英特爾開發人員社區的眾多專家的良好互動使我熟悉了Intel Galileo平臺,多年以來對英特爾開發者論壇的訪問也使我了解了開發人員要成功創建現代物聯網項目必須掌握的所有內容。特別感謝Kathy Farrel和Aaron Tersteeg,因為正是在加利福尼亞州舊金山與他們的多次交流,啟發了我撰寫本書的想法。
寫書的過程既漫長又寂寞,好在有我的兒子Kevin和Brandon以及侄子Nicolas陪著我一起踢足球消遣。雖然我從來沒贏過一場比賽,但是我確實有進球。
關于審稿者
Navin Bhaskar在嵌入式系統方面擁有4年以上的經驗,編寫了從設備驅動程序到智能卡固件在內的眾多代碼。他的“嵌入式系統可重構計算”項目在嵌入設計挑戰賽中獲得了杰出優勝獎。在OpenWorld競賽中,他的EvoMouse贏得了三等獎。
他的博客,在其中可以找到有關物聯網和相關主題的教程。
pagetop