(ESP32-S3)LED 閃爍
- 取得連結
- X
- 以電子郵件傳送
- 其他應用程式
🚀 ESP32-S3 入門教學
第一個專案:LED 閃爍
📅 教學目標:
- 了解 ESP32-S3 基本結構
- 學會建立 ESP-IDF 專案
- 完成第一個 LED 閃爍程式
💡 前置準備:ESP32-S3 開發板、USB 傳輸線、ESP-IDF 開發環境
1 / 12
📋 課程大綱
- 🔧 ESP32-S3 硬體介紹
- ⚙️ ESP-IDF 開發環境
- 📁 專案資料夾結構
- 💻 主要程式碼解析
- 🔌 GPIO 控制原理
- ⏱️ FreeRTOS 延時函數
- 🔨 編譯與燒錄
- ✅ 疑難排解
- 📚 延伸學習資源
2 / 12
🔧 ESP32-S3 硬體介紹
晶片規格
| 項目 | 規格 |
|---|---|
| 處理器 | Xtensa LX7 雙核心, 240 MHz |
| Wi-Fi | 802.11 b/g/n (2.4 GHz) |
| 藍牙 | BLE 5.0 |
| GPIO | 最多 44 個 |
| SRAM | 512 KB |
| Flash | 可達 16 MB |
💡 GPIO 2 通常連接到板載 LED,是學習 GPIO 控制最好的起點!
3 / 12
⚙️ ESP-IDF 開發環境
什麼是 ESP-IDF?
ESP-IDF (Espressif IoT Development Framework) 是 Espressif 官方提供的開發框架,包含:
- 編譯工具鏈 (GCC, GDB)
- ESP-IDF API - 訪問硬體功能
- 範例程式碼
- 燒錄與除錯工具
環境安裝選項
| 方式 | 優點 | 適用場景 |
|---|---|---|
| 手動安裝 | 完全控制 | 進階用戶 |
| VS Code 擴展 | 圖形化、方便 | 初學者推薦 |
| Docker | 環境隔離 | 跨平台開發 |
4 / 12
📁 專案資料夾結構
esp-idf_project/
├── CMakeLists.txt # CMake 設定檔
├── sdkconfig # SDK 設定(晶片選擇等)
├── main/
│ ├── CMakeLists.txt # 主程式 CMake 設定
│ └── main.c # 你的程式碼在這裡!
└── build/ # 編譯產出的資料夾(自動生成)
🔑 重點:
main.c- 程式的入口點,從這裡開始學習sdkconfig- 晶片與功能設定,不需要手動修改build/- 編譯後自動產生,不要手動編輯
5 / 12
💻 主要程式碼解析
完整的 LED 閃爍程式
/* LED Blink Example - Random Nerd Tutorials */
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "sdkconfig.h"
// 定義 LED 連接的 GPIO 腳位
#define BLINK_GPIO 2
void app_main(void)
{
// 設定 GPIO 腳位
gpio_reset_pin(BLINK_GPIO);
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
// 無限迴圈:LED 閃爍
while (1) {
printf("LED ON\n");
gpio_set_level(BLINK_GPIO, 1); // 開
vTaskDelay(1000 / portTICK_PERIOD_MS);
printf("LED OFF\n");
gpio_set_level(BLINK_GPIO, 0); // 關
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
6 / 12
🔌 GPIO 控制原理
三個關鍵函數
// 1. 重置 GPIO 腳位(安全初始化)
gpio_reset_pin(BLINK_GPIO);
// 2. 設定腳位方向:輸出模式
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
// 3. 設定腳位電平:高電位(1) 或 低電位(0)
gpio_set_level(BLINK_GPIO, 1); // LED 亮
gpio_set_level(BLINK_GPIO, 0); // LED 滅
💡 GPIO 輸出原理:
- GPIO 2 連接到 LED 的陰極 (K)
- GPIO 輸出 高電位 (1) → LED 兩端無電壓差 → 不亮
- GPIO 輸出 低電位 (0) → LED 有電壓差 → 亮
⚠️ 大多數 ESP32-S3 開發板的板載 LED 是「低電位點亮」設計
7 / 12
⏱️ FreeRTOS 延時函數
精確的延時控制
// vTaskDelay 使用方式
// 參數: ticks 數量,不是毫秒!
// portTICK_PERIOD_MS 是每個 tick 的毫秒數
// 通常是 1ms(1000 Hz)
// 延時 1000 毫秒 = 1 秒
vTaskDelay(1000 / portTICK_PERIOD_MS);
// 延時 500 毫秒 = 0.5 秒
vTaskDelay(500 / portTICK_PERIOD_MS);
// 延時 100 毫秒 = 0.1 秒
vTaskDelay(100 / portTICK_PERIOD_MS);
📊 常用延時對照表:
| 延時時間 | 程式碼 |
|---|---|
| 0.5 秒 | vTaskDelay(500 / portTICK_PERIOD_MS) |
| 1 秒 | vTaskDelay(1000 / portTICK_PERIOD_MS) |
| 2 秒 | vTaskDelay(2000 / portTICK_PERIOD_MS) |
| 5 秒 | vTaskDelay(5000 / portTICK_PERIOD_MS) |
8 / 12
🔨 編譯與燒錄
指令步驟
# 1. 設定目標晶片為 ESP32-S3
idf.py set-target esp32s3
# 2. 編譯專案
idf.py build
# 3. 燒錄到開發板(自動偵測 COM 埠)
idf.py flash
# 4. 開啟序列埠監視器查看輸出
idf.py monitor
# 或者一鍵完成:燒錄 + 監視
idf.py flash monitor
💡 提示:燒錄時請按住 BOOT 按鈕,然後按一下 RESET 按鍵進入下載模式
⚠️ 常見問題:如果燒錄失敗,檢查:
- USB 傳輸線是否支援資料傳輸(非僅充電)
- 驅動程式是否正確安裝
- COM 埠號是否正確
9 / 12
✅ 疑難排解
常見問題與解決方案
| 問題 | 可能原因 | 解決方案 |
|---|---|---|
| 編譯錯誤 | sdkconfig 設定錯誤 | 刪除 build 資料夾,重新 set-target |
| 無法燒錄 | 未進入下載模式 | 按住 BOOT + 按 RESET |
| 找不到 COM 埠 | 驅動未安裝/USB 線問題 | 安裝 CH340/CP2102 驅動 |
| LED 不亮 | GPIO 腳位錯誤 | 確認開發板電路圖,確認 LED 極性 |
| monitor 無輸出 | 波特率不正確 | 確認設定為 115200 |
🔧 除錯技巧:使用 idf.py monitor 查看序列埠輸出,通常會顯示錯誤訊息
10 / 12
📚 延伸學習資源
推薦學習路徑
🎯 下一步挑戰:
- 按鈕控制 LED - 使用 GPIO 輸入,偵測按鈕按壓
- PWM 呼吸燈 - 使用 ledc 模組,實現漸明漸暗效果
- 序列通訊 - 透過 UART 與電腦通訊
- Wi-Fi 連線 - 讓 ESP32-S3 連上網路
優質學習資源
- 📖 Random Nerd Tutorials - https://RandomNerdTutorials.com/
- 📖 ESP-IDF 官方文檔 - https://docs.espressif.com/
- 📖 ESP32 (ESP-IDF) 電子書 - RandomNerdTutorials.com/esp-idf-esp32-ebook/
💡 建議:跟著範例一步步做,修改參數觀察變化,是最好的學習方式!
11 / 12
🎉 恭喜完成!
💡✨🔌
您已經學會了:
- ✅ ESP32-S3 基本架構
- ✅ ESP-IDF 專案結構
- ✅ GPIO 控制 LED
- ✅ FreeRTOS 延時函數
- ✅ 編譯、燒錄、監視流程
🚀 繼續探索,享受嵌入式開發的樂趣!
12 / 12
- 取得連結
- X
- 以電子郵件傳送
- 其他應用程式
留言
張貼留言