超圖解 ESP32 深度實作

超圖解 ESP32 深度實作

超圖解 ESP32 深度實作
作者:趙英傑   出版社:旗標   出版日期:2021-04-16 00:00:00

<內容簡介>

本書是《超圖解 Arduino 互動設計入門》系列作品,專為想要深度運用 ESP32 的讀者所撰寫,從基本的 GPIO、內建的磁力感測器、電容觸控開關、物聯網 IoT 運用、低功率藍牙、低耗電睡眠模式、底層 FreeRTOS 作業系統等等,都透過作者精心設計的實驗,以及本系列作品最具特色的超圖解方式說明,包含以下主題:

□ 內建電容觸控開關與霍爾效應磁力感測器
□ 硬體 / 計時器中斷處理與記憶體配置
□ OLED 顯示器中英文顯示以及圖形顯示
□ QR code 製作與顯示
□ Wi-Fi 無線網路物聯網 IoT 應用
□ HTTP GET/POST 與網路 API 使用
□ 動態資料圖表網頁
□ WebSocket 網路即時資料傳輸
□ RTC 即時時鐘與 GPS 精準對時
□ ESP32 睡眠模式與定時喚醒、觸碰喚醒
□ SPIFFS 檔案系統與 SD 記憶卡的使用
□ 網路音樂 / podcast 串流播放、文字轉語音播放
□ mDNS 區域網域名稱
□ BLE 低功耗藍牙應用
□ BLE 藍牙鍵盤、滑鼠人機介面輸入裝置製作
□ 藍牙立體聲播放器
□ 經典藍牙序列埠通訊 (SPP)
□ 藍牙裝置電量顯示
□ HTTPS 加密網路連線與網站建置
□ Web Bluetooth 網頁藍牙傳輸
□ Mesh 網路實作
□ FreeRTOS 作業系統
□ FreeRTOS 任務排程
□ 看門狗 (watchdog)
□ FreeRTOS 訊息佇列
□ FreeRTOS 二元旗號 (semaphore) 與互斥旗號 (mutex)
□ OTA 無線韌體更新
□ 物件導向程式設計與自製程式庫
□ Backtrace 除錯訊息解析
□ 電壓偵測與電流偵測

在學習的過程中,也帶著讀者動手做出許多有趣實用的實驗,包括:

□ 煙霧濃度偵測
□ 磁石開關
□ 人體移動警報器
□ 即時天氣顯示器
□ 網頁式遙控調光器
□ 網頁動態圖表
□ 休眠省電定時上傳感測資料
□ 網路收音機
□ 氣溫語音播報機
□ 藍牙立體聲音播放器
□ 藍牙多媒體旋鈕控制器
□ 藍牙多媒體鍵盤
□ 電腦桌面自動切換器
□ 投籃遊戲機
□ 網頁式藍牙遙控車

★本書特色:

ESP32 是一系列高效能雙核心、低功耗、整合 Wi-Fi 與藍牙的 32 位元微控器,適合物聯網、可穿戴設備與行動裝置應用。ESP32 的功能強大,涉及的程式以及應用場域相關背景知識也較為廣泛,本書的目的是把晦澀的技術內容,用簡單可活用的形式傳達給讀者。

ESP32 支援多種程式語言,本書採用最受電子 Maker 熟知的 Arduino 語言。但因為處理器架構不同,所以某些程式指令,像是控制伺服馬達以及發出音調的 PWM 輸出指令,操作語法和典型的 Arduino (泛指在 Arduino 官方的開發板,如:Uno 板執行的程式) 不一樣,這意味著某些 Arduino 範例和程式庫無法直接在 ESP32 上執行。

相對地,ESP32 的獨特硬體架構也需要專門的程式庫和指令才能釋放它的威力,例如,低功耗藍牙 (BLE) 無線通訊、可輸出高品質數位音效的 I2S(序列音訊介面)、DAC(數位類比轉換器)、Mesh(網狀) 網路、HTTPS 安全加密連網...等。

更有意思的是,ESP32 開發工具引入了 FreeRTOS 即時作業系統,可運行多工任務 (同時執行多個程式碼),而 ESP32 Arduino 程式其實就是運作在 FreeRTOS 上的一個任務。因此,書中除了含括 Arduino 語言外,也會適時帶入 ESP32 官方開發工具鏈 ESP-IDF 的功能,除了可操控底層 FreeRTOS 作業系統外,也可運用 Arduino 中未提供的 ESP32 專屬功能。

本書假設讀者已閱讀過《超圖解 Arduino 互動設計入門》第三或四版,所以本書的內容不包含基本電子學 (像電阻分壓電路、電晶體開關電路、運算放大器的電路原理分析..等),也不教導 Arduino 程式入門 (如:條件判斷、迴圈、陣列、指標..等),而是以《超圖解 Arduino 互動設計入門》為基礎,將篇幅依照 ESP32 應用的需要,在程式設計方面說明物件導向 (OOP)、類別繼承、虛擬函式、回呼函式、指標存取結構、堆疊與遞迴...等進階主題。

另外,本書也不僅僅只是探討 Arduino 程式,由於微控器是物聯網應用當中的一個環節,以『透過網頁瀏覽器控制某個裝置』的應用來說,呈現在瀏覽器的內容是採用 HTML 和 JavaScript 語言開發的互動網頁,和微控器的 Arduino 程式語言完全不同,在相關章節也會對這些主題有所著墨。

開發微電腦應用程式,偶爾會用到一些小工具程式,例如,呈現在 OLED 顯示器上的中英文字體與影像,都必須先經過『轉檔』才能嵌入 Arduino 程式碼,除了使用現成的工具軟體,書中也示範採用廣受歡迎的 Python 語言編寫批次轉換字體和影像檔的工具程式。書中提及的 Python 程式屬於進階應用,是假設讀者閱讀過《超圖解 Python 程式設計入門》,具備運用 Python 操作檔案目錄、解析命令行參數、轉換影像、執行緒...等相關概念後的延伸學習,可讓讀者練習善用各種程式語言綜合實踐的方法。

另外,為了方便讀者查詢書中內容,本書特別準備了線上版本的索引,避免一般中文書缺乏索引的問題,讓讀者可以快速找到所需的主題。希望這本厚實的作品能夠成為各位實作專案時最佳的工具書。

★目錄:

第 1 章 32 位元雙核心 ESP32 晶片以及軟體開發工具
1-1 ESP32 的特色與開發板介紹
1-2 ESP-IDF 程式開發框架及 menuconfig 工具簡介
1-3 使用 Arduino IDE 開發 ESP32 程式
1-4 在 Arduino IDE 中編譯 ESP-IDF 程式
1-5 ESP32 程式開發工具內含 FreeRTOS(即時作業系統)

第 2 章 ESP32 開發板與 Arduino 程式開發應用
2-1 EP32 開發板的接腳
2-2 ESP32 的 3 個 UART 序列通訊與 printf() 函式
2-3 輸出核心除錯訊息
2-4 數位輸出 / 入及電容觸控腳
2-5 類比輸入埠:讀取 MQ-2 煙霧 / 可燃性氣體感測值
動手做 2-1 偵測煙霧濃度
2-6 使用 ESP32 內建的霍爾效應感測器
動手做 2-2 磁石控制開關
2-7 PWM 輸出
動手做 2-3 調光器
2-8 調控 PWM 訊號的頻率:發出聲音
動手做 2-4 發出聲音
動手做 2-5 控制伺服馬達
2-9 字串處理:String 與 std::string 類型

第 3 章 物件導向程式設計與自製 Arduino 程式庫
3-1 模組化程式設計
動手做 3-1 可分辨「按一下」和 「長按」動作的開關
3-2 使用 enum 定義常數數字的集合
3-3 物件導向程式設計:自己寫程式庫
動手做 3-2 使用自製的 Switch 程式庫製作調光器

第 4 章 中斷處理以及 ESP32 記憶體配置
4-1 觸發中斷的時機與中斷服務常式
動手做 4-1 設定與取消硬體中斷
4-2 volatile 和主記憶體分區
4-3 分時多工與執行緒
4-4 解析 ESP32 的回溯(Backtrace)除錯訊息
4-5 微波感應偵測物體移動
動手做 4-2 人體移動警報器
4-6 計時器中斷
動手做 4-3 利用計時器定時閃爍 LED
動手做 4-4 用計時器定時閃爍 LED 之後刪除計時器物件
4-7 認識堆疊(stack)和堆積(heap)記憶體區域

第 5 章 OLED 顯示器以及 Python 中文轉換工具程式設計
5-1 使用 OLED 顯示器顯示文字訊息
動手做 5-1 使用 U8g2 程式庫操控 OLED 顯示器
動手做 5-2 在 OLED 顯示器呈現動態資料
5-2 全畫面及分頁暫存區(buffer)
5-3 產生顯示器用的點陣字體子集
5-4 使用 JavaScript 和 Python 取得字元編碼
動手做 5-3 在 OLED 螢幕顯示中文
5-5 點陣 VS 向量字體:使用 FontForge 軟體檢視
5-6 透過 Python 程式一氣呵成文字編碼和程式輸出

第 6 章 Wi-Fi 無線物聯網操控裝置
6-1 認識 Wi-Fi 無線網路
6-2 使用 ESP32 的 WiFi 程式庫連接無線網路
動手做 6-1 連線到 Wi-Fi 網路並顯示 IP 位址和電波訊號強度
動手做 6-2 建立 Wi-Fi 無線接入點(AP)
動手做 6-3 使用 WebServer 程式庫建立 HTTP 伺服器
動手做 6-4 處理 GET 或 POST 請求
6-3 在 ESP32 的快閃記憶體中儲存網頁檔案
6-4 透過 JavaScript(jQuery 程式庫)動態擷取 ESP32 資料
動手做 6-5 從 ESP32 輸出網頁的純文字更新資料
動手做 6-6 動態網頁調光器

第 7 章 擷取網路資料以及 Python OLED 圖像轉換工具
7-1 網路應用程式訊息交換格式:XML 與 JSON
動手做 7-1 讀取 JSON 格式的世界各地天氣資料
動手做 7-2 從 ESP32 讀取氣象網站資料
7-2 使用 ArduinoJson 程式庫處理 JSON 資料
7-3 在 OLED 螢幕顯示天氣概況
7-4 在 OLED 螢幕顯示開機畫面(點陣圖)
7-5 自動批次轉換點陣圖檔的 Python 程式

第 8 章 物聯網動態資料圖表網頁
8-1 從 ESP32 網站伺服器輸出 JSON 資料
動手做 8-1 從 ESP32 伺服器輸出 JSON 文件
8-2 使用 chart.js 在網頁繪製動態圖表
8-3 動態新增圖表資料
8-4 即時動態圖表
動手做 8-2 呈現即時動態數據圖表

第 9 章 使用 WebSocket 即時連線監控聯網裝置
9-1 使用 WebSocket 建立即時連線
9-2 使用 JavaScript 的 WebSocket 物件與 ESP32 伺服器連線
動手做 9-1 透過 WebSocket 從 ESP32 發送 JSON 資料

第 10 章 RTC 即時鐘以及網路和 GPS 精確對時
10-1 再談 struct(結構)
10-2 內建在 ESP32 晶片內部的月曆和時鐘:即時鐘(RTC)
動手做 10-1 透過網際網路更新時間
10-3 在 ESP32 的 Serial2 序列埠連接 GPS 衛星定位模組
動手做 10-2 連接 GPS 模組
10-4 認識 NMEA 標準格式與獲取 GPS 的經緯度值
10-5 解析 GPS 訊號的經緯度和日期時間資料
動手做 10-3: 使用 TinyGPS++ 程式庫解析 GPS 訊號

第 11 章 ESP32 的睡眠模式與喚醒方法
11-1 超低功耗的深度睡眠模式
11-2 定時喚醒微控器
動手做 11-1 觸控喚醒微控器
11-3 搭配網路時間的定時喚醒程式
11-4 認識 ThingSpeak 物聯網雲端平台
動手做 11-2 定時喚醒 ESP32 並上傳感測資料
11-5 在深度睡眠中維持接腳的狀態:控制 RTC_GPIO 接腳
動手做 11-3 在深度睡眠時維持數位 輸出狀態
11-6 外部喚醒:透過 GPIO 腳
動手做 11-4 透過 GPIO 腳從外部喚醒 ESP32

第 12 章 SPIFFS 檔案系統與 MicroSD 記憶卡
12-1 快閃記憶體的 SPIFFS 分區配置與操作
動手做 12-1 在 SPIFFS 中寫入與讀取檔案
動手做 12-2 使用 SPIFFS 紀錄執行狀態
12-2 透過網頁表單上傳檔案到ESP32
12-3 連接 microSD 記憶卡
動手做 12-3 使用 SD 記憶卡提供 ESP32 伺服器網頁
動手做 12-4 寫入 DHT11 溫濕度紀錄到 MicroSD 記憶卡
12-4 重複利用既有的程式碼:父類別、子類別與繼承
12-5 透過指標存取類別物件

第 13 章 設置區域網路域名、動態顯示 QR Code 以及 OTA 更新韌體
13-1 設置區域網路域名
動手做 13-1 替 ESP32 伺服器設定本地域名
13-2 用 QR Code 二維條碼呈現網址
動手做 13-2 在 OLED 螢幕顯示本機 IP 位址和 QR 碼
13-3 透過 OTA 更新 ESP32 的韌體
動手做 13-3 透過 Arduino IDE 進行 OTA 更新
動手做 13-4 透過網頁表單上傳檔案更新 ESP32 韌體

第 14 章 網路收音機、文字轉語音播報裝置與音樂播放器
14-1 I2S 序列音訊介面
14-2 製作網路收音機的前置作業
動手做 14-1 網路收音機 / Podcast 播放器
14-3 使用 Google 文字轉語音服務
動手做 14-2 氣溫語音播報服務
14-4 認識與解析 WAV 聲音檔案格式資料
14-5 驅動 I2S 週邊播放 WAV 音檔
14-6 兼具播放立體聲和單聲道 WAV 音源的程式
14-7 使用自訂結構解析 WAV 音檔標頭

第 15 章 典型藍牙以及 BLE 藍牙應用實作
15-1 藍牙立體聲接收器以及 ESP32 內部的 DAC
動手做 15-1 ESP32 藍牙立體聲播放器
15-2 ESP32 經典藍牙序列埠通訊程式
動手做 15-2 ESP32 藍牙序列埠通訊
15-3 使用 Serial Bluetooth Terminal 手機 App 連接藍牙
動手做 15-3 藍牙 SPP 一對一連線
15-4 開發 BLE 藍牙裝置
15-5 使用 nRF Connect 工具軟體檢測 BLE 藍牙裝置
15-6 製作 ESP32 BLE 藍牙序列通訊裝置
15-7 特徵回呼虛擬類別
15-8 提供 BLE 藍牙剩餘電量資訊服務
動手做 15-4 BLE 藍牙通知電量
15-9 偵測負載的電流量
動手做 15-5 測量負載的消耗電流

第 16 章 BLE 藍牙人機輸入裝置應用實作
16-1 旋轉編碼器
動手做 16-1 連接旋轉編碼器
動手做 16-2 結合 Switch 類別的旋轉編碼器程式
16-2 整合 BLE 藍牙鍵盤與滑鼠的程式庫
動手做 16-3 BLE 藍牙多媒體控制器旋鈕
16-3 BLE 藍牙多媒體鍵盤
動手做 16-4 連接 ESP32 與按鍵模組
動手做 16-5 整合滑鼠與多媒體鍵盤
16-4 電腦桌面自動切換器
動手做 16-6 使用 VL53L0X 飛時測距模組測量距離
動手做 16-7 電腦桌面自動切換器
16-5 人機介面裝置(HID)程式庫的原理說明

第 17 章 FreeRTOS 即時系統核心入門
17-1 認識 FreeRTOS 以及任務排程
動手做 17-1 第一個 FreeRTOS 程式
17-2 FreeRTOS 資料類型
17-3 FreeRTOS 任務的一生
17-4 任務的優先權與看門狗
17-5 動態調整任務優先權與刪除任務
17-6 ESP32 的可用記憶體容量以及任務的記憶體用量
17-7 傳遞參數給任務函式

第 18 章 FreeRTOS 即時系統核心應用
18-1 ESP32 Arduino 程式的起始點:app_main()
動手做 18-1 OLED 顯示器任務
18-2 透過佇列傳遞任務資料
動手做 18-2 讀取類比值並顯示在 OLED 螢幕
18-3 熱敏電阻
動手做 18-3 在佇列中傳遞結構資料
18-4 使用旗號(Semaphore)鎖定資源
動手做 18-4 由多工任務和中斷常式構成的投籃機

第 19 章 採用 HTTPS 加密連線的前端與 Web 伺服器
19-1 認識 HTTPS 加密連線
19-2 檢視與匯出網站的憑證
19-3 以 HTTPS 加密連線取得 ThingSpeak 資料
動手做 19-1 從 ESP32 以 HTTPS 加密連線 ThingSpeak
動手做 19-2 在 SPIFFS 中存放 CA 憑證檔
19-4 使用 OpenSSL 工具產生自簽的 SSL/TLS 憑證
19-5 在 ESP32 建立 HTTPS 加密連線的 Web 伺服器
19-6 在瀏覽器中匯入自簽憑證

第 20 章 使用 JavaScript 操控 ESP32 BLE 藍牙裝置
20-1 使用瀏覽器探索藍牙裝置
20-2 JavaScript 非同步程式設計
20-3 替 VS Code 程式編輯器安裝 Live Server 伺服器
20-4 透過 navigator.bluetooth 物件操控ESP32 藍牙裝置
20-5 讀取與寫入藍牙 UART 服務的 TX 和 RX 特徵值
20-6 ArrayBuffer(位元組陣列)與DataView(資料視圖)
20-7 使用 async/await 改寫藍牙網頁程式
20-8 藍牙遙控車的雙馬達驅動與控制電路
動手做 20-1 編寫馬達驅動程式模組
動手做 20-2 網頁藍牙 ESP32 遙控車
20-9 製作藍牙遙控車的互動網頁

第 21 章 建立無線 Mesh(網狀)通訊網路
21-1 認識與建立 Mesh 網路
21-2 調配與執行多工任務的 Task Scheduler 程式庫
動手做 21-1 在 Mesh 網路中分享訊息
21-3 組建 Mesh 感測器網路
動手做 21-2 Mesh 感測器網路的根節點程式
21-4 在 Mesh 網路中一對一傳送資料
21-5 連接 Mesh 網路與網際網路
21-6 上傳 Mesh 網路資料到雲端

附錄 A Python Asyncio(非同步 IO)多工處理以及 BLE 藍牙連線程式設計
A-1 Python 多工處理程式
A-2 使用 Python Bleak 程式庫連結 BLE 藍牙裝置

索引

最新生活新聞
人氣生活新聞
行動版 電腦版