接觸 ESP32 和 Arduino 時需要了解的事項
這篇文章介紹了 ESP32 和 Arduino 的基本知識,包括交流電、直流電、數位訊號和類比訊號,並提供了相關圖片和簡單說明,適合初學者快速入門。
電子學基礎
-
交流電:這是一種電壓和電流方向不斷變化的電力,最常見於家庭和商業電源中。
-
直流電:這是一種電壓和電流方向保持不變的電力,電池就是直流電的一個例子。
-
數位訊號:這是一種只有兩種狀態的訊號,通常被稱為 0 和 1 或者 高 和 低。
-
類比訊號:這是一種可以有無限多種狀態的訊號。在 Arduino 中,類比訊號可以是 0 到 1023 的任何值。
公式
歐姆定律
電壓 = 電流 × 電阻 (V = I × R)
功率計算
功率 = 電壓 × 電流 (P = V × I)
開發工具
- 開發板:這是一種預先設計好的電路板,用於開發和測試新的微控制器設計。Arduino 和 ESP32 都是開發板的例子。
- 編程環境:這是用於編寫和上傳程式碼到開發板的軟體。例如,Arduino IDE 是專為 Arduino 開發板設計的編程環境,它包含了一個程式碼編輯器和一個用於上傳程式碼到開發板的工具。
- 函式庫:這些是預先寫好的程式碼片段,可以幫助開發者快速實現特定的功能,如讀取感測器數據、控制馬達等。Arduino 社區提供了大量的函式庫,可以幫助開發者快速開發項目。
開發板
Arduino Uno 有 6 個可以讀取類比訊號的腳位,分別是 A0 到 A5。這些腳位都連接到內置的類比到數位轉換器(ADC),可以讀取介於 0(對應於 0V)和 1023(對應於供應電壓,通常是 5V)之間的值。
這些類比輸入腳位可以用來讀取各種類比感測器的數據,如溫度感測器、光敏電阻、壓力感測器等。它們也可以用來讀取變壓器或電位計的輸出,或者任何其他可以產生在 0 到 5V 範圍內的類比電壓的裝置。
請注意,雖然這些腳位可以讀取類比訊號,但它們不能輸出類比訊號。Arduino Uno 沒有內置的數位到類比轉換器(DAC)。然而,它可以使用 PWM(Pulse Width Modulation,脈衝寬度調變)來模擬類比輸出,這在控制 LED 的亮度或馬達的速度時非常有用。在 Arduino Uno 上,腳位 3、5、6、9、10 和 11 支援 PWM 輸出。
NodeMCU-32s 是一個基於 ESP32 微控制器的開發板。它具有許多類似於 Arduino Uno 的功能,但也有一些額外的功能和能力。例如,ESP32 具有內置的 Wi-Fi 和藍牙模組,可以連接到網路並與其他裝置通信。它還具有更多的 GPIO 腳位,更多的類比輸入腳位,以及更多的通信接口(如 SPI、I2C 等)。這使得它更適合於一些需要更多功能和能力的應用,如物聯網設備、智能家居設備等。
詳細的開發板資訊
-
Arduino Uno
- 類比輸入腳位:A0 到 A5
- 數位輸入/輸出腳位:0 到 13
- PWM 輸出腳位:3、5、6、9、10、11
- 供應電壓:5V
- 邏輯電壓:5V
- 類比電壓範圍:0 到 5V
- 類比到數位轉換器(ADC)位數:10 位
- 數位到類比轉換器(DAC):無
- 通信接口:UART、SPI、I2C
- 其他功能:無
-
ESP32
- 有多個版本,這裡就不詳細展示。
- 第01篇 ESP32 Arduino 開發環境架設 – NMKing 夜市小霸王
GPIO
大部分的微控制器(包括 Arduino 和 ESP32)的每個 GPIO(General Purpose Input/Output)腳位都可以被配置為讀取或輸出數位訊號。這意味著它們可以被設置為 HIGH(通常對應於供應電壓,例如 3.3V 或 5V)或 LOW(通常對應於地線,0V)。
然而,並非所有的 GPIO 腳位都可以讀取或輸出類比訊號。只有特定的腳位(在 Arduino 上被標記為 A0、A1 等等)才有這個能力。這些腳位連接到內置的類比數位轉換器(ADC),可以讀取介於 0(對應於 0V)和 1023(對應於供應電壓)之間的值。
VCC 和 GND 是兩個特殊的腳位,它們分別代表供應電壓和地線。它們通常用於連接電源和地線,以提供電力給其他裝置。在 Arduino 和 ESP32 上,VCC 通常代表 3.3V 或 5V 的供應電壓,而 GND 代表地線。
數位輸入
這是 Arduino 讀取二進制信號的方式,也就是 0 或 1。例如,你可以透過按鈕開關來提供數位輸入。當按鈕被按下時,Arduino 讀取的是 1(高電壓),而當按鈕未被按下時,Arduino 讀取的是 0(低電壓)。
數位輸出
這是 Arduino 發送二進制信號的方式,也就是 0 或 1。例如,你可以控制 LED 燈的開關。當 Arduino 發送 1(高電壓)時,LED 燈會亮起,而當 Arduino 發送 0(低電壓)時,LED 燈會熄滅。
類比輸入
這是 Arduino 讀取連續範圍內的信號的方式。例如,你可以透過旋轉變阻器來提供類比輸入。旋轉變阻器的阻值會隨著旋轉角度的改變而變化,Arduino 可以讀取這些變化並將其轉換為 0 到 1023 的數值。
PWM
Arduino 本身並不直接支援類比輸出,但它可以透過 PWM(脈衝寬度調變)來模擬類比輸出。這可以讓我們控制例如 LED 燈的亮度或是伺服馬達的角度等。PWM 透過快速地切換數位輸出(0 和 1)來模擬出類比效果。例如,如果我們將 LED 燈的輸出設定為 50% 的 PWM,那麼 LED 燈會以半亮的狀態顯示。設定為 75% 的 PWM,LED 燈會呈現 75% 亮度。
麵包板
麵包板是一種用於快速原型設計的電子元件連接板。它通常由一個塑料底座和一個金屬板組成,金屬板上有許多小孔,可以插入電子元件的引腳。這些孔通常排列成一個矩形網格,每個孔之間的距離是標準的間距,可以容納大多數電子元件的引腳。
麵包板通常用於將電子元件連接在一起,以便進行測試和測量。它們通常與彈簧夾一起使用,這樣可以輕鬆地將電子元件插入和拔出。
電子元件
- LED:這是一種發光二極管,可以將電能轉換為光能。它通常用於顯示器、指示燈等。
- 電阻:這是一種用於限制電流的元件。它的電阻值通常用歐姆(Ω)來表示。
- 電容:這是一種用於儲存電能的元件。它的電容值通常用法拉(F)來表示。
- 按鈕:這是一種用於控制電路開關的元件。當按下按鈕時,電路將通電;當釋放按鈕時,電路將斷電。
- 三極管:這是一種用於放大電流的元件。它通常用於控制馬達、燈光等。
通信技術
-
UART:這是一種用於微控制器之間通信的技術,全名是 Universal Asynchronous Receiver/Transmitter。UART 是一種串列通信協議,它允許兩個裝置之間進行全雙工通信。UART 通常用於微控制器和其他裝置(如 GPS 模組、藍牙模組等)之間的通信。
-
SPI:Serial Peripheral Interface (SPI) 是一種同步串列通信協議,它允許一個主裝置和一個或多個從裝置之間的全雙工通信。SPI 通常用於微控制器和感測器或記憶體裝置之間的通信。
-
I2C:Inter-Integrated Circuit (I2C) 是一種同步串列通信協議,它允許一個主裝置和一個或多個從裝置之間的通信。I2C 通常用於微控制器和感測器或記憶體裝置之間的通信。
-
藍牙:這是一種無線通信技術,用於短距離的數據交換。許多 Arduino 開發板都包含了藍牙模組,可以與其他藍牙裝置(如手機、電腦等)通信。
-
Wi-Fi:這是一種無線通信技術,用於連接到網路。一些 Arduino 開發板(如 ESP32)包含了 Wi-Fi 模組,可以連接到網路並與其他裝置通信。
I2C 它只需要兩根線,一根用於資料 (SDA),另一根用於時鐘 (SCL)。
電學公式
歐姆定律:V = I × R,其中 V 是電壓(伏特),I 是電流(安培),R 是電阻(歐姆)。
功率公式:P = V × I,其中 P 是功率(瓦特),V 是電壓(伏特),I 是電流(安培)。
電容公式:Q = C × V,其中 Q 是電荷(庫侖),C 是電容(法拉),V 是電壓(伏特)。
電感公式:V = L × (dI/dt),其中 V 是電壓(伏特),L 是電感(亨利),dI/dt 是電流變化率(安培/秒)。
這些電學公式在設計和實現 Arduino 項目時的許多情況下都可能會用到:
- 歐姆定律:當你需要計算在特定電阻上的電壓,或者需要計算流經特定電阻的電流時,你會用到歐姆定律。例如,你可能需要使用一個電阻來限制 LED 燈的電流。
- 功率公式:當你需要確定一個電路或其部分的能量消耗時,你會用到功率公式。例如,你可能需要確定你的 Arduino 項目是否超出了電源的功率限制。
- 電容公式:當你在設計需要儲存或釋放電能的電路時,你會用到電容公式。例如,你可能在設計一個需要平滑電源電壓的電路時使用電容器。
- 電感公式:電感公式在設計涉及變化電流的電路時特別有用,例如在設計電源轉換器或調諧電路時。
Arduino 有害論
NXT 有什麼不好?
除了以上 Arduino 有的缺點 NXT 都有(而且更嚴重)以外,NXT 讓學生打打電動、組裝積木就以為自己可以獨立建構嵌入式系統了,可是每次做好的東西單價都貴得要死,想做新的不得不拆掉舊的,不但傷感情,成就感也無法累積,經驗難以傳承,更沒有辦法體會實際產品開發的縮影。如果跟他說學單晶片就可以很便宜地做出來,不用每次拆掉,也沒幾人可以走出 NXT 所圍下的舒適圈,於是就陷入了萬-丈-深-淵-之中~親眼見證 Arduino 殘害學子實錄
…
案例2:內湖某科大資訊系學生在 2013 年宜蘭的某研討會上,他們發表「壓力發電暨人數監控系統」,在發表的文章中提到自己就是用 Arduino 控制板,對多個壓電元件做電壓監測。那我就問他們 ADC 在哪裡?結果報告的人完全聽不懂 ADC 是啥?在台上發楞半天,追問之下才知這位同學是做資料庫的部分,我就問:「寫 firmware 的是誰?有在場嗎?」然後旁邊那位寫 firmware 的同學才出來解釋:「我們沒有用 ADC」,我又問:
「那有比較器或其他類比元件嗎?」
「沒有」(但是他們的參考文獻卻有一項是「運算放大器」)
「沒有 ADC 也沒有比較器,請問你們到底用什麼監控電壓的?」
「我們就用 Arduino 控制板」
這位同學啊~我相信您回去把 ADC 的電子電路讀懂之後,再看一遍 ATmega2560 的 datasheet,一定會對自己當天在眾人面前的表現,感到勇氣可嘉!
簡單來說,我不是電子科系,只是業餘玩玩 IoT,不需要這麼專業😆。但若要朝向韌體工程師,可能就要多多考慮。
路線圖
目前計劃的學習路徑如下,但不打算走 HTTP 這條路。
2024-12-24今天 後來我放棄用程式開發,轉向 ESPHome。