ESP32 基本入門
成套工具
包裝清單
ESP32簡介
剛接觸 ESP32?從這裡開始! ESP32 是樂鑫開發的一系列低成本、低功耗系統單晶片 (SoC) 微控制器,包含 Wi-Fi 和藍牙無線功能以及雙核心處理器。如果您熟悉 ESP8266,那麼 ESP32 是它的繼任者,裝載了許多新功能。ESP32 規格
如果您想了解更多技術和具體信息,可以查看以下 ESP32 的詳細規格(來源: http://esp32.net/)——欲了解更多詳情, 檢查數據表):
- 無線連線 WiFi:HT150.0 數據速率為 40 Mbps
- 藍牙:BLE(低功耗藍牙)和經典藍牙
- 處理器:Tensilica Xtensa 雙核心 32 位元 LX6 微處理器,運作頻率為 160 或 240 MHz
- 記憶:
- ROM:448 KB(用於啟動和核心功能)
- SRAM:520 KB(用於資料和指令)
- RTC fas SRAM:8 KB(用於 RTC 從深度睡眠模式啟動期間的資料儲存和主 CPU)
- RTC 慢速 SRAM:8KB(用於深度睡眠模式期間的協處理器存取) eFuse:1 Kbit(其中 256 位元用於系統(MAC 位址和晶片配置),其餘 768 位元保留用於客戶應用,包括快閃記憶體加密和晶片ID)
嵌入式快閃記憶體:ESP16-D17WD 和 ESP0-PICO-D1 上透過 IO32、IO2、SD_CMD、SD_CLK、SD_DATA_32 和 SD_DATA_4 內部連接快閃記憶體。
- 0 MiB(ESP32-D0WDQ6、ESP32-D0WD 和 ESP32-S0WD 晶片)
- 2 MiB(ESP32-D2WD 晶片)
- 4 MiB(ESP32-PICO-D4 SiP 模組)
低功耗:確保您仍然可以使用 ADC 轉換,例如ample,深度睡眠時。
週邊輸入/輸出:
- 具有 DMA 的周邊接口,包括電容式觸控
- ADC(類比數位轉換器)
- DAC(數位類比轉換器)
- I²C(內部積體電路)
- UART(通用非同步接收器/發送器)
- SPI(串行週邊介面)
- I²S(整合式晶片間聲音)
- RMII(簡化媒體獨立介面)
- PWM(脈寬調變)
安全: AES 與 SSL/TLS 硬體加速器
ESP32 開發板
ESP32 指的是裸露的 ESP32 晶片。但是,「ESP32」術語也用於指稱 ESP32 開發板。使用 ESP32 裸晶片並不容易或不實用,尤其是在學習、測試和原型設計時。大多數時候,您需要使用 ESP32 開發板。
我們將使用 ESP32 DEVKIT V1 板作為參考。規格 – ESP32 DEVKIT V1
下表總結了 ESP32 DEVKIT V1 DOIT 板的特性和規格:
核心數 | 2(雙核) |
無線上網 | 2.4 GHz 高達 150 Mbits/s |
藍牙 | BLE(低功耗藍牙)和傳統藍牙 |
建築學 | 32位 |
時脈頻率 | 高達 240 MHz |
記憶體 | 512 KB |
針腳 | 30(取決於型號) |
週邊設備 | 電容式觸控、ADC(類比數位轉換器)、DAC(數位類比轉換器)、12C(內部積體電路)、UART(通用非同步接收器/發送器)、CAN 2.0(控制器區域網路)、SPI(串行外設介面) , 12S(整合IC間 聲音)、RMII(簡化媒體獨立介面)、PWM(脈寬調變)等。 |
內建按鈕 | 重置和啟動按鈕 |
內建 LED | 內建藍色 LED 連接至 GPIO2;內建紅色 LED,顯示電路板正在通電 |
USB轉UART 橋 |
CP2102 |
它配備了一個 microUSB 接口,您可以使用該接口將開發板連接到電腦以上傳程式碼或通電。
它使用 CP2102 晶片(USB 轉 UART)透過 COM 連接埠使用串行介面與您的電腦進行通訊。另一種流行的晶片是 CH340。檢查主機板上的 USB 到 UART 晶片轉換器是什麼,因為您需要安裝所需的驅動程序,以便電腦可以與主機板通訊(本指南後面將提供有關此內容的更多資訊)。
該板還配有一個 RESET 按鈕(可能標記為 EN)以重新啟動板,以及一個 BOOT 按鈕將板置於閃爍模式(可用於接收代碼)。請注意,某些主機板可能沒有 BOOT 按鈕。
它還配備了內建藍色 LED,在內部連接到 GPIO 2。當您為開發板供電時,還有一個紅色 LED 會亮起。ESP32 腳位排列
ESP32 週邊設備包括:
- 18 個類比數位轉換器 (ADC) 通道
- 3個SPI接口
- 3個UART接口
- 2個I2C接口
- 16個PWM輸出通道
- 2 個數位類比轉換器 (DAC)
- 2個I2S接口
- 10 個電容感應 GPIO
ADC(類比數位轉換器)和DAC(數位類比轉換器)功能被指派給特定的靜態引腳。但是,您可以決定哪些引腳是 UART、I2C、SPI、PWM 等 - 您只需在代碼中分配它們即可。由於 ESP32 晶片的多路復用功能,這是可能的。
雖然您可以在軟體上定義腳位屬性,但預設指派的腳位如下圖所示此外,還有一些具有特定功能的引腳,這些功能使其適合或不適合特定項目。下表顯示了哪些引腳最適合用作輸入、輸出以及哪些引腳需要小心。
以綠色突出顯示的引腳可以使用。以黃色突出顯示的可以使用,但您需要注意,因為它們可能主要在啟動時出現意外行為。不建議將紅色突出顯示的引腳用作輸入或輸出。
通用輸入輸出 | 輸入 | 輸出 | 筆記 |
0 | 拉起 | OK | 啟動時輸出PWM訊號,必須為低電位才能進入閃爍模式 |
1 | 發送引腳 | OK | 啟動時調試輸出 |
2 | OK | OK | 連接到板載 LED,必須懸空或低電平才能進入閃爍模式 |
3 | OK | 接收引腳 | 啟動時為高電平 |
4 | OK | OK | |
5 | OK | OK | 啟動時輸出 PWM 訊號,捆紮引腳 |
12 | OK | OK | 如果拉高,則啟動失敗,捆紮銷 |
13 | OK | OK | |
14 | OK | OK | 啟動時輸出 PWM 訊號 |
15 | OK | OK | 啟動時輸出 PWM 訊號,捆紮引腳 |
16 | OK | OK | |
17 | OK | OK | |
18 | OK | OK | |
19 | OK | OK | |
21 | OK | OK | |
22 | OK | OK | |
23 | OK | OK | |
25 | OK | OK | |
26 | OK | OK | |
27 | OK | OK | |
32 | OK | OK | |
33 | OK | OK | |
34 | OK | 僅輸入 | |
35 | OK | 僅輸入 | |
36 | OK | 僅輸入 | |
39 | OK | 僅輸入 |
繼續閱讀有關 ESP32 GPIO 及其功能的更詳細和深入的分析。
僅輸入引腳
GPIO 34 至 39 是 GPI – 僅輸入引腳。這些引腳沒有內部上拉或下拉電阻。它們不能用作輸出,因此只能將這些引腳用作輸入:
- 通用輸入輸出口 34
- 通用輸入輸出口 35
- 通用輸入輸出口 36
- 通用輸入輸出口 39
ESP-WROOM-32 上整合的 SPI 快閃記憶體
某些 ESP6 開發板中暴露了 GPIO 11 至 GPIO 32。不過,這些引腳連接到 ESP-WROOM-32 晶片上的整合式 SPI Flash,不建議用於其他用途。因此,不要在您的專案中使用這些引腳:
- GPIO 6(SCK/CLK)
- GPIO 7(SDO/SD0)
- GPIO 8(SDI/SD1)
- GPIO 9 (SHD/SD2)
- GPIO 10(SWP/SD3)
- GPIO 11(CSC/CMD)
電容式觸控 GPIO
ESP32 有 10 個內部電容式觸控感應器。它們可以感知任何帶有電荷的物體的變化,例如人類皮膚。因此,他們可以檢測用手指觸摸 GPIO 時引起的變化。這些引腳可以輕鬆整合到電容墊中並取代機械按鈕。電容式觸控引腳也可用於將 ESP32 從深度睡眠狀態喚醒。這些內部觸控感測器連接到這些 GPIO:
- T0(GPIO 4)
- T1(GPIO 0)
- T2(GPIO 2)
- T3(GPIO 15)
- T4(GPIO 13)
- T5(GPIO 12)
- T6(GPIO 14)
- T7(GPIO 27)
- T8(GPIO 33)
- T9(GPIO 32)
模數轉換器(ADC)
ESP32 具有 18 x 12 位元 ADC 輸入通道(而 ESP8266 只有 1x 10 位元 ADC)。這些是可用作 ADC 的 GPIO 和各自的通道:
- ADC1_CH0(GPIO 36)
- ADC1_CH1(GPIO 37)
- ADC1_CH2(GPIO 38)
- ADC1_CH3(GPIO 39)
- ADC1_CH4(GPIO 32)
- ADC1_CH5(GPIO 33)
- ADC1_CH6(GPIO 34)
- ADC1_CH7(GPIO 35)
- ADC2_CH0(GPIO 4)
- ADC2_CH1(GPIO 0)
- ADC2_CH2(GPIO 2)
- ADC2_CH3(GPIO 15)
- ADC2_CH4(GPIO 13)
- ADC2_CH5(GPIO 12)
- ADC2_CH6(GPIO 14)
- ADC2_CH7(GPIO 27)
- ADC2_CH8(GPIO 25)
- ADC2_CH9(GPIO 26)
筆記: 使用 Wi-Fi 時無法使用 ADC2 接腳。因此,如果您使用 Wi-Fi 且無法從 ADC2 GPIO 取得值,則可以考慮改用 ADC1 GPIO。那應該可以解決你的問題。
ADC 輸入通道具有 12 位元解析度。這意味著您可以獲得範圍從0到4095的模擬讀數,其中0對應0V,4095對應3.3V。您也可以在代碼和 ADC 範圍上設定通道解析度。
ESP32 ADC 接腳不具有線性行為。您可能無法區分 0 和 0.1V,或 3.2 和 3.3V。使用 ADC 引腳時需要記住這一點。您將得到類似下圖所示的行為。數位類比轉換器 (DAC)
ESP2 上有 8 x 32 位元 DAC 通道,用於將數位訊號轉換為類比量tage 訊號輸出。這些是 DAC 通道:
- DAC1(GPIO25)
- DAC2(GPIO26)
RTC GPIO
ESP32 上有 RTC GPIO 支援。當 ESP32 處於深度睡眠狀態時,可以使用路由到 RTC 低功耗子系統的 GPIO。當超低電平時,這些 RTC GPIO 可用於將 ESP32 從深度睡眠中喚醒。
電源 (ULP) 協處理器正在運作。以下 GPIO 可用作外部喚醒來源。
- RTC_GPIO0 (GPIO36)
- RTC_GPIO3 (GPIO39)
- RTC_GPIO4 (GPIO34)
- RTC_GPIO5 (GPIO35)
- RTC_GPIO6 (GPIO25)
- RTC_GPIO7 (GPIO26)
- RTC_GPIO8 (GPIO33)
- RTC_GPIO9 (GPIO32)
- RTC_GPIO10 (GPIO4)
- RTC_GPIO11 (GPIO0)
- RTC_GPIO12 (GPIO2)
- RTC_GPIO13 (GPIO15)
- RTC_GPIO14 (GPIO13)
- RTC_GPIO15 (GPIO12)
- RTC_GPIO16 (GPIO14)
- RTC_GPIO17 (GPIO27)
脈寬調製
ESP32 LED PWM 控制器具有 16 個獨立通道,可配置為產生具有不同屬性的 PWM 訊號。所有可用作輸出的引腳均可用作 PWM 引腳(GPIO 34 至 39 不能產生 PWM)。
要設定 PWM 訊號,您需要在程式碼中定義這些參數:
- 訊號的頻率;
- 工作週期;
- 脈寬調製通道;
- 您要輸出訊號的 GPIO。
I2C
ESP32 有兩個 I2C 通道,任何引腳都可以設定為 SDA 或 SCL。當將 ESP32 與 Arduino IDE 結合使用時,預設的 I2C 接腳為:
- GPIO 21(SDA)
- GPIO 22(SCL)
如果在使用wire函式庫時想使用其他引腳,只需呼叫:
Wire.begin(SDA, SCL);
SPI
預設情況下,SPI 的引腳映射為:
SPI | 摩西 | 味噌 | 時鐘 | CS |
VSPI | 通用輸入輸出口 23 | 通用輸入輸出口 19 | 通用輸入輸出口 18 | 通用輸入輸出口 5 |
HSPI | 通用輸入輸出口 13 | 通用輸入輸出口 12 | 通用輸入輸出口 14 | 通用輸入輸出口 15 |
中斷
所有 GPIO 均可配置為中斷。
捆紮銷
ESP32 晶片有以下捆紮接腳:
- GPIO 0(必須為低電位才能進入啟動模式)
- GPIO 2(啟動期間必須懸空或為低電位)
- 通用輸入輸出口 4
- GPIO 5(啟動期間必須為高電位)
- GPIO 12(啟動期間必須為低電位)
- GPIO 15(啟動期間必須為高電位)
這些用於將 ESP32 置於引導程式或快閃記憶體模式。在大多數內建 USB/串列埠的開發板上,您無需擔心這些引腳的狀態。此板將引腳置於正確的狀態以進行閃爍或啟動模式。有關 ESP32 啟動模式選擇的更多資訊可以在此處找到。
但是,如果您有周邊連接到這些引腳,則在嘗試上傳新程式碼、使用新韌體刷新 ESP32 或重置開發板時可能會遇到困難。如果您有一些週邊連接到捆綁引腳,並且您在上傳程式碼或刷新 ESP32 時遇到問題,可能是因為這些週邊裝置阻止了 ESP32 進入正確的模式。閱讀啟動模式選擇文件以引導您正確的方向。重置、刷新或啟動後,這些引腳將按預期工作。
啟動時引腳為高電平
一些 GPIO 在啟動或重設時將其狀態更改為高電平或輸出 PWM 訊號。
這意味著,如果您有連接到這些 GPIO 的輸出,則當 ESP32 重設或啟動時,您可能會得到意外的結果。
- 通用輸入輸出口 1
- 通用輸入輸出口 3
- 通用輸入輸出口 5
- GPIO 6 至 GPIO 11(連接至 ESP32 整合 SPI 快閃記憶體 – 不建議使用)。
- 通用輸入輸出口 14
- 通用輸入輸出口 15
啟用(EN)
使能 (EN) 是 3.3V 穩壓器的啟用引腳。它被拉高,因此連接到地以禁用 3.3V 穩壓器。這表示您可以使用連接到按鈕的該引腳來重新啟動 ESP32,例如amp勒。
GPIO 電流消耗
根據 ESP40 資料表中的「建議工作條件」部分,每個 GPIO 消耗的絕對最大電流為 32mA。
ESP32 內建霍爾效應感測器
ESP32 還內建霍爾效應感測器,可偵測周圍磁場的變化
ESP32 Arduino IDE
Arduino IDE 有一個附加元件,可讓您使用 Arduino IDE 及其程式語言對 ESP32 進行程式設計。在本教學中,我們將向您展示如何在 Arduino IDE 中安裝 ESP32 板,無論您使用的是 Windows、Mac OS X 還是 Linux。
先決條件:已安裝 Arduino IDE
在開始此安裝程序之前,您需要在電腦上安裝 Arduino IDE。您可以安裝兩個版本的 Arduino IDE:版本 1 和版本 2。
您可以點擊以下連結下載並安裝 Arduino IDE: arduino.cc/en/Main/軟體
我們推薦哪一個 Arduino IDE 版本?目前,有一些 plugins 對於 ESP32(如 SPIFFS File系統上傳器插件),Arduino 2 尚不支援。您只需在 Arduino 軟體頁面上向下滾動即可找到它。
在 Arduino IDE 中安裝 ESP32 插件
若要在 Arduino IDE 中安裝 ESP32 板,請依照下列說明操作:
- 在您的 Arduino IDE 中,前往 File>首選項
- 在「附加董事會經理」中輸入以下內容 URLs”字段:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
然後,按一下“確定”按鈕:筆記: 如果您已經有 ESP8266 板 URL,您可以將 URLs 帶逗號如下:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json,
http://arduino.esp8266.com/stable/package_esp8266com_index.json
開啟板管理器。前往工具 > 板 > 板管理器...搜尋 ESP32 and press install button for the “ESP32 by Espressif Systems“:
就是這樣。幾秒鐘後就應該要安裝完畢。
上傳測試程式碼
將 ESP32 板插入您的電腦。打開 Arduino IDE 後,請依照以下步驟操作:
- 在「工具」>「開發板」選單中選擇您的開發板(在我的例子中是 ESP32 DEV 模組)
- 選擇端口(如果您在 Arduino IDE 中沒有看到 COM 端口,則需要安裝 CP210x USB 轉 UART 橋 VCP 驅動程式):
- 打開以下examp勒昂德 File > 前amp檔案 > WiFi
(ESP32) > WiFi掃描 - Arduino IDE 中將會開啟一個新草圖:
- 按下 Arduino IDE 中的上傳按鈕。等待幾秒鐘,程式碼將編譯並上傳到您的主機板。
- 如果一切按預期進行,您應該會看到「上傳完成」。訊息.
- 以 115200 的波特率開啟 Arduino IDE 串列監視器:
- 按下 ESP32 板載啟用按鈕,您應該會看到 ESP32 附近可用的網路:
故障排除
如果您嘗試將新草圖上傳到 ESP32 並收到此錯誤訊息「發生致命錯誤:無法連線到 ESP32:逾時...正在連線...」。這表示您的 ESP32 未處於刷機/上傳模式。
選擇正確的板名稱和 COM 連接埠後,請依照下列步驟操作:
按住 ESP32 板上的「BOOT」按鈕
- 按下 Arduino IDE 中的「上傳」按鈕上傳您的草圖:
- 當您看到“正在連接...”後在 Arduino IDE 中顯示訊息後,將手指從「BOOT」按鈕上鬆開:
- 之後,您應該會看到“上傳完成”訊息
就是這樣。您的 ESP32 應該會運行新的草圖。按下“ENABLE”按鈕重新啟動 ESP32 並執行新上傳的草圖。
每次要上傳新草圖時,您還必須重複該按鈕序列。
項目 1 ESP32 輸入輸出
在本入門指南中,您將學習如何使用 ESP32 和 Arduino IDE 讀取數位輸入(例如按鈕開關)以及控制數位輸出(例如 LED)。
先決條件
我們將使用 Arduino IDE 對 ESP32 進行程式設計。因此,在繼續之前,請確保您已安裝 ESP32 板插件:
- 在 Arduino IDE 中安裝 ESP32 插件
ESP32 控制數位輸出
首先,您需要將要控制的 GPIO 設定為 OUTPUT。使用 pinMode() 函數如下:
引腳模式(GPIO,輸出);
要控制數位輸出,您只需要使用 digitalWrite() 函數,該函數接受您所引用的 GPIO(整數)以及狀態(高電平或低電平)作為參數。
數位寫入(GPIO,狀態);
除 GPIO 6 至 11(連接到整合 SPI flash)和 GPIO 34、35、36 和 39(僅輸入 GPIO)外,所有 GPIO 均可用作輸出;
了解有關 ESP32 GPIO 的更多資訊:ESP32 GPIO 參考指南
ESP32 讀取數位輸入
首先,使用 pinMode() 函數將要讀取的 GPIO 設定為 INPUT,如下所示:
引腳模式(GPIO,輸入);
若要讀取數位輸入(例如按鈕),您可以使用 digitalRead() 函數,該函數會接受您所引用的 GPIO(整數)作為參數。
數位讀取(GPIO);
除 GPIO 32 至 6(連接到整合 SPI 快閃記憶體)外,所有 ESP11 GPIO 均可用作輸入。
了解有關 ESP32 GPIO 的更多資訊:ESP32 GPIO 參考指南
項目前ample
為了向您展示如何使用數位輸入和數位輸出,我們將建立一個簡單的項目amp帶有按鈕和 LED 的檔案。我們將讀取按鈕的狀態並相應地點亮 LED,如下圖所示。
所需零件
以下是建構電路所需的零件清單:
- ESP32 開發套件 V1
- 5 毫米 LED
- 220 歐姆電阻
- 按鈕
- 10k 歐姆電阻
- 麵包板
- 跳線
示意圖
在繼續之前,您需要組裝一個帶有 LED 和按鈕的電路。
我們將 LED 連接到 GPIO 5,將按鈕連接到 GPIO 4.程式碼
在arduino IDE中開啟程式碼Project_1_ESP32_Inputs_Outputs.ino程式碼如何運作
在以下兩行中,您建立變數來指派引腳:
按鈕連接到 GPIO 4,LED 連接到 GPIO 5。
接下來,您建立一個變數來儲存按鈕狀態。預設情況下,它是 0(未按下)。
int 按鈕狀態 = 0;
在 setup() 中,您將按鈕初始化為輸入,將 LED 初始化為輸出。
為此,您可以使用 pinMode() 函數來接受您所引用的引腳和模式:INPUT 或 OUTPUT。
pinMode(buttonPin, 輸入);
pinMode(ledPin, 輸出);
在loop() 中,您可以讀取按鈕狀態並相應地設定LED。
在下一行中,您讀取按鈕狀態並將其儲存在 buttonState 變數中。
正如我們之前所看到的,您使用 digitalRead() 函數。
按鈕狀態 = digitalRead(buttonPin);
以下 if 語句檢查按鈕狀態是否為 HIGH。如果是,它會使用 digitalWrite() 函數開啟 LED,該函數接受 ledPin 作為參數,且狀態為高電位。
if (按鈕狀態==高)如果按鈕狀態不是高電平,則將 LED 設定為關閉。只需在 digitalWrite() 函數中將 LOW 設定為第二個參數即可。
上傳代碼
在點擊上傳按鈕之前,請前往“工具”>“開發板”,然後選擇開發板:DOIT ESP32 DEVKIT V1 開發板。
進入工具 > 連接埠並選擇 ESP32 連接的 COM 連接埠。然後,按上傳按鈕並等待“上傳完成”訊息。注意:如果在偵錯視窗中看到很多點(connecting…__…__)並且出現「Failed to connect to ESP32: Timed out waiting for packet header」訊息,則表示您需要按 ESP32 板載 BOOT點後面的按鈕
開始出現。
示範
上傳程式碼後,測試您的電路。當您按下按鈕時,您的 LED 應該會亮起:釋放後關閉:
項目 2 ESP32 類比輸入
本專案展示如何使用 Arduino IDE 讀取 ESP32 的類比輸入。
模擬讀數對於讀取電位計或模擬感測器等可變電阻器的值非常有用。
類比輸入 (ADC)
使用 ESP32 讀取模擬值意味著您可以測量變化的體積tage 電平介於 0 V 和 3.3 V 之間。
卷tag然後將測量的 e 指定為 0 到 4095 之間的值,其中 0 V 對應於 0,3.3 V 對應於 4095。tag0 V 和 3.3 V 之間的 e 將被賦予其間對應的值。ADC 是非線性的
理想情況下,使用 ESP32 ADC 引腳時您會預期會出現線性行為。
然而,這並沒有發生。您將得到如下圖所示的行為:此行為意味著您的 ESP32 無法區分 3.3 V 和 3.2 V。
您將獲得兩個卷相同的值tages:4095。
對於非常低的體積也會發生同樣的情況tage 值:對於 0 V 和 0.1 V,您將得到相同的值:0。
AnalogRead() 函數
使用 Arduino IDE 讀取 ESP32 的類比輸入就像使用 AnalogRead() 函數一樣簡單。它接受您想要讀取的 GPIO 作為參數:
模擬讀取(GPIO);
DEVKIT V15 板(具有 1 個 GPIO 的版本)中僅提供 30 個。
抓住 ESP32 板的引腳排列並找到 ADC 引腳。這些在下圖中以紅色邊框突出顯示。這些類比輸入引腳具有 12 位元解析度。這表示當您讀取類比輸入時,其範圍可能在 0 到 4095 之間變化。
注意:使用 Wi-Fi 時不能使用 ADC2 接腳。因此,如果您使用 Wi-Fi 並且無法從 ADC2 GPIO 取得值,您可以考慮使用 ADC1 GPIO,這應該可以解決您的問題。
為了了解一切是如何連結在一起的,我們將製作一個簡單的 example 從電位計讀取模擬值。
所需零件
對於這個前任ample,您需要以下部分:
- ESP32 DEVKIT V1 板
- 電位器
- 麵包板
- 跳線
概要
將電位計連接到 ESP32。電位器中間接腳應連接到GPIO 4。程式碼
我們將使用 Arduino IDE 對 ESP32 進行編程,因此請確保您在繼續之前安裝了 ESP32 插件:(如果您已經完成此步驟,則可以跳到下一步。)
在 Arduino IDE 中安裝 ESP32 插件
在arduino IDE中開啟程式碼Project_2_ESP32_Inputs_Outputs.ino此代碼只是從電位計讀取值並將這些值列印在串行監視器中。
在程式碼中,您首先定義電位計連接到的 GPIO。在這個前amp文件,GPIO 4。在setup()中,以115200的波特率初始化串列通訊。
在loop()中,使用analogRead()函數從potPin讀取類比輸入。
最後,在串行監視器中列印從電位計讀取的值。
將提供的程式碼上傳到您的 ESP32。確保您在「工具」選單中選擇了正確的板和 COM 連接埠。
測試前任ample
上傳程式碼並按下 ESP32 重設按鈕後,以 115200 的波特率開啟序列監視器。您將獲得的最大值為 4095,最小值為 0。
總結
在本文中,您學習如何使用 ESP32 和 Arduino IDE 讀取類比輸入。總之:
- ESP32 DEVKIT V1 DOIT 板(具有 30 個引腳的版本)具有 15 個 ADC 引腳,可用於讀取類比輸入。
- 這些引腳的分辨率為 12 位,這意味著您可以獲得 0 到 4095 之間的值。
- 要讀取 Arduino IDE 中的值,只需使用 AnalogRead() 函數即可。
- ESP32 ADC 接腳不具有線性行為。您可能無法區分 0 和 0.1V,或 3.2 和 3.3V。使用 ADC 引腳時需要記住這一點。
項目3 ESP32 PWM(類比輸出)
在本教程中,我們將向您展示如何使用 Arduino IDE 透過 ESP32 產生 PWM 訊號。作為前任amp我們將建立一個簡單的電路,使用 ESP32 的 LED PWM 控制器對 LED 進行調光。ESP32 LED PWM 控制器
ESP32 具有 LED PWM 控制器,具有 16 個獨立通道,可配置為產生具有不同屬性的 PWM 訊號。
使用 Arduino IDE 透過 PWM 對 LED 進行調光時必須遵循以下步驟:
- 首先,您需要選擇一個 PWM 通道。從 16 到 0 有 15 個通道。
- 然後,您需要設定 PWM 訊號頻率。對於 LED,使用 5000 Hz 的頻率就可以了。
- 您還需要設定訊號的佔空比解析度:解析度為 1 到 16 位元。我們將使用 8 位元分辨率,這意味著您可以使用 0 到 255 之間的值來控制 LED 亮度。
- 接下來,您需要指定訊號將出現在哪個 GPIO 上。為此,您將使用以下函數:
ledcAttachPin(GPIO,通道)
此函數接受兩個參數。第一個是輸出訊號的 GPIO,第二個是產生訊號的通道。 - 最後,若要使用 PWM 控制 LED 亮度,請使用下列函數:
ledcWrite(通道,佔空比)
此函數接受產生 PWM 訊號的通道和占空比作為參數。
所需零件
要完成本教程,您需要以下部件:
- ESP32 DEVKIT V1 板
- 5mm LED
- 220 歐姆電阻
- 麵包板
- 跳線
概要
將 LED 連接到 ESP32,如下圖所示。 LED 應連接到 GPIO 4.筆記: 您可以使用任何您想要的引腳,只要它可以充當輸出即可。所有可作為輸出的引腳均可用作 PWM 引腳。有關 ESP32 GPIO 的更多信息,請閱讀:ESP32 引腳分配參考:您應該使用哪些 GPIO 引腳?
程式碼
我們將使用 Arduino IDE 對 ESP32 進行編程,因此請確保您在繼續之前安裝了 ESP32 插件:(如果您已經完成此步驟,則可以跳到下一步。)
在 Arduino IDE 中安裝 ESP32 插件
在arduino IDE中開啟程式碼Project_3_ESP32_PWM.ino首先定義 LED 所連接的接腳。在本例中,LED 連接到 GPIO 4。
然後,設定 PWM 訊號屬性。您定義 5000 Hz 的頻率,選擇通道 0 來產生訊號,並將解析度設為 8 位元。您可以選擇與這些不同的其他屬性來產生不同的 PWM 訊號。
在 setup() 中,您需要使用先前定義的屬性來配置 LED PWM,方法是使用 ledcSetup() 函數,該函數接受 ledChannel、頻率和解析度作為參數,如下所示:
接下來,您需要選擇從中獲取訊號的 GPIO。為此,請使用 ledcAttachPin() 函數,該函數接受要獲取訊號的 GPIO 以及產生訊號的通道作為參數。在這個前amp在檔案中,我們將在 ledPin GPIO 中取得訊號,對應於 GPIO 4。
在循環中,您將在 0 到 255 之間改變佔空比以增加 LED 亮度。
然後,在255和0之間降低亮度。
要設定 LED 的亮度,您只需使用 ledcWrite() 函數,該函數接受產生訊號的通道和占空比作為參數。
由於我們使用 8 位元分辨率,因此將使用 0 到 255 之間的值來控制佔空比。
測試前任ample
將程式碼上傳到您的 ESP32。確保您選擇了正確的板和 COM 連接埠。看看你的電路。您應該有一個調光 LED 來增加和減少亮度。
項目 4 ESP32 PIR 運動感測器
此專案展示如何使用 PIR 運動感測器透過 ESP32 來偵測運動。
HC-SR501 運動感測器的工作原理
.HC-SR501感測器的工作原理是基於運動物體上紅外線輻射的變化。
- 物體以紅外線方式發射。
- 物體正在移動或搖晃
所以:
如果物體正在發射紅外線但沒有移動(例如,一個人靜止不動),則感測器不會偵測到該物體。
如果物體正在移動但不發射紅外線(例如機器人或車輛),則感測器不會偵測到該物體。
定時器簡介
在這個前amp我們還將引入計時器。我們希望 LED 在偵測到動作後保持亮起預定的秒數。我們應該使用計時器,而不是使用會阻塞程式碼並且不允許您在確定的秒數內執行任何其他操作的delay() 函數。延遲()函數
您應該熟悉delay() 函數,因為它被廣泛使用。這個功能使用起來非常簡單。它接受單一 int 數字作為參數。
該數字表示程式必須等待才能進入下一行程式碼的時間(以毫秒為單位)。當你執行delay(1000)時,你的程式會在該行停止1秒。
delay() 是一個阻塞函數。阻塞函數會阻止程式執行其他任何操作,直到該特定任務完成為止。如果需要多個任務同時發生,則不能使用delay()。
對於大多數項目,您應該避免使用延遲並使用計時器。
millis() 函數
使用名為 millis() 的函數,您可以傳回自程式首次啟動以來經過的毫秒數。為什麼這個功能有用?因為透過使用一些數學方法,您可以輕鬆驗證已經過去了多少時間,而不會阻塞您的程式碼。
所需零件
要學習本教程,您需要以下部分
- ESP32 DEVKIT V1 板
- PIR 運動感測器 (HC-SR501)
- 主動蜂鳴器
- 跳線
- 麵包板
概要筆記: 工作量tagHC-SR501的e為5V。使用 Vin 引腳為其供電。
程式碼
在繼續本教學之前,您應該在 Arduino IDE 中安裝 ESP32 插件。如果您還沒有在 Arduino IDE 上安裝 ESP32,請按照以下教學之一進行操作。
在 Arduino IDE 中安裝 ESP32 插件
在 arduino IDE 中開啟程式碼 Project_4_ESP32_PIR_Motion_Sensor.ino。
示範
將程式碼上傳到您的 ESP32 開發板。確保選擇了正確的板和 COM 連接埠。
以 115200 的波特率開啟串行監視器。將手移到 PIR 感應器前面。蜂鳴器應該打開,並且在串行監視器中會列印訊息“檢測到運動!蜂鳴器警報”。
4 秒後,蜂鳴器應關閉。
項目5 ESP32開關 Web 伺服器
在此專案中,您將建立一個獨立的 web 有 ESP32 的伺服器,使用 Arduino IDE 程式環境控制輸出(兩個 LED)。這 web 伺服器是行動響應的,可以使用本地網路上作為瀏覽器的任何設備進行存取。我們將向您展示如何創建 web 伺服器以及程式碼如何逐步工作。
項目結束view
在直接進入該專案之前,重要的是概述我們的內容 web 伺服器就可以了,這樣後面的步驟就比較容易執行。
- 這 web 您將建置的伺服器控制連接到 ESP32 GPIO 26 和 GPIO 27 的兩個 LED;
- 您可以存取ESP32 web 透過在本機網路的瀏覽器上輸入 ESP32 IP 位址來連接伺服器;
- 透過點擊您的按鈕 web 伺服器上您可以立即變更每個 LED 的狀態。
所需零件
對於本教程,您將需要以下部分:
- ESP32 DEVKIT V1 板
- 2 個 5 毫米 LED
- 2x 200 歐姆電阻
- 麵包板
- 跳線
概要
從建構電路開始。將兩個 LED 連接到 ESP32,如下圖所示 - 一個 LED 連接到 GPIO 26,另一個連接到 GPIO 27。
筆記: 我們使用 32 腳的 ESP36 DEVKIT DOIT 板。在組裝電路之前,請確保檢查您所使用的電路板的引腳排列。程式碼
這裡我們提供創建ESP32的程式碼 web 伺服器.開啟程式碼 Project_5_ESP32_Switch_Web_Server.ino 在 arduino IDE 中,但先不要上傳。您需要進行一些更改才能使其適合您。
我們將使用 Arduino IDE 對 ESP32 進行編程,因此請確保您在繼續之前安裝了 ESP32 插件:(如果您已經完成此步驟,則可以跳到下一步。)
在 Arduino IDE 中安裝 ESP32 插件
設定您的網路憑證
您需要使用您的網路憑證修改以下行:SSID 和密碼。該程式碼對您應該進行更改的位置進行了很好的註釋。上傳代碼
現在,您可以上傳程式碼和 web 伺服器將立即工作。
請依照以下步驟將程式碼上傳到 ESP32:
- 將 ESP32 板插入電腦;
- 在 Arduino IDE 中,在「工具」>「開發板」中選擇您的開發板(在我們的範例中,我們使用的是 ESP32 DEVKIT DOIT 開發板);
- 在「工具」>「連接埠」中選擇 COM 連接埠。
- 按下 Arduino IDE 中的「上傳」按鈕,等待幾秒鐘,程式碼將編譯並上傳到您的開發板。
- 等待“上傳完成”訊息。
尋找 ESP IP 位址
上傳程式碼後,以115200的波特率開啟串行監視器。按下 ESP32 EN 按鈕(重設)。 ESP32 連接到 Wi-Fi,並在序列監視器上輸出 ESP IP 位址。複製該 IP 位址,因為您需要它來存取 ESP32 web 伺服器.
訪問 Web 伺服器
要訪問 web 伺服器,開啟瀏覽器,貼上ESP32 IP位址,您將看到以下頁面。
筆記: 您的瀏覽器和 ESP32 應連接到相同 LAN。如果您查看串行監視器,您可以看到後台發生的情況。 ESP 接收來自新用戶端(在本例中為您的瀏覽器)的 HTTP 請求。
您也可以查看有關 HTTP 請求的其他資訊。
示範
現在您可以測試一下您的 web 伺服器工作正常。點選按鈕來控制 LED。同時,您可以查看序列監視器以了解後台發生的情況。對於前amp文件中,當您按一下按鈕開啟 GPIO 26 ON 時,ESP32 會收到 /26/on 上的請求 URL.
當 ESP32 收到該請求時,它會開啟連接到 GPIO 26 的 LED 並更新其狀態 web 頁。
GPIO 27 的按鈕以類似的方式運作。測試它是否正常工作。
程式碼如何運作
在本節中,我們將仔細查看程式碼以了解其工作原理。
您需要做的第一件事是包含 WiFi 庫。如前所述,您需要在以下行的雙引號內插入您的 ssid 和密碼。
然後,你設定你的 web 伺服器到連接埠 80。
以下行會建立一個變數來儲存 HTTP 請求的標頭:
接下來,您建立輔助變數來儲存輸出的目前狀態。如果要新增更多輸出並保存其狀態,則需要建立更多變數。
您還需要為每個輸出分配一個 GPIO。這裡我們使用 GPIO 26 和 GPIO 27。
設定()
現在,讓我們進入setup()。首先,我們以 115200 的波特率啟動串行通訊以進行調試。您也可以將 GPIO 定義為輸出並將它們設為低電平。
以下行使用 WiFi.begin(ssid, password) 開始 Wi-Fi 連接,等待連接成功並在序列監視器中列印 ESP IP 位址。
環形()
在loop()中,我們編程當新客戶端與客戶端建立連線時會發生什麼 web 伺服器.
ESP32 始終透過以下行監聽傳入的客戶端:當收到客戶端的請求時,我們將保存傳入的資料。只要客戶端保持連接,後面的 while 迴圈就會運作。我們不建議更改程式碼的以下部分,除非您確切知道自己在做什麼。
if 和 else 語句的下一部分檢查按下了哪個按鈕 web 頁面,並相應地控制輸出。正如我們之前所看到的,我們對不同的物件提出請求 URLs 取決於按下的按鈕。
對於前amp文件,如果您按下 GPIO 26 ON 按鈕,ESP32 會收到 /26/ON 上的請求 URL (我們可以在串行監視器上的 HTTP 標頭上看到該資訊)。因此,我們可以檢查標頭是否包含表達式 GET /26/on。如果包含,我們將output26state變數改為ON,ESP32將開啟LED。
這對於其他按鈕也同樣有效。因此,如果您想添加更多輸出,您應該修改這部分程式碼以包含它們。
顯示 HTML web 頁
您需要做的下一件事是創建 web 頁。 ESP32 將向您的瀏覽器發送回應,其中包含一些 HTML 程式碼來構建 web 頁。
這 web 使用此表達式 client.println() 將頁面傳送到客戶端。您應該輸入要傳送給客戶端的內容作為參數。
我們應該發送的第一件事始終是以下行,這表示我們正在發送 HTML。然後,下面的行使 web 頁面響應於任何 web 瀏覽器。
以下用於阻止對圖示的請求。 – 您無需擔心這一行。
造型 Web 頁
接下來,我們有一些 CSS 文字來設定按鈕和 web 頁面外觀。
我們選擇 Helvetica 字體,定義要顯示為區塊並居中對齊的內容。我們使用 #4CAF50 顏色設定按鈕樣式,無邊框,文字為白色,並使用以下填充:16px 40px。我們還將文字裝飾設為無,定義字體大小、邊距和遊標到指針。
我們也定義了第二個按鈕的樣式,其中包含我們先前定義的按鈕的所有屬性,但顏色不同。這將是關閉按鈕的樣式。
設定 Web 頁首標題
在下一行中,您可以設定第一個標題 web 頁。這裡我們有「ESP32 Web 伺服器”,但您可以將此文字變更為您喜歡的任何內容。顯示按鈕及對應狀態
然後,您編寫一段內容來顯示 GPIO 26 目前狀態。正如您所看到的,我們使用了output26State變量,以便當該變數發生變化時狀態立即更新。然後,我們根據 GPIO 的當前狀態顯示開啟或關閉按鈕。如果 GPIO 的目前狀態為關閉,則顯示 ON 按鈕,如果不是,則顯示 OFF 按鈕。
我們對 GPIO 27 使用相同的過程。
關閉連接
最後,當回應結束時,我們清除 header 變量,並使用 client.stop() 停止與客戶端的連線。
總結
在本教程中,我們向您展示如何構建 web 使用 ESP32 的伺服器。我們向您展示了一個簡單的前任amp控制兩個 LED 的文件,但其想法是用繼電器或您想要控制的任何其他輸出來替換這些 LED。
項目 6 RGB LED Web 伺服器
在此專案中,我們將向您展示如何使用 ESP32 板遠端控制 RGB LED web 帶有顏色選擇器的伺服器。
項目結束view
在開始之前,讓我們看看這個專案是如何運作的:
- ESP32 web 伺服器顯示一個顏色選擇器。
- 當您選擇顏色時,您的瀏覽器會發出請求 URL 包含所選顏色的 R、G 和 B 參數。
- 您的 ESP32 接收請求並拆分每個顏色參數的值。
- 然後,它將具有相應值的 PWM 訊號傳送到控制 RGB LED 的 GPIO。
RGB LED 的工作原理是什麼?
在共陰極 RGB LED 中,所有三個 LED 共用一個負極連接(陰極)。如何創造不同的顏色?
當然,使用 RGB LED,您可以產生紅光、綠光和藍光,並且透過配置每個 LED 的強度,您還可以產生其他顏色。
對於前amp例如,要產生純藍光,您可以將藍色 LED 設定為最高強度,將綠色和紅色 LED 設定為最低強度。對於白光,您可以將所有三個 LED 都設定為最高強度。
混合顏色
要產生其他顏色,您可以以不同的強度組合三種顏色。若要調整每個 LED 的強度,您可以使用 PWM 訊號。
由於 LED 彼此非常接近,我們的眼睛看到的是顏色組合的結果,而不是單獨的三種顏色。
若要了解如何組合顏色,請查看下圖。
這是最簡單的顏色混合表,但可以讓您了解它的工作原理以及如何產生不同的顏色。所需零件
對於這個項目,您需要以下部件:
- ESP32 DEVKIT V1 板
- RGB LED
- 3x 220 歐姆電阻
- 跳線
- 麵包板
概要程式碼
我們將使用 Arduino IDE 對 ESP32 進行編程,因此請確保您在繼續之前安裝了 ESP32 插件:(如果您已經完成此步驟,則可以跳到下一步。)
- 在 Arduino IDE 中安裝 ESP32 插件
電路組裝好後,開啟程式碼
項目_6_RGB_LED_Webarduino IDE 中的_Server.ino。
上傳程式碼之前,請不要忘記插入您的網路憑證,以便 ESP 可以連接到您的本機網路。程式碼如何運作
ESP32 草圖使用 WiFi.h 函式庫。以下行定義字串變數來保存請求中的 R、G 和 B 參數。
接下來的四個變數稍後用於解碼 HTTP 請求。
為 GPIO 建立三個變量,用於控制條帶 R、G 和 B 參數。在本例中,我們使用 GPIO 13、GPIO 12 和 GPIO 14。
這些GPIO需要輸出PWM訊號,所以我們需要先配置PWM屬性。將 PWM 訊號頻率設定為 5000 Hz。然後,為每種顏色關聯一個 PWM 通道
最後,將 PWM 通道的解析度設定為 8 位
在 setup() 中,將 PWM 屬性指派給 PWM 通道
將 PWM 通道連接到相應的 GPIO
以下程式碼部分顯示了您的顏色選擇器 web 頁面並根據您選擇的顏色提出請求。
當您選擇顏色時,您會收到以下格式的請求。
因此,我們需要拆分該字串以獲得 R、G 和 B 參數。這些參數保存在 redString、greenString 和 blueString 變數中,並且可以具有 0 到 255 之間的值。若要使用 ESP32 控制燈帶,請使用 ledcWrite() 函數產生 PWM 訊號,其中包含從 HTTP 解碼的值 要求。
筆記: 了解有關 ESP32 PWM 的更多資訊:專案 3 ESP32 PWM(類比輸出)
要使用 ESP8266 控制條帶,我們只需要使用
AnalogWrite() 函數使用從 HTTPP 請求解碼的值產生 PWM 訊號。
AnalogWrite(redPin, redString.toInt());
AnalogWrite(greenPin, greenString.toInt());
AnalogWrite(bluePin, blueString.toInt())
因為我們取得字串變數中的值,所以需要使用 toInt() 方法將它們轉換為整數。
示範
插入網路憑證後,選擇正確的板和 COM 連接埠並將程式碼上傳到 ESP32。
上傳後,以 115200 的波特率開啟串列監視器,然後按 ESP 啟用/重設按鈕。您應該獲得主機板的 IP 位址。開啟瀏覽器並輸入 ESP IP 位址。現在,使用顏色選擇器選擇 RGB LED 的顏色。
然後,您需要按“更改顏色”按鈕以使顏色生效。若要關閉 RGB LED,請選擇黑色。
最強的顏色(位於顏色選擇器的頂部)會產生更好的結果。
項目7 ESP32繼電器 Web 伺服器
將繼電器與 ESP32 結合使用是遠端控制交流家用電器的好方法。本教學介紹如何使用 ESP32 控制繼電器模組。
我們將了解繼電器模組的工作原理、如何將繼電器連接到 ESP32 並建造一個 web 伺服器遠端控制繼電器。
繼電器簡介
繼電器是一種電動開關,與任何其他開關一樣,它可以打開或關閉,讓電流通過或不通過。可以用低音量控制tages,就像 ESP3.3 GPIO 提供的 32V 一樣,讓我們可以控制高電壓tag例如 12V、24V 或市電電壓tage(歐洲為 230V,美國為 120V)。左側有兩組三個插座,用於連接高電壓tages,以及右側的腳位(低電壓tage) 連接到 ESP32 GPIO。
電源音量tag電子連接上圖中所示的繼電器模組有兩個連接器,每個連接器有三個插座:公共端 (COM)、常閉 (NC) 和常開 (NO)。
- COM:連接您要控制的電流(市電音量tage)。
- NC(常閉):當您希望繼電器預設為關閉時,請使用常閉配置。 NC 和 COM 引腳已連接,這表示電流正在流動,除非您從 ESP32 向繼電器模組發送訊號以開啟電路並停止電流流動。
- NO(常開):常開配置的工作方式相反:NO 和 COM 引腳之間沒有連接,因此電路會斷開,除非您從 ESP32 發送訊號來關閉電路。
控制引腳低容量tage 側有一組四個引腳和一組三個引腳。第一組包括為模組供電的 VCC 和 GND,以及分別控制底部和頂部繼電器的輸入 1 (IN1) 和輸入 2 (IN2)。
如果您的繼電器模組只有一個通道,則您將只有一個 IN 引腳。如果您有四個通道,則將有四個 IN 引腳,依此類推。
發送到 IN 引腳的訊號決定繼電器是否處於活動狀態。當輸入電壓低於約 2V 時,繼電器被觸發。這意味著您將遇到以下場景:
- 常閉配置 (NC):
- 高訊號 – 電流正在流動
- 低訊號 – 電流不流動
- 常開配置(NO):
- 高訊號 – 電流不流動
- 低訊號 – 電流流動
當電流大部分時間都在流動並且您只想偶爾停止電流時,您應該使用常閉配置。
當您希望電流偶爾流動時(例如ample,打開alamp 偶爾)。
電源選擇第二組接腳由 GND、VCC 和 JD-VCC 接腳組成。
JD-VCC 接腳為繼電器的電磁體供電。注意模組有一個跳線帽連接VCC和JD-VCC引腳;這裡顯示的是黃色,但你的可能是不同的顏色。
打開跳線帽後,VCC 和 JD-VCC 接腳已連接。這意味著繼電器電磁鐵直接由 ESP32 電源引腳供電,因此繼電器模組和 ESP32 電路在物理上並未相互隔離。
如果沒有跳線帽,則需要提供獨立的電源,透過JD-VCC引腳為繼電器的電磁鐵供電。此配置透過模組的內建光耦合器將繼電器與 ESP32 物理隔離,從而防止電尖峰出現時損壞 ESP32。
概要警告: 使用高容量tag電源可能會造成嚴重傷害。
因此,使用 5mm LED 代替高電源電壓tag實驗中的 e 燈泡。如果您不熟悉電源音量tag請詢問可以幫助您的人。在對 ESP 進行編程或對電路進行接線時,請確保所有設備已與主電源斷開tage.安裝 ESP32 庫
為了建構這個 web 伺服器,我們使用ESPAsyncWeb伺服器庫和AsyncTCP 庫。
安裝ESPAsyncWeb伺服器庫
請依照以下步驟安裝 ESPA同步Web伺服器 圖書館:
- 按此下載 ESPAsyncWeb伺服器庫。你應該有
下載資料夾中的 .zip 資料夾 - 解壓縮 .zip 資料夾,您應該會得到 ESPAsyncWeb伺服器主資料夾
- 從 ESPAsync 重新命名您的資料夾Web伺服器主機控製到 ESPAsyncWeb伺服器
- 移動 ESPAsyncWebServer 資料夾到 Arduino IDE 安裝庫資料夾
或者,在 Arduino IDE 中,您可以前往 Sketch > Include
庫 > 新增 .ZIP 庫...並選擇您剛下載的庫。
安裝 ESP32 的 AsyncTCP 庫
這 ESPA同步Web伺服器 圖書館需要 異步TCP 圖書館去工作。跟隨
安裝該庫的後續步驟:
- 按一下此處下載 AsyncTCP 庫。您的下載資料夾中應該有一個 .zip 資料夾
- 解壓縮 .zip 資料夾,您應該得到 AsyncTCP-master 資料夾
1. 將資料夾從 AsyncTCP-master 重新命名為 AsyncTCP
3. 將 AsyncTCP 資料夾移至 Arduino IDE 安裝庫資料夾
4.最後,重新打開你的Arduino IDE
或者,在 Arduino IDE 中,您可以前往 Sketch > Include
庫 > 新增 .ZIP 庫...並選擇您剛下載的庫。
程式碼
我們將使用 Arduino IDE 對 ESP32 進行編程,因此請確保您在繼續之前安裝了 ESP32 插件:(如果您已經完成此步驟,則可以跳到下一步。)
在 Arduino IDE 中安裝 ESP32 插件
安裝所需的庫後,開啟程式碼Project_7_ESP32_Relay_Webarduino IDE 中的_Server.ino。
上傳程式碼之前,請不要忘記插入您的網路憑證,以便 ESP 可以連接到您的本機網路。示範
進行必要的變更後,將程式碼上傳到您的 ESP32。
以 115200 的波特率打開串行監視器,然後按 ESP32 EN 按鈕獲取其 IP 位址。 web 伺服器.
以 115200 的波特率打開串行監視器,然後按 ESP32 EN 按鈕獲取其 IP 位址。 web 伺服器.筆記: 您的瀏覽器和 ESP32 應連接到相同 LAN。
您應該得到如下內容,其中有兩個按鈕與您在程式碼中定義的繼電器數量相同。現在,您可以使用智慧型手機上的按鈕來控制繼電器。
Project_8_Output_State_Synchronization_ Web_伺服器
本專案展示如何使用控制 ESP32 或 ESP8266 輸出 web 伺服器和實體按鈕同時。輸出狀態更新為 web 頁面是否透過實體按鈕或 web 伺服器.
項目結束view
讓我們快速了解一下該專案的運作方式。ESP32 或 ESP8266 託管 web 伺服器允許您控制輸出的狀態;
- 目前輸出狀態顯示在 web 服務器;
- ESP 也連接到控制相同輸出的實體按鈕;
- 如果使用實體按鈕變更輸出狀態,其目前狀態也會在 web 伺服器.
總之,該項目允許您使用 web 伺服器和按鈕同時進行。每當輸出狀態改變時, web 伺服器已更新。
所需零件
以下是建構電路所需的零件清單:
- ESP32 DEVKIT V1 板
- 5 毫米 LED
- 220歐姆電阻
- 按鈕
- 10k 歐姆電阻
- 麵包板
- 跳線
概要安裝 ESP32 庫
為了建構這個 web 伺服器,我們使用ESPAsyncWeb伺服器庫和AsyncTCP庫。
安裝ESPAsyncWeb伺服器庫
請依照下列步驟安裝 ESPAsyncWeb伺服器庫:
- 按此下載 ESPAsyncWeb伺服器庫。你應該有
下載資料夾中的 .zip 資料夾 - 解壓縮 .zip 資料夾,您應該會得到 ESPAsyncWeb伺服器主資料夾
- 從 ESPAsync 重新命名您的資料夾Web伺服器主機控製到 ESPAsyncWeb伺服器
- 移動 ESPAsyncWebServer 資料夾到 Arduino IDE 安裝庫資料夾
或者,在 Arduino IDE 中,您可以前往 Sketch > Include
庫 > 新增 .ZIP 庫...並選擇您剛下載的庫。
安裝 ESP32 的 AsyncTCP 庫
ESPA同步Web伺服器庫需要 AsyncTCP 庫才能運作。請依照以下步驟安裝該程式庫:
- 按一下此處下載 AsyncTCP 庫。您的下載資料夾中應該有一個 .zip 資料夾
- 解壓縮 .zip 資料夾,您應該得到 AsyncTCP-master 資料夾
- 將資料夾從 AsyncTCP-master 重新命名為 AsyncTCP
- 將 AsyncTCP 資料夾移至 Arduino IDE 安裝庫資料夾
- 最後,重新打開你的Arduino IDE
或者,在 Arduino IDE 中,您可以前往 Sketch > Include
庫 > 新增 .ZIP 庫...並選擇您剛下載的庫。
程式碼
我們將使用 Arduino IDE 對 ESP32 進行編程,因此請確保您在繼續之前安裝了 ESP32 插件:(如果您已經完成此步驟,則可以跳到下一步。)
在 Arduino IDE 中安裝 ESP32 插件
安裝所需的庫後,開啟程式碼
Project_8_Output_State_Synchronization_Webarduino IDE 中的_Server.ino。
上傳程式碼之前,請不要忘記插入您的網路憑證,以便 ESP 可以連接到您的本機網路。
程式碼如何運作
按鈕狀態和輸出狀態
ledState 變數保存 LED 輸出狀態。預設情況下,當 web 伺服器啟動,它是低電平。
ButtonState 和lastButtonState 用於偵測按鈕是否被按下。按鈕 (web 服務器)
我們沒有包含用於在 index_html 變數上建立按鈕的 HTML。
這是因為我們希望能夠根據當前 LED 狀態來更改它,而當前 LED 狀態也可以透過按鈕進行更改。
因此,我們為按鈕 %BUTTONPLACEHOLDER% 創建了一個佔位符,該佔位符將替換為 HTML 文本,以便稍後在程式碼中建立按鈕(這是在 handler() 函數中完成的)。處理器()
handler() 函數將 HTML 文字上的任何占位符替換為實際值。首先,它檢查 HTML 文字是否包含任何
佔位符%BUTTONPLACEHOLDER%。然後,呼叫傳回目前輸出狀態的outputState()函數。我們將其保存在 outputStateValue 變數中。
之後,使用該值建立 HTML 文字以顯示具有正確狀態的按鈕:
更改輸出狀態的 HTTP GET 請求 (JavaScript)
當您按下按鈕時,將呼叫toggleCheckbox() 函數。此函數將向不同的物件發出請求 URLs 開啟或關閉 LED。要開啟 LED,它會向 /update?state=1 發出請求 URL:
否則,它會在 /update?state=0 上發出請求 URL.
更新狀態的 HTTP GET 請求 (JavaScript)
保持輸出狀態更新 web 伺服器,我們呼叫以下函數在 /state 上發出新請求 URL 每一秒。處理請求
然後,我們需要處理當 ESP32 或 ESP8266 收到這些請求時會發生什麼 URLs.
當根/上收到請求時URL,我們發送 HTML 頁面以及處理器。以下行檢查您是否收到了 /update?state=1 或 /update?state=0 上的請求 URL 並相應地改變 ledState 。
當 /state 收到請求時 URL,我們發送當前的輸出狀態:
環形()
在loop()中,我們對按鈕進行去抖處理,並根據ledState的值開啟或關閉LED 多變的。示範
將程式碼上傳到您的 ESP32 板。
然後,以 115200 的波特率開啟序列監視器。開啟本機網路上的瀏覽器,然後鍵入 ESP IP 位址。您應該有權訪問 web 伺服器如下圖。
筆記: 您的瀏覽器和 ESP32 應連接到相同 LAN。您可以切換按鈕 web 伺服器開啟 LED。
您也可以使用實體按鈕控制同一個 LED。它的狀態將始終在 web 伺服器.
項目9 ESP32 DHT11 Web 伺服器
在此專案中,您將學習如何建置非同步 ESP32 web 有 DHT11 的伺服器,使用 Arduino IDE 顯示溫度和濕度。
先決條件
這 web 我們將建立的伺服器自動更新讀數,無需刷新 web 頁。
透過這個項目,您將學到:
- 如何從DHT感測器讀取溫度和濕度;
- 建構一個非同步 web 伺服器使用 ESPA同步Web伺服器庫;
- 自動更新感測器讀數,無需刷新 web 頁。
非同步 Web 伺服器
為了建立 web 我們將使用的伺服器 ESPA同步Web伺服器庫 這提供了一種構建非同步的簡單方法 web 伺服器.建構異步 web 伺服器有幾個優點tages 庫 GitHub 頁面中提到的,例如:
- 「同時處理多個連接」;
- 「當您發送回應時,您可以立即準備好處理其他連接,同時伺服器正在後台發送回應」;
- 「處理模板的簡單模板處理引擎」;
所需零件
要完成本教程,您需要以下部分:
- ESP32開發板
- DHT11 模塊
- 麵包板
- 跳線
概要安裝庫
您需要為此專案安裝幾個庫:
- 這 雙氫睪酮 和 Adafruit 統一感測器 用於從 DHT 感測器讀取的驅動程式庫。
- ESPA同步Web伺服器 和 異步TCP 建構異步的庫 web 伺服器.
請按照以下說明安裝這些庫:
安裝DHT感測器庫
要使用 Arduino IDE 讀取 DHT 感測器,您需要安裝 DHT感測器庫。請依照以下步驟安裝該庫。
- 按一下此處下載 DHT 感測器庫。您的下載資料夾中應該有一個 .zip 資料夾
- 解壓縮 .zip 資料夾,您應該得到 DHT-sensor-library-master 資料夾
- 將資料夾從 DHT-sensor-library-master 重新命名為 DHT_sensor
- 將 DHT_sensor 資料夾移至 Arduino IDE 安裝庫資料夾
- 最後,重新打開你的Arduino IDE
安裝 Adafruit 統一感測器驅動程式
您還需要安裝 Adafruit 統一感測器驅動程式庫 與 DHT 感測器配合使用。請依照以下步驟安裝該庫。
- 按此下載 Adafruit 統一感測器庫。您的下載資料夾中應該有一個 .zip 資料夾
- 解壓縮 .zip 資料夾,您應該得到 Adafruit_sensor-master 資料夾
- 將資料夾從 Adafruit_sensor-master 重新命名為 Adafruit_sensor
- 將 Adafruit_sensor 資料夾移到 Arduino IDE 安裝庫資料夾
- 最後,重新打開你的Arduino IDE
安裝ESPAsyncWeb伺服器庫
請依照以下步驟安裝 ESPA同步Web伺服器 圖書館:
- 按此下載 ESPAsyncWeb伺服器庫。你應該有
下載資料夾中的 .zip 資料夾 - 解壓縮 .zip 資料夾,您應該
取得 ESPAsyncWeb伺服器主資料夾 - 從 ESPAsync 重新命名您的資料夾Web伺服器主機控製到 ESPAsyncWeb伺服器
- 移動 ESPAsyncWebServer 資料夾到 Arduino IDE 安裝庫資料夾
安裝 ESP32 的非同步 TCP 庫
這 ESPA同步Web伺服器 圖書館需要 異步TCP 圖書館去工作。請依照以下步驟安裝該程式庫:
- 按一下此處下載 AsyncTCP 庫。您的下載資料夾中應該有一個 .zip 資料夾
- 解壓縮 .zip 資料夾,您應該得到 AsyncTCP-master 資料夾
- 將資料夾從 AsyncTCP-master 重新命名為 AsyncTCP
- 將 AsyncTCP 資料夾移至 Arduino IDE 安裝庫資料夾
- 最後,重新打開你的Arduino IDE
程式碼
我們將使用 Arduino IDE 對 ESP32 進行編程,因此請確保您在繼續之前安裝了 ESP32 插件:(如果您已經完成此步驟,則可以跳到下一步。)
在 Arduino IDE 中安裝 ESP32 插件
安裝所需的庫後,開啟程式碼
項目_9_ESP32_DHT11_Webarduino IDE 中的_Server.ino。
上傳程式碼之前,請不要忘記插入您的網路憑證,以便 ESP 可以連接到您的本機網路。程式碼如何運作
在下面的段落中,我們將解釋程式碼的工作原理。如果您想了解更多信息,請繼續閱讀或跳至演示部分以查看最終結果。
導入庫
首先,導入所需的庫。 WiFi、ESPAsyncWeb需要伺服器和 ESPAsyncTCP 來構建 web 伺服器.需要 Adafruit_Sensor 和 DHT 庫才能從 DHT11 或 DHT22 感測器讀取資料。變數定義
定義 DHT 資料引腳連接的 GPIO。在本例中,它連接到 GPIO 4。然後,選擇您正在使用的 DHT 感測器類型。在我們的前任ample,我們正在使用 DHT22。如果您使用其他類型,您只需取消註釋您的感測器並註釋所有其他類型。
使用我們之前定義的類型和引腳實例化 DHT 物件。建立非同步Web連接埠 80 上的伺服器物件。
讀取溫度和濕度函數
我們創建了兩個函數:一個用於讀取溫度 我們創建了兩個函數:一個用於讀取溫度 (readDHTTemperature()),另一個用於讀取濕度 (readDHTHumidity())。取得感測器讀數就像使用 dht 物件上的 readTemperature() 和 readHumidity() 方法一樣簡單。
我們還有一個條件,即返回兩個破折號 (-),以防感測器無法取得讀數。
讀數以字串類型傳回。若要將浮點數轉換為字串,請使用 String() 函數
預設情況下,我們讀取的溫度以攝氏度為單位。若要取得以華氏度為單位的溫度,請註解以攝氏度為單位的溫度並取消註釋以華氏度為單位的溫度,以便您得到以下結果:
上傳程式碼
現在,將程式碼上傳到您的 ESP32。確保選擇了正確的板和 COM 連接埠。
上傳後,以115200波特率開啟序列監視器。 ESP32 IP 位址應列印在序號中 監視器。示範
開啟瀏覽器並輸入 ESP32 IP 位址。你的 web 伺服器應顯示最新的感測器讀數。
筆記: 您的瀏覽器和 ESP32 應連接到相同 LAN。
請注意,溫度和濕度讀數會自動更新,無需刷新 web 頁。
Project_10_ESP32_OLED_Display
本專案展示如何使用 Arduino IDE 將 0.96 吋 SSD1306 OLED 顯示器與 ESP32 結合使用。
推出 0.96 吋 OLED 顯示器
這 OLED顯示器 我們在本教程中使用的是 SSD1306 型號:單色、0.96×128 像素的 64 吋顯示屏,如下圖所示。OLED 顯示器不需要背光,因此在黑暗環境中對比度非常好。此外,其像素僅在開啟時消耗能量,因此與其他顯示器相比,OLED 顯示器消耗的電量更少。
由於OLED顯示器採用I2C通訊協議,接線非常簡單。您可以使用下表作為參考。
OLED腳 | ESP32 |
文號 | 3.3V |
接地 | 接地 |
SCL | 通用輸入輸出口 22 |
SDA | 通用輸入輸出口 21 |
概要安裝 SSD1306 OLED 庫 – ESP32
有多個庫可用於透過 ESP32 控制 OLED 顯示器。
在本教程中,我們將使用兩個 Adafruit 庫: Adafruit_SSD1306 庫 和 Adafruit_GFX 函式庫.
請依照以下步驟安裝這些庫。
- 打開 Arduino IDE 並前往 Sketch > Include Library > Manage Libraries。圖書館管理器應該打開。
- 在搜尋框中輸入「SSD1306」並安裝 Adafruit 的 SSD1306 庫。
- 從 Adafruit 安裝 SSD1306 庫後,在搜尋框中輸入「GFX」並安裝該庫。
- 安裝庫後,重新啟動 Arduino IDE。
程式碼
安裝所需的庫後,在 arduino IDE 中開啟 Project_10_ESP32_OLED_Display.ino。程式碼
我們將使用 Arduino IDE 對 ESP32 進行編程,因此請確保您在繼續之前安裝了 ESP32 插件:(如果您已經完成此步驟,則可以跳到下一步。)
在 Arduino IDE 中安裝 ESP32 插件程式碼如何運作
導入庫
首先,您需要匯入必要的庫。使用 I2C 的 Wire 庫和寫入顯示器的 Adafruit 庫:Adafruit_GFX 和 Adafruit_SSD1306。初始化 OLED 顯示器
然後,定義 OLED 寬度和高度。在這個前amp例如,我們使用 128×64 OLED 顯示器。如果您使用其他尺寸,則可以在 SCREEN_WIDTH 和 SCREEN_HEIGHT 變數中變更該尺寸。然後,使用先前透過 I2C 通訊協定 (&Wire) 定義的寬度和高度來初始化顯示物件。
(-1) 參數表示您的 OLED 顯示器沒有 RESET 腳位。如果您的 OLED 顯示器有 RESET 引腳,則應將其連接到 GPIO。在這種情況下,您應該將 GPIO 編號作為參數傳遞。
在 setup() 中,以 115200 的波特率初始化串列監視器以進行偵錯。使用 begin() 方法初始化 OLED 顯示屏,如下所示:
如果我們無法連接到顯示器,此程式碼片段也會在串行監視器上列印一則訊息。
如果您使用不同的 OLED 顯示器,您可能需要變更 OLED 位址。在我們的例子中,位址是 0x3C。
初始化顯示後,添加兩秒的延遲,以便 OLED 在寫入文字之前有足夠的時間進行初始化:
清晰顯示、設定字體大小、顏色和書寫文本
初始化顯示後,使用clearDisplay()方法清除顯示緩衝區:
在寫入文字之前,您需要設定文字大小、顏色以及文字在 OLED 中的顯示位置。
使用 setTextSize() 方法設定字體大小:使用 setTextColor() 方法設定字體顏色:
WHITE 設定白色字體和黑色背景。
使用 setCursor(x,y) 方法定義文字開始的位置。在本例中,我們將文字設定為從左上角的 (0,0) 座標開始。最後,您可以使用 println() 方法將文字傳送到顯示器,如下所示
然後,您需要呼叫display()方法將文字實際顯示在螢幕上。
Adafruit OLED 庫提供了輕鬆滾動文字的有用方法。
- startscrollright(0x00, 0x0F): 從左到右捲動文本
- startscrollleft(0x00, 0x0F):從右向左滾動文本
- startscrolldiagright(0x00, 0x07):從左下角滾動文字到右上角startscrolldiagleft(0x00, 0x07):從右下角到左上角滾動文本
上傳程式碼
現在,將程式碼上傳到您的 ESP32。
上傳程式碼後,OLED 將顯示滾動文字。
文件/資源
![]() |
LAFVIN ESP32 基本入門套件 [pdf] 使用說明書 ESP32 基本入門套件、ESP32、基本入門套件、入門套件 |