介绍
ESP32-C3 Super Mini开发板,基于ESP32-C3 RISC-V单核160MHz处理器,4MB Flash,400KB SRAM,WiFi+BLE 5.0,尺寸仅22×18mm(比Nano更小),Type-C接口,兼容Arduino IDE和MicroPython。极致小巧低成本,适合空间极度受限的IoT项目。引脚兼容面包板,性价比极高
ESP32-C3 Super Mini开发板,基于ESP32-C3 RISC-V单核160MHz处理器,4MB Flash,400KB SRAM,WiFi+BLE 5.0,尺寸仅22×18mm(比Nano更小),Type-C接口,兼容Arduino IDE和MicroPython。极致小巧低成本,适合空间极度受限的IoT项目。引脚兼容面包板,性价比极高
| 参数 | 值 |
|---|---|
| I2C | 1路 |
| SPI | 1路 |
| SRAM | 400KB |
| Flash | 4MB(SPI) |
| 串口 | 1路硬UART |
| 内核 | RISC-V 32位 单核 160MHz |
| 尺寸 | 22.5mm×18mm |
| 无线 | WiFi 802.11 b/g/n + BLE 5.0 |
| 特色 | 极致小巧,RISC-V架构,超低成本 |
| 重量 | 约3g |
| 数字IO | 12路(PWM全部) |
| USB接口 | USB Type-C(内置USB-CDC/JTAG) |
| 主控芯片 | ESP32-C3 (Espressif) |
| 工作电压 | 3.3V(逻辑),5V(USB输入) |
| 模拟输入 | 6路(12位ADC) |
| 输入电压 | 5V(Type-C) |
# ESP32-C3 Super Mini 代码例程
## 例程 1:WiFi 扫描 + 连接
```cpp
// ESP32-C3 Super Mini - WiFi 扫描与连接
// 开发板选择: Tools → Board → ESP32C3 Dev Module
// USB CDC On Boot: Enabled
#include <WiFi.h>
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("\n=== ESP32-C3 Super Mini WiFi Demo ===");
Serial.printf("Chip: %s rev.%d\n", ESP.getChipModel(), ESP.getChipRevision());
Serial.printf("Flash: %d MB\n", ESP.getFlashChipSize() / (1024*1024));
Serial.printf("Free Heap: %d KB\n\n", ESP.getFreeHeap() / 1024);
// 扫描 WiFi
Serial.println("Scanning WiFi networks...");
int n = WiFi.scanNetworks();
for (int i = 0; i < n; i++) {
Serial.printf("%2d: %-20s RSSI:%d dBm %s\n",
i+1,
WiFi.SSID(i).c_str(),
WiFi.RSSI(i),
WiFi.encryptionType(i) == WIFI_AUTH_OPEN ? "(open)" : "");
}
Serial.printf("Found %d networks.\n\n", n);
// 连接 WiFi(填入你的凭据)
// WiFi.begin("YOUR_SSID", "YOUR_PASS");
// while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
// Serial.println("\nConnected!");
// Serial.println(WiFi.localIP());
}
void loop() {
delay(10000);
}
```
---
## 例程 2:BLE 温湿度广播
```cpp
// ESP32-C3 Super Mini - BLE 环境监测广播
#include <BLEDevice.h>
#include <BLEAdvertising.h>
// 环境传感服务 UUID(标准)
#define ENV_SERVICE_UUID "181A"
void setup() {
Serial.begin(115200);
BLEDevice::init("C3-Sensor");
BLEServer *pServer = BLEDevice::createServer();
// 创建广播数据(Manufacturer Data)
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
// 模拟传感器数据
int16_t temp = 2530; // 25.30°C(×100)
int16_t hum = 5820; // 58.20%(×100)
BLEAdvertisementData advData;
advData.setFlags(0x06); // 通用发现 + BR/EDR 不支持
advData.setName("C3-Sensor");
// 自定义制造商数据
uint8_t mfgData[] = {
0x01, // 版本
(uint8_t)(temp & 0xFF), // 温度低字节
(uint8_t)(temp >> 8), // 温度高字节
(uint8_t)(hum & 0xFF), // 湿度低字节
(uint8_t)(hum >> 8), // 湿度高字节
};
advData.setManufacturerData("ESP32C3", mfgData, sizeof(mfgData));
pAdvertising->setAdvertisementData(advData);
pAdvertising->start();
Serial.println("BLE Advertising started.");
Serial.printf("Temperature: %.2f°C\n", temp / 100.0f);
Serial.printf("Humidity: %.2f%%\n", hum / 100.0f);
}
void loop() {
// 更新广播数据
delay(5000);
// 可在此更新传感器值并重新配置广播
BLEAdvertising *pAdv = BLEDevice::getAdvertising();
// ... 更新 advData
}
```
---
## 例程 3:RGB LED 渐变(IO8)
```cpp
// ESP32-C3 Super Mini - RGB LED 控制(IO8)
// 多数批次板载蓝色 LED 或 WS2812
// 方案A:普通单色 LED(PWM 渐变)
#if 0
void setup() {
pinMode(8, OUTPUT);
ledcAttachPin(8, 0);
ledcSetup(0, 5000, 8); // 通道0, 5kHz, 8位
}
void loop() {
for (int duty = 0; duty <= 255; duty++) {
ledcWrite(0, duty);
delay(5);
}
for (int duty = 255; duty >= 0; duty--) {
ledcWrite(0, duty);
delay(5);
}
}
#endif
// 方案B:WS2812 智能 LED(部分批次)
#include <Adafruit_NeoPixel.h>
#define LED_PIN 8
Adafruit_NeoPixel pixel(1, LED_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
pixel.begin();
pixel.setBrightness(20);
}
void loop() {
// 彩虹色
for (long hue = 0; hue < 65536; hue += 256) {
pixel.setPixelColor(0, pixel.gamma32(pixel.ColorHSV(hue)));
pixel.show();
delay(10);
}
}
```
---
## 例程 4:低功耗数据采集器
```cpp
// ESP32-C3 Super Mini - 超低功耗周期采集
// 深度睡眠 → 定时唤醒 → 采集 → WiFi发送 → 继续睡眠
#include <WiFi.h>
#include <esp_sleep.h>
#define SLEEP_MINUTES 5
const char* ssid = "YOUR_SSID";
const char* pass = "YOUR_PASSWORD";
// RTC 内存(深度睡眠保留)
RTC_DATA_ATTR int wakeCount = 0;
void setup() {
Serial.begin(115200);
wakeCount++;
Serial.printf("\n=== Wake #%d ===\n", wakeCount);
// 1. 读取传感器
int adc = analogRead(0); // IO0 / ADC1_CH0
float voltage = adc * (3.3f / 4095.0f);
Serial.printf("ADC: %d → %.3fV\n", adc, voltage);
// 2. 连接 WiFi 并发送数据
WiFi.begin(ssid, pass);
int timeout = 0;
while (WiFi.status() != WL_CONNECTED && timeout < 50) {
delay(200);
timeout++;
Serial.print(".");
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nWiFi OK. Sending data...");
// 发送 HTTP POST / MQTT publish(略)
// ...
Serial.println("Data sent.");
} else {
Serial.println("\nWiFi failed, going back to sleep.");
}
// 3. 进入深度睡眠
Serial.printf("Sleeping for %d minutes...\n", SLEEP_MINUTES);
Serial.flush();
esp_sleep_enable_timer_wakeup(SLEEP_MINUTES * 60ULL * 1000000ULL);
esp_deep_sleep_start();
}
void loop() {
// 永远不会执行
}
```
---
## 例程 5:WebSocket 实时仪表板
```cpp
// ESP32-C3 Super Mini - WebSocket 实时数据推送
// 浏览器打开 http://<IP> 查看实时 ADC 数值
#include <WiFi.h>
#include <WebServer.h>
#include <WebSocketsServer.h>
const char* ssid = "YOUR_SSID";
const char* pass = "YOUR_PASSWORD";
WebServer server(80);
WebSocketsServer ws(81);
// HTML 页面
const char* htmlPage = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>ESP32-C3 Dashboard</title>
<style>
body{font-family:Arial;text-align:center;margin:20px;}
.meter{width:200px;height:200px;border-radius:50%;
background:conic-gradient(#4CAF50 0deg,#ddd 0deg);margin:20px auto;}
.val{font-size:48px;font-weight:bold;margin-top:-130px;color:#333;}
</style>
</head>
<body>
<h1>ESP32-C3 Super Mini</h1>
<div class="meter" id="meter"></div>
<p class="val" id="value">0</p>
<p>ADC IO0: <span id="raw">0</span></p>
<script>
var ws=new WebSocket('ws://'+location.hostname+':81/');
ws.onmessage=function(e){
var d=JSON.parse(e.data);
var deg=d.adc/4095*360;
document.getElementById('meter').style.background=
'conic-gradient(#4CAF50 '+deg+'deg, #ddd '+deg+'deg)';
document.getElementById('value').textContent=(d.adc/4095*3.3).toFixed(2)+'V';
document.getElementById('raw').textContent=d.adc;
};
</script>
</body>
</html>
)rawliteral";
void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t len) {
// 不需要处理客户端消息
}
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
Serial.println("\nWiFi OK");
Serial.print("Dashboard: http://");
Serial.println(WiFi.localIP());
server.on("/", []() { server.send(200, "text/html", htmlPage); });
server.begin();
ws.begin();
ws.onEvent(webSocketEvent);
}
void loop() {
server.handleClient();
ws.loop();
static unsigned long last = 0;
if (millis() - last > 100) {
last = millis();
int adc = analogRead(0);
char buf[32];
snprintf(buf, 32, "{\"adc\":%d}", adc);
ws.broadcastTXT(buf);
}
}
```
> **编译提示**:Arduino IDE → `Tools → Board → ESP32C3 Dev Module`,设置 `USB CDC On Boot: Enabled`、`Flash Size: 4MB`。需安装 `WebSockets` 库 by Markus Sattler。
暂无参考文献