ESP32 开发资源大全:从入门到 IoT 项目
ESP32 是目前最流行的 IoT 开发芯片,集成了 WiFi 和蓝牙,价格低廉且性能强大。本文汇总 GitHub 上最优质的 ESP32 开发资源,帮助你快速上手 IoT 开发。
一、ESP32 官方资源
1. ESP-IDF(乐鑫官方框架)
⭐ 15k+ Stars
官方框架
C 语言
ESP32 的官方开发框架,支持 WiFi、蓝牙、GPIO、ADC、SPI、I2C 等全部外设:
# ESP-IDF 项目结构
my_project/
├── CMakeLists.txt
├── main/
│ ├── CMakeLists.txt
│ └── main.c
├── components/ # 自定义组件
└── sdkconfig # 项目配置
# 常用命令
idf.py set-target esp32
idf.py menuconfig # 配置项目
idf.py build # 编译
idf.py flash # 烧录
idf.py monitor # 串口监控
2. Arduino-ESP32
⭐ 15k+ Stars
Arduino
易上手
github.com/espressif/arduino-esp32
在 Arduino IDE 中开发 ESP32,适合快速原型验证:
// ESP32 Arduino WiFi 扫描示例
#include <WiFi.h>
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
}
void loop() {
Serial.println("Scanning WiFi networks...");
int n = WiFi.scanNetworks();
for (int i = 0; i < n; i++) {
Serial.printf("%d: %s (RSSI: %d)\n",
i+1, WiFi.SSID(i).c_str(), WiFi.RSSI(i));
}
delay(5000);
}
二、热门 ESP32 项目
3. Tasmota
⭐ 24.4k Stars
智能家居
免编程
ESP32/ESP8266 智能家居固件,刷入即用,支持 Home Assistant、MQTT:
- 支持 600+ 设备(传感器、开关、摄像头等)
- Web 界面配置,无需编程
- 支持 MQTT、HTTP、TCP 等协议
- OTA 远程升级
4. ESPHome
⭐ 8.5k Stars
YAML 配置
Home Assistant
用 YAML 配置文件生成 ESP32 固件,与 Home Assistant 无缝集成:
# ESPHome YAML 配置示例
esphome:
name: living-room-sensor
platform: ESP32
board: esp32dev
wifi:
ssid: "MyWiFi"
password: "password"
sensor:
- platform: dht
pin: GPIO4
temperature:
name: "Living Room Temperature"
humidity:
name: "Living Room Humidity"
update_interval: 30s
- platform: bmp280
i2c_id: bus_a
address: 0x76
temperature:
name: "Outdoor Temperature"
pressure:
name: "Barometric Pressure"
5. ESP32-Camera
⭐ 2.5k Stars
摄像头
视频流
github.com/espressif/esp32-camera
ESP32 摄像头驱动,支持 OV2640、OV5640 等传感器:
// ESP32-Camera 视频流服务器
#include "esp_camera.h"
#include <WiFi.h>
#include "esp_http_server.h"
// 摄像头引脚配置(AI-Thinker ESP32-CAM)
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
void setup() {
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
// ... 其他引脚配置
esp_camera_init(&config);
}
三、ESP32 传感器与模块
6. ESP32 BLE 库
⭐ 1.5k Stars
蓝牙
BLE
github.com/espressif/arduino-ble
ESP32 蓝牙低功耗(BLE)库,支持 BLE 外设和中心模式:
// ESP32 BLE 服务器示例
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
void setup() {
BLEDevice::init("ESP32-BLE");
BLEServer *pServer = BLEDevice::createServer();
BLEService *pService = pServer->createService(SERVICE_UUID);
BLECharacteristic *pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_WRITE
);
pCharacteristic->setValue("Hello World");
pService->start();
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
pAdvertising->addServiceUUID(SERVICE_UUID);
pAdvertising->start();
}
7. ESP32-MQTT
MQTT
物联网协议
ESP32 连接 MQTT 服务器,实现设备间通信:
// ESP32 MQTT 客户端
#include <WiFi.h>
#include <PubSubClient.h>
const char* ssid = "WiFi-SSID";
const char* password = "WiFi-Password";
const char* mqtt_server = "broker.hivemq.com";
WiFiClient espClient;
PubSubClient client(espClient);
void callback(char* topic, byte* payload, unsigned int length) {
String message;
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
Serial.printf("Message [%s]: %s\n", topic, message.c_str());
// 控制 LED
if (message == "ON") digitalWrite(2, HIGH);
if (message == "OFF") digitalWrite(2, LOW);
}
void setup() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(500);
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
while (!client.connected()) {
client.connect("ESP32Client");
client.subscribe("esp32/led");
}
}
void loop() {
client.loop();
// 每 5 秒发布温度数据
static unsigned long lastMsg = 0;
if (millis() - lastMsg > 5000) {
float temp = readTemperature();
char msg[10];
snprintf(msg, 10, "%.1f", temp);
client.publish("esp32/temperature", msg);
lastMsg = millis();
}
}
四、ESP32 项目灵感
| 智能家居 | 智能灯控、温湿度监测、门锁、安防摄像头 |
| 可穿戴 | 运动手环、心率监测、GPS 追踪器 |
| 工业 IoT | 设备监控、预测性维护、数据采集 |
| 农业 | 土壤监测、自动灌溉、环境控制 |
| 机器人 | 避障小车、机械臂、无人机 |
五、学习路径建议
// 推荐学习路径
1. Arduino + ESP32 基础(1-2 周)
└─ LED 控制、传感器读取、WiFi 连接
2. ESP-IDF 进阶(2-3 周)
└─ FreeRTOS 任务、低功耗模式、OTA 升级
3. IoT 协议(1-2 周)
└─ MQTT、HTTP、CoAP、WebSocket
4. 项目实战(持续)
└─ 智能家居、数据采集、远程控制
// 推荐开发板
├── ESP32-DevKitC → 入门首选($10)
├── ESP32-S3-DevKitC → AI 加速($15)
├── ESP32-CAM → 视觉项目($12)
└── ESP32-C3 → RISC-V 入门($8)
ESP32 是学习 IoT 开发的最佳起点,资源丰富、社区活跃、项目案例多。