超圖解ESP32應用實作

超圖解ESP32應用實作

作者:趙英傑
出版社旗標科技股份有限公司
出版日期:2024.6.11
頁數:640頁(雙色印刷,PDF索引檔下載
定價:NT$820
相關說明《超圖解ESP32應用實作》的PID循跡自走車PCB電路板說明

這是一本以圖解和案例實作說明ESP32 Arduino微電腦控制、電子DIY、程式設計、軟硬體偵錯(除錯)以及演算法的書籍。筆者假設您閱讀過《超圖解Arduino互動設計入門》以及《超圖解ESP32深度實作》,本書不包含關於Arduino和ESP32開發的基本知識,主題內容也不和這兩本書重複。

首先說明,我所謂的「圖解」,不是單純的螢幕截圖或照片,而是用插畫和解說文字勾勒重點:

高溫陶瓷加熱片

或者像這樣展示電路圖並附加說明:

LM393比較器

或者用顏色、反白、字體樣式、輔助線等方式強調,像底下這個程式碼片段:

滑鈕控制程式

這種解說方式,比較方便讀者掌握重點,而且節省版面,但也需要花費更多時間整理和繪製,有時還得配合編排修改設計。

從《超圖解C語言》開始,書本插圖的手寫文字改用游清松先生的「清松手寫體2」,程式碼字體改用“Fira Code”,關於字體的選用,請參閱「《超圖解Arduino互動設計入門》的書本封面、插圖與程式字體之Hack」。

隨著Arduino的普及,電子零件賣場和網路商店都買得到相容開發板和各種電子模組,加上「積木圖像式」程式開發環境的發明,讓即使不具電子和程式設計經驗的人士,也能輕易完成Arduino電子作品。做一些「如果感測器觸發某個事件,則啟動某個元件」這樣的應用,確實很簡單;修改一下現成的範例,也能用電子模組和程式庫洋洋灑灑做出一系列好像很厲害的東西,但很多應用場合,並不是連接模組、剪貼程式碼就能解決。

N20馬達控制

在如今AI聊天助理大行其道的年代,相較於用「積木圖像」堆砌的程式,AI助理更容易理解「正統」的Arduino程式語言(也就是C/C++  ),或者JavaScript, Python這種「文字式」語言。第2章會說明如何在程式編輯器導入AI助理,協助我們編寫程式,「透過Ollama在本機電腦執行大型語言模型(LLM)」這篇貼文,則補充說明了在本機安裝「AI程式助手」的方式。

電子模組和程式庫彷彿料理調理包,不用上廚藝課,也無須了解它們的神秘配方,簡單幾個步驟就能在家複刻大師級美味,不僅省去繁瑣的備料過程,也不會把廚房弄得一片狼藉。

我想表達的是,Arduino專案必須整合電子和程式設計,有些人不是科班出身,對電子電路一知半解因而淡化它,只把電子模組當作黑盒子,不畫電路圖也無法解釋電路原理,甚至不實際接線,只用模擬器軟體展示實驗成果;取決於你的目的和教學對象,這在某些場合可被允許,像是中小學生的創客班或者體驗課程,但從「整合電子和程式」的觀點來看,這種偏廢的學習方式是錯的。

USB介面電路

就像「完成一道料理」跟「學習廚藝」,是兩碼子事,我們不能片面地以為:現在是調理包速成的時代,廚師親力親為的料理方式已經過時了。即便是簡單的清炒高麗菜,食材的切法、下鍋順序、火侯、時間和調味,都會影響成品,要動手嘗試才能領會。

本書的實作範例也有使用程式庫,更重要的是,其中幾個主要的程式庫,都是自行編寫或者改良自既有的程式碼,使其更符合專案需求。例如,第5章用於檢測馬達轉速和轉向的程式庫、第6章採用中斷處理常式的開關按鍵程式庫、第7章的馬達驅動程式庫,以及第10章的PID演算法程式庫,所以本書並不單純介紹程式庫怎麼用,更說明怎麼自己寫。

按鍵中斷類別

我自己也常用現成的電子模組,但某些電路難免會用到基礎元件(電阻、電容和IC),先在麵包板組裝測試,成功後再焊接到洞洞板。閱讀電路圖與焊接,都是電子DIY的基本技能,如果你喜歡動手做,將會在製作過程感到樂趣無窮。從硬體製作到程式開發,當你的作品動起來的那一刻,所有付出的心血都值得了。

切割PCB

本書也有刊載模組的電路圖,像第5章的霍爾感測器(檢測馬達轉速和轉向)模組,筆者繪製了電路圖,也附上說明和運作原理,第7章比較了幾款常見的馬達驅動器,也說明了電路和驅動IC的運作原理。日後,即便讀者在專案中採用類似但不同的模組或元件,也能更加理解它們的參數和使用方式。

DRV8833驅動IC內部的MOSFET

底下用非傳統方式解說74HC4051這個多工器IC。

74HC4051

ESP32-S3晶片具備原生USB介面,無須外接IC,便能進行序列通訊、模擬USB人機設備(如:鍵盤、滑鼠和電玩搖桿)和儲存設備,它還具備JTAG偵錯介面:開發人員只需連接USB線,即可暫停執行中的ESP32程式、監看和變更變數值並控制程式運作流程。第11章介紹ESP32-S3和S2微控器,第14章操作示範JTAG介面。

ESP32-S3 JTAG介面

近年來,隨著免費或開源的電路模擬、PCB電路板設計軟體和桌上型製造工具的普及(如:3D列印機和CNC數值加工機),以及PCB製造和物流費用的下滑,電子DIY愛好者在家也能製造出精良的作品。《超圖解Arduino互動設計入門》的附錄D介紹了焊接工具,以及基本的焊接技巧,本書第9章則補充了新的焊接與DIY工具,並以圖解說明製作循跡自走車和自製小型機械鍵盤的完整過程,相關說明請參閱「《超圖解ESP32應用實作》的PID循跡自走車PCB電路板說明」。

T12電烙鐵

下圖是組裝完成的機械鍵盤的外觀,稍加改良自書本示範的版本;上層的壓克力定位板延伸出來的旋鈕部分,有稍微加長,以便和開發板同寬。這個版本的上層和底層的壓克力切割設計檔,都包含在書本範例檔裡面。

自製機械鍵盤

我買了三種鋁質旋鈕,綠色那一款的尺寸是直徑22mm、高11mm,黑色那一款則是直徑30mm、高15mm,內孔直徑都是6mm、花軸,但黑色那一款的內孔實際直徑偏小,需要用電讚加工才能安裝。最右邊的旋鈕不是實心鋁,所以價格最低。

鋁質旋鈕

鍵盤底部黏貼四個具備止滑功能的腳墊,這個腳墊的尺寸有點大,但我手邊只有這一種。此外,因為鍵盤的PCB板是徒手加工,所以開孔比較不精準,從下圖可看到左邊的銅柱歪了。

自製機械鍵盤

書本範例的循跡自走車PCB板的設計也稍微變更,正面加上左、右馬達以及左、右霍爾文字標示。

巡機自走車PCB板

背面新增馬達的接腳編號,因為插入ESP32開發板之後,PCB正面的馬達接腳標示會被蓋住。“03”數字放大,讓左右兩邊的視覺比較平衡,左下角的設計日期更新為5月20日。

巡機自走車PCB板

補充說明,PCB板上面的點陣(像素)字體是免費開源的「俐方體11號」,”03”標示則是“VCR OSD Mono”字體。

循跡自走車的OLED顯示器模組沒有、也非必要用螺絲固定;若不想讓OLED模組顯得鬆垮,可以裁切一小塊保麗龍、泡棉,或者用飲料杯那種厚紙板摺一個方塊,再用雙面膠黏在母排前面,也可以黏一塊樂高積木:

巡機自走車 + 樂高積木

樂高積木的高度跟插在母排的OLED顯示器很相近:

巡機自走車 + 樂高積木

Arduino官方的程式開發工具目前是2.x版本(請參閱「Arduino IDE 2.0:從官方支援MicroPython說起」),本書仍採用1.x版,因為某些外掛工具僅支援1.x版。IDE 1.x版工具本身採用Java程式語言開發,2.x版則採用JavaScript語言開發,所以它們的外掛程式不相容。此外,本書也採用另一個頗受專業人士推崇,免費開源的PlatformIO IDE(簡稱PIO),PIO的操作介面不像Arduino官方IDE那麼「友善」,但Arduino IDE 1.x版和2.x版的所有功能,PIO都有而且更強大,所以本書用了三個章節的篇幅詳細介紹PIO。

PlatformIO IDE

有人說,技術不比創意和設計重要。在開發Mac電腦過程中,賈伯斯(Steve Jobs)曾要求在文書處理軟體中加入選用字體的功能,一位資深軟體工程師反駁:字體外型沒有意義,只要能表達內容就夠了。那位工程師當場被解僱。

其實,Arduino最初就是為了非電子電機背景的互動藝術創作者而誕生,但是創新設計不能只淪為紙上談兵,而且你的靈感可能很快就成為別人借鑑、茁壯的養分。實踐力、技術力、營銷力…都是成功的要件。曾在Podcast節目聽到某位創業投資者的訪談,他說,很多提案者所謂的原創,他早已聽了千百遍。「創意」一詞太空泛,哪個行業領域不需要創新思維?

滑桿介面

Discovery(探索)頻道曾有個標語「就是想知道」,因為好奇心驅使人類文明進步。笛卡兒也曾說,越學習,越發現自己的無知。當你不斷地探索和學習自動化機械,會發現基礎科學的重要,例如,本書第1章的加熱器和第9章的自走車,它們都仰賴始於操控軍艦的一個PID數學方程式。本書先用日常生活的例子介紹PID方程式的概念,然後用程式實作。

PID控制方程式

最後再總結圖說PID背後的數學式。

切線與割線

Arduino互動設計,不僅可以很藝術,也可以很科學,它是個跨領域的實驗素材。第10章的自走車控制程式內文,也有補充說明基本的三角函數。

餘弦定理

在撰寫本書的過程中,非常感謝旗標科技的黃昕暐先生提供許多專業的看法,並且購入多個不同款式的ESP32開發板實測本書的範例,例如,詳盡測試第12章的ESP32-S3開發板的USB和UART上傳模式,以及第14章的ESP32-S3 USB JTAG偵錯介面,還有其他糾正內容的錯誤、添加文字讓文章更通順、晚上和假日加班改稿,也幫忙剪輯本書的宣傳影片,其中的JTAG偵錯實驗畫面是他拍攝的,由衷感謝昕暐先生對本書的貢獻。筆者也依照這些想法和指正,逐一調整解說方式,讓圖文內容更清楚易懂。

《超圖解ESP32應用實作》目錄

第 1 章 PID 控制入門
1-1 MCH 高溫陶瓷發熱元件簡介
►動手做 1-1 陶瓷加熱片電路
►動手做 1-2 開放迴路(open-loop)控制陶瓷加熱片
►動手做 1-3 閉迴路(closed-loop)控制系統以及起停式控制
1-2 PID 控制與方塊圖
1-3 比例控制器(P)
►動手做 1-4 採用 P 控制器的陶瓷加熱器

第 2 章 PI 和 PID 控制
2-1 積分控制器(I)
2-2 拆解逗號分隔字串
►動手做 2-1 加入積分運算的 PI 控制器
2-3 微分控制器(D)
►動手做 2-2 加入微分方程式的 PID 控制器
2-4 PID 的數學方程式

第 3 章 藍牙無線調整 PID 參數並於快閃記憶體儲存偏好設定
3-1 使用典型藍牙無線調整 PID 參數
►動手做 3-1 透過典型藍牙調整 PID 參數
3-2 透過回呼處理藍牙通訊事件
3-3 在快閃記憶體中儲存「偏好設定」

第 4 章 Visual Studio Code、AI 程式助手與動態 PID 調整網頁
4-1 下載與安裝 Visual Studio Code
4-2 使用 AI 助手建立互動網頁
4-3 製作 PID 調整滑桿與即時圖表網頁
4-4 在 ESP32 和瀏覽器之間的 JSON 訊息傳遞格式
4-5 顯示動態圖表
4-6 ESP32 的伺服器和 WebSocket 程式

第 5 章 檢測馬達轉速與移動距離
5-1 槽型光耦感測器和碼盤的運作原理
5-2 附帶減速齒輪箱與霍爾感測器的 N20 微型直流馬達
►動手做 5-1 使用中斷檢測馬達的轉動次數和方向
►動手做 5-2 「啟動」鍵與中斷常式的彈跳延遲處理
►動手做 5-3 測量移動距離
5-3 使用 XOR 邏輯閘降低外部中斷腳的需求

第 6 章 建立中斷類別程式
6-1 處理中斷的「啟動」鍵類別
6-2 使用自製的程式庫處理正交脈衝訊號
6-3 透過「函式指標」附加外部中斷

第 7 章 DRV8833 馬達驅動模組及其控制模式
7-1 直流馬達驅動控制模組
7-2 控制 DRV8833 的自訂函式
►動手做 7-1 以「快速衰減」模式控制馬達正、反轉
7-3 ESP32 的 DRV8833 程式庫
►動手做 7-2 測試不同衰減模式與 PWM 頻率對馬達運作的影響
7-4 重點解析 DRV8833 程式庫原始碼

第 8 章 循跡感測器以及擴充類比和數位輸入埠
8-1 擴充類比輸入埠
8-2 擴充數位輸入接腳

第 9 章 組裝循跡自走車
9-1 「差動驅動」型循跡自走車
9-2 製作循跡自走車的工具
9-3 ESP32 mini 開發板的接腳
9-4 焊接與組裝 PCB 子板
9-5 選擇電池盒與直流電壓轉換器
9-6 檢測電路以及繪製走線路徑
9-7 使用桌上型 CNC 雷射雕刻機切割壓克力板
9-8 循跡自走車的自製 PCB 板
9-9 試作 3 號機的修改電路

第 10 章 自走車的控制程式
10-1 感測車體的位置
►動手做 10-1 感測路線位置
►動手做 10-2 自走車的啟動∕暫停開關以及顯示畫面切換
►動手做 10-3 測量自走車馬達轉速並估算轉向的 PWM 值
10-2 依循跡感測值動態調整 PWM 輸出
10-3 調節左右馬達 PWM 值的程式碼
►動手做 10-4 PWM 循跡自走車的程式架構與原始碼
►動手做 10-5 動態調整雙輪轉速讓小車直行
►動手做 10-6 用 PID 控制器維持馬達轉速
►動手做 10-7 PID 控制循跡自走車

第 11 章 解析 ESP32-S2 與 ESP32-S3 開發板
11-1 認識 ESP32-S3 開發板
11-2 ESP32-S3 的兩個 ADC 單元 和類比輸入腳
11-3 ESP32 的開機模式說明
11-4 ESP32 內建的 USB Serial/CDC 序列通訊介面
11-5 WS2812 全彩 LED
11-6 GPIO Matrix(接腳矩陣)和 pins_arduino.h 檔
11-7 透過前置處理指令辨別 Arduino 開發板和微控器類型

第 12 章 使用 PlatformIO IDE 開發 Arduino 專案
12-1 安裝 PlatformIO IDE
12-2 新建 PlatformIO 專案
12-3 認識 PlatformIO 的操作介面
12-4 替專案加入第三方以及自訂程式庫
12-5 在快閃記憶體 SPIFFS 分區儲存網頁檔案
12-6 設定序列埠
12-7 在 PIO 中編譯與上傳程式
12-8 終端機介面以及 PlatformIO 的文字命令

第 13 章 PlatformIO 的檢查工具與單元測試
13-1 PlatformIO 的其他工具列說明
13-2 單元測試入門
►動手做 13-1 執行單元測試
►動手做 13-2 執行多個檢測
13-3 自訂開發板組態設定 JSON 檔

第 14 章 硬體偵錯與 JTAG 介面
14-1 硬體偵錯
►動手做 14-1 ESP32-S3 開發板 JTAG 偵錯
14-2 認識 GDB、OpenOCD 與 .elf 檔
14-3 JTAG 偵錯器架構與接線
►動手做 14-2 連接 ESP-Prog 進行偵錯
14-4 確認晶片的生產板本
14-5 清除編譯完成的韌體
14-6 使用 PlatformIO 開發與偵錯 Arduino UNO 開發板程式

第 15 章 USB 介面入門與人機介面裝置實作
15-1 認識 USB 介面
15-2 使用「查表法」編寫旋轉編碼器程式
►動手做 15-1 使用自訂程式庫製作旋鈕介面
15-3 ESP32 Arduino 開發環境內建的 USB 程式庫
►動手做 15-2 USB 多媒體旋鈕開關
15-4 按鍵掃描原理及 Keypad 程式庫
►動手做 15-3 密碼小鍵盤
15-5 製作 USB 媒體與系統控制鍵盤
►動手做 15-4 製作具備系統控制功能的媒體控制鍵盤

第 16 章 製作 USB 機械小鍵盤以及電玩控制器
16-1 機械鍵盤的元件和術語
►動手做 16-1 自製 USB 小機械鍵盤
16-2 USB 遊戲控制器
►動手做 16-2 自製 USB 遊戲控制器
►動手做 16-3 一鍵完成「必殺技」的 USB 遊戲控制器
16-3 改造現有 USB人機周邊介面

第 17 章 CAN 匯流排通訊實驗
17-1 認識 CAN 匯流排和 ECU
17-2 CAN 匯流排收發器 IC
►動手做 17-1 ESP32 CAN 匯流排通訊實驗
►動手做 17-2 傳遞以及解析浮點數資料
►動手做 17-3 發送接收請求封包

第 18 章 存取車上診斷系統(OBD)的即時資訊
18-1 OBD 車上診斷系統
18-2 從 ESP32 連接 OBD-II 介面
►動手做 18-1 讀取 OBD-II 訊框、轉發到藍牙序列埠
►動手做 18-2 在手機瀏覽器呈現即時車速和引擎轉速

Posts created 483

17 thoughts on “超圖解ESP32應用實作

  1. 趙老師你好
    我預購收到買到你的書,書本上的內容這是我想學PID資訊方面。
    GOOGLE資源太多太繁雜,不知如何調整PID控制。
    看了你寫的書,有信心做出自走車出來

    另外第6頁的書本範例無法下載

    1. 非常感謝告知!我確認後請編輯更新,拍謝!

      更新:
      請問第6頁是指1-6頁嗎?剛剛查了ch01資料夾裡的diy1-1是正確的。

    2. 趙老師好

      第六頁是序之後的頁數,就是本書範例。
      可以下載了,謝謝趙老師。
      我會照著本書實做看看,若有問題再反應。

  2. 趙老師

    範例程式diy1-1
    編譯出現錯誤
    Compilation error: ‘ledcSetup’ was not declared in this scope

    我上網查官方把函數刪掉,我試著修改還是出現編譯錯誤。
    我使用Arduino IDE 2.3.2

  3. 赵老师,您好,想问下:

    第18章的OBD诊断系统实验,因为我没车,可以再用arduino做个模拟OBD输出吗?如果可以,能简单做个说明吗,谢谢<3

  4. 直接執行diy5-1,發生錯誤:
    diy5-1:8:23:error:expected primary-initializer before ‘encISR’
    diy5-1:21:27:error:’encISR’ was not declared in this scope.

    請問發生什麼事了?

    1. 我的開發板選用LOLIN D32,開發環境分別採用2.0.17(推薦)和3.0.3編譯,測試都沒問題。

      請問你的開發板和編譯環境的版本是?

  5. 程式範例錯誤回報
    書頁13-17
    TEST_ASSERT_EQUAL(129, ip[0]); // 測試結果:兩個數值不同,失敗。
    執行一直報錯,我就覺得很奇怪,什麼跟書籍操作不一樣?
    看一下這行程式為何報錯,原來IP位址錯了
    正確是 TEST_ASSERT_EQUAL(192, ip[0]);

  6. 趙老師,您好!
    我的上一篇(7/29)留言可以刪除了,我參考了 p4-34~p4-38「完整的HTML檔」內容,據以修改範例ch04/OK/data/www/index.html後,4個滑桿和其input欄的連動已經正常了,我自己也再做了小修改,讓input欄直接鍵入數值時,也能送出JSON給ESP32設定其參數。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top