Gary Smart 一名資深的軟體工程師與物聯網整合專家。他的IT職涯起點正好是WWW崛起之際,並與隨後的網路科技一同成長,包含行動手機與平板電腦的崛起、嵌入式科技、SaaS與企業往雲端遷移,以及近年來的物聯網革命。Gary的實務經驗包含在不同規模的技術職與管理職,包含HP、Pacific Hydro-Tango、澳洲迪肯大學、小型顧問公司與許多網路與物聯網新創公司。
目錄
Part I 在Raspberry Pi上使用Python來開發 01 設定開發環境 02 認識Python與物聯網 03 使用Flask搭配RESTful API與Web Socket進行網路通訊 04 MQTT、Python與Mosquitto MQTT Broker之連網應用
Part II 可與真實世界互動的實用電子元件 05 Raspberry Pi連接真實世界 06 給軟體工程師的電子學入門課
Part III 物聯網遊樂場-與真實世界互動的實例 07 開關各種裝置 08 燈光、指示與顯示資訊 09 測量溫度、濕度與亮度 10 伺服機、馬達與步進馬達之運動 11 測量距離與動作偵測 12 進階IoT程式設計概念-執行緒、AsyncIO和事件迴圈 13 物聯網資料視覺與自動化平台 14 融會貫通-物聯網聖誕樹
A 評量解答
Content
1-1封面頁
1-2書名頁
1-3貢獻者
1-4前言
1-5目錄
1-6PartI 在Raspberry Pi 上使用Python 來開發
1-7Ch01 設定開發環境
1-81.1 技術要求
1-91.2 認識你的Python
1-101.3 設定Python 虛擬環境
1-111.4 用pip 安裝Python GPIO 套件
1-121.4.1 深入了解虛擬環境
1-131.5 執行Python 腳本的替代方法
1-141.5.1 在虛擬環境內使用sudo
1-151.5.2 在虛擬環境外執行Python 腳本
1-161.5.3 開機時執行Python 腳本
1-171.6 Raspberry Pi 的GPIO 介面
1-181.6.1 設定PiGPIO 常駐程式
1-191.7 總結
1-201.8 問題
1-211.9 延伸閱讀
1-22Ch02 認識Python與物聯網
1-232.1 技術要求
1-242.2 建立麵包板原型電路
1-252.2.1 了解麵包板
1-262.2.2 安裝按鈕與接線
1-272.2.3 安裝LED 與接線
1-282.2.4 安裝電阻與接線
1-292.3 閱讀電路電路圖
1-302.3.1 判讀按鈕接線電路電路圖
1-312.3.2 判讀LED 與電阻電路電路圖
1-322.3.3 介紹接地連接與符號
1-332.4 探索用Python 使LED 閃爍的兩個方法
1-342.4.1 透過GPIOZero 控制LED 閃爍
1-35匯入函式庫
1-36Pin Factory 設定
1-37使 LED 閃爍
1-382.4.2 透過PiGPIO 控制LED 閃爍
1-39匯入
1-40PiGPIO 與接腳組態
1-41使 LED 閃爍
1-422.4.3 比較GPIOZero 與PiGPIO 的範例
1-432.5 探討用Python 整合按鈕的兩個方法
1-442.5.1 用GPIOZero 對應至按鈕按下
1-45匯入
1-46按鈕按下的處理器
1-47按鈕設定
1-48防止主執行緒終止
1-492.5.2 用PiGPIO 回應按鈕按壓
1-50按鈕腳位設定
1-51按鈕按下處理器
1-522.6 建立第一個物聯網程式
1-532.6.1 執行與測試Python 伺服器
1-542.6.2 了解伺服器程式碼
1-55匯入
1-56變數定義
1-57resolve_thing_name() 方法
1-58get_lastest_dweet() 方法
1-59poll_dweets_forever() 方法
1-60process_dweet() 方法
1-61程式主進入點
1-622.7 擴充你的物聯網程式功能
1-632.7.1 實作dweeting 按鈕
1-642.7.2 PiGPIO LED 作為類別
1-652.8 總結
1-662.9 問題
1-672.10 延伸閱讀
1-68Ch03 使用Flask 搭配RESTful API 與 WebSocket 進行網路通訊
1-693.1 技術要求
1-703.2 介紹Flask 微服務架構
1-713.3 用Flask-RESTful 建立RESTful API 服務
1-723.3.1 執行與測試Python 伺服器
1-733.2.2 了解伺服器程式碼
1-74匯入
1-75Flask 與 Flask-RESTful API 實例變數
1-76全域變數
1-77init_led() 方法
1-78提供網頁
1-79LEDControl 類別
1-80get() 類別方法
1-81post() 類別方法
1-82LEDController 註冊與啟動伺服器
1-833.2.3 介紹PWM
1-843.4 加入RESTful API 客戶端網頁
1-853.4.1 了解客戶端程式碼
1-86匯入 JavaScript
1-87getState() 函式
1-88postUpdate() 函式
1-89updateControls() 函式
1-90用 jQuery 註冊事件處理器
1-91網頁 HTML
1-923.5 用Flask-SocketIO 建立Web Socket 服務
1-933.5.1 執行與測試Python 伺服器
1-943.5.2 伺服器程式碼
1-95匯入
1-96Flask 與 Flask-RESTful API 實例變數
1-97提供網頁
1-98處理器連線與斷線
1-99LED 處理器
1-100啟動伺服器
1-1013.6 加入Web Socket 客戶端網頁
1-1023.6.1 了解客戶端程式碼
1-103匯入
1-104Socket.IO 連接與斷線處理器
1-105on LED 處理器
1-106文件備妥函式
1-107網頁 HTML
1-1083.7 比較RESTful API 與Web Socket 伺服器
1-1093.8 總結
1-1103.9 問題
1-1113.10 延伸閱讀
1-112Ch04 MQTT、Python 與Mosquitto MQTTBroker 之連網應用
1-1134.1 技術要求
1-1144.2 安裝Mosquitto MQTT broker
1-1154.3 以範例來學習MQTT
1-1164.3.1 發佈和訂閱MQTT 訊息
1-1174.3.2 探索MQTT 專題和通配字元
1-1184.3.3 訊息的服務品質
1-1194.3.4 保留訊息以便後續傳輸
1-120發佈保留後的訊息
1-121建立持久性連線
1-1224.3.5 用Will 說再見
1-1234.3.6 使用MQTT 代理服務
1-1244.4 介紹Python Paho-MQTT 客戶端函式庫
1-1254.5 用Python 和MQTT 來控制LED
1-1264.5.1 運行LED MQTT 範例
1-1274.5.2 了解程式碼
1-128匯入
1-129全域變數
1-130set_led_level(data) 方法
1-131on_connect() 與 on_disconnect() MQTT 回呼方法
1-132on_message() MQTT 回呼方法
1-133init_mqtt() 方法
1-134主進入點
1-1354.6 製作以網頁為基礎的MQTT 客戶端
1-1364.6.1 了解程式碼
1-137匯入
1-138全域變數
1-139Paho JavaScript MQTT client
1-140連接到代理
1-141onConnectionLost 與 onMessageArrived 處理函式方法
1-142JQuery 的文件備妥函式
1-1434.7 總結
1-1444.8 問題
1-1454.9 延伸閱讀
1-146PartII 可與真實世界互動的實用電子元件
1-147Ch05 Raspberry Pi連接真實世界
1-1485.1 技術要求
1-1495.2 了解Raspberry Pi 腳位編號
1-1505.3 常用的Python GPIO 函式庫
1-1515.3.1 回顧GPIOZero - 初學者的簡易介面
1-1525.3.2 回顧RPi.GPIO - 初學者的低階GPIO
1-1535.3.3 回顧Circuit Python 與Blinka – 介接複雜裝置
1-1545.3.4 回顧PiGPIO - 低階GPIO 函式庫
1-155透過 PiGPIO(與 GPIOZero)進行遠端 GPIO
1-1565.3.5 回顧SPIDev 與SMBus - 專用SPI 與I2C 函式庫
1-1575.3.6 為何選用PiGPIO ?
1-1585.4 探索Raspberry Pi 電子產品介接選項
1-1595.4.1 了解數位IO
1-1605.4.2 了解類比IO
1-1615.4.3 認識PWM - 脈衝頻寬調變
1-162產生 PWM 訊號
1-1635.4.4 了解SPI、I2C 與單線介面
1-1645.4.5 了解序列/UART 協定
1-1655.5 介接類比- 數位轉換器
1-1665.5.1 製作ADS1115 ADC 電路
1-1675.5.2 確認ADS1115 已接上Raspberry Pi
1-1685.5.3 用ADS1115 讀取類比輸入
1-169理解程式碼
1-170匯入
1-171ADS1115 設定
1-172全域變數
1-173程式進入點
1-1745.5.4 使用PWM 訊號來控制LED
1-175理解程式碼
1-1765.5.5 用PiScope 視覺化呈現PWM 訊號
1-1775.5.6 視覺化呈現軟體與硬體定時PWM
1-1785.6 總結
1-1795.7 問題
1-1805.8 延伸閱讀
1-181Ch06 給軟體工程師的電子學入門課
1-1826.1 技術要求
1-1836.2 預備工作區
1-1846.2.1 購買所需的電子模組與元件
1-185購買個別元件
1-186購買開放原始碼硬體模組
1-1876.3 確保你的Raspberry Pi 安全
1-1886.4 電子元件失效的三種方式
1-1896.5 用於GPIO 控制的電子元件介接原理
1-1906.5.1 歐姆定律和功率
1-1916.5.2 克希何夫電路定律
1-1926.5.3 LED 電路為何使用200Ω 電阻?
1-193計算電阻數值
1-194考量到 Raspberry Pi 的電流限制
1-195計算電阻的功耗
1-1966.6 數位電子元件
1-1976.6.1 數位輸出
1-1986.6.2 數位輸入
1-1996.6.3 使用上拉與下拉電阻
1-200使用電阻來解決腳位浮動
1-201使用程式來解決腳位浮動
1-2026.7 類比電子元件
1-2036.7.1 類比輸出
1-2046.7.2 類比輸入
1-205分壓器
1-2066.8 認識邏輯準位轉換
1-2076.8.1 作為邏輯準位轉換器的分壓器
1-2086.8.2 邏輯準位轉換IC 與模組
1-2096.8.3 比較分壓器與邏輯準位轉換器
1-2106.9 總結
1-2116.10 問題
1-2126.11 延伸閱讀
1-213PartIII 物聯網遊樂場-與真實世界互動的實例
1-214Ch07 開關各種裝置
1-2157.1 技術要求
1-2167.2 認識繼電器驅動電路
1-2177.3 計算負載電壓與電流
1-2187.3.1 測量直流馬達所需的電流
1-2197.3.2 測量繼電器與LED 所需的電流
1-2207.4 使用光耦合器做為開關
1-2217.4.1 建立光耦合器的電路
1-2227.4.2 使用Python 來控制光耦合器
1-2237.5 使用電晶體作為開關
1-2247.5.1 製作MOSFET 電路
1-2257.5.2 使用Python 來控制MOSFET
1-2267.6 使用繼電器作為開關
1-2277.6.1 製作繼電器驅動電路
1-2287.6.2 使用Python 控制繼電器驅動電路
1-2297.7 總結
1-2307.8 問題
1-2317.9 延伸閱讀
1-232Ch08 燈光、指示與顯示資訊
1-2338.1 技術要求
1-2348.2 使用RGB LED 搭配PWM 技術來產生顏色
1-2358.2.1 製作RGB LED 電路
1-2368.2.2 執行並探討RGB LED 程式碼
1-2378.3 透過SPI 介面來控制彩色APA102 LED 燈條
1-2388.3.1 製作APA102 電路
1-239APA102 電路供電
1-240設定並執行 APA102 LED 燈條程式碼
1-241介紹 APA102 LED 燈條程式碼
1-242介紹 APA102 與 SPI 介面
1-243APA102 LED 燈條故障排除
1-2448.4 使用OLED 顯示模組
1-2458.4.1 OLED 顯示模組接線
1-2468.4.2 檢查OLED 顯示模組是否正確連接
1-2478.4.3 設定並執行OLED 範例
1-248介紹 OLED 程式碼
1-2498.5 透過PWM 技術讓蜂鳴器發出聲音
1-2508.5.1 製作RTTTL 電路
1-2518.5.2 執行RTTTL 音樂範例
1-2528.6 總結
1-2538.7 問題
1-2548.8 延伸閱讀
1-255Ch09 測量溫度、濕度與亮度
1-2569.1 技術要求
1-2579.2 測量溫度與濕度
1-2589.2.1 建立DHT11/DHT22 電路
1-2599.2.2 執行並探討DHT11/DHT22 程式碼
1-2609.3 偵測亮度
1-2619.3.1 使用LDR 元件製作光偵測電路
1-2629.3.2 執行LDR 範例程式碼
1-2639.3.3 LDR 程式碼說明
1-2649.3.4 LDR 設定總結
1-2659.4 偵測水分
1-2669.4.1 比較各種偵測方式
1-2679.5 總結
1-2689.6 問題
1-269Ch10 伺服機、馬達與步進馬達之運動
1-27010.1 技術要求
1-27110.2 用PWM 驅動伺服機
1-27210.2.1 連接伺服機與Raspberry Pi
1-27310.2.2 如何透過PWM 控制伺服機?
1-27410.2.3 執行並探索伺服機程式碼
1-27510.2.4 各種類型的伺服機
1-27610.3 如何用H 橋IC 控制馬達
1-27710.3.1 建立馬達驅動電路
1-27810.3.2 執行控制馬達的H 橋程式碼
1-279motor.py
1-280motor_class.py
1-28110.4 簡介步進馬達之控制
1-28210.4.1 連接步進馬達與L293D 電路
1-28310.4.2 執行與探索步進馬達的程式碼
1-28410.5 總結
1-28510.6 問題
1-286Ch11 測量距離與動作偵測
1-28711.1 技術要求
1-28811.2 使用PIR 感測器偵測動作
1-28911.2.1 製作PIR 感測器之電路
1-29011.2.2 執行並探索PIR 感測器程式碼
1-29111.3 使用超音波感測器測量距離
1-29211.3.1 超音波距離感測器的運作原理
1-29311.3.2 HC-SR04 之測距流程
1-29411.3.3 製作HC-SR04 電路
1-29511.3.4 執行與探索HC-SR04 範例程式碼
1-29611.4 使用霍爾效應感測器偵測動作與距離
1-29711.4.1 製作霍爾效應感測器之電路
1-29811.4.2 執行與探索霍爾效應感測器程式碼
1-29911.5 總結
1-30011.6 問題
1-301Ch12 進階IoT 程式設計概念-執行緒、AsyncIO和事件迴圈
1-30212.1 技術要求
1-30312.2 製作並測試電路
1-30412.2.1 製作參考電路
1-30512.2.2 執行範例程式碼
1-30612.3 認識事件迴圈方法
1-30712.4 認識執行緒方法
1-30812.5 認識發佈/ 訂閱方法
1-30912.6 認識AsyncIO 方法
1-31012.6.1 非同步之實驗
1-31112.7 總結
1-31212.8 問題
1-31312.9 延伸閱讀
1-314Ch13 物聯網資料視覺與自動化平台
1-31513.1 技術要求
1-31613.2 從Raspberry Pi 觸發IFTTT 的小程式
1-31713.2.1 建立溫度監控的電路
1-31813.2.2 建立與配置IFTTT 小程式
1-31913.2.3 觸發IFTTT Webhook
1-32013.2.4 於Python 觸發IFTTT 小程式
1-32113.3 從IFTTT 小程式作動Raspberry Pi
1-32213.3.1 方法1 -使用dweet.io 服務作為媒介
1-32313.3.2 方法2 -建立Flask-RESTful 服務
1-32413.3.3 建立LED 電路
1-32513.3.4 執行IFTTT 和LED 的Python 程式碼
1-32613.3.5 建立IFTTT 小程式
1-32713.3.6 用電子郵件控制LED
1-32813.3.7 IFTTT 故障排除
1-32913.4 用ThingSpeak 平台視覺化資料
1-33013.4.1 配置ThingSpeak 平台
1-33113.4.2 配置與執行ThingSpeak 的Python 程式碼
1-33213.5 其他物聯網與自動化平台
1-33313.5.1 Zapier
1-33413.5.2 IFTTT 平台
1-33513.5.3 ThingsBoard 物聯網平台
1-33613.5.4 Home Assistant
1-33713.5.5 Amazon Web Services(AWS)
1-33813.5.6 Microsoft Azure、IBM Watson 和Google Cloud