ESP32-C3 Super Mini

元器件
开发板
库存 350

介绍

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项目。引脚兼容面包板,性价比极高

规格参数

参数
I2C1路
SPI1路
SRAM400KB
Flash4MB(SPI)
串口1路硬UART
内核RISC-V 32位 单核 160MHz
尺寸22.5mm×18mm
无线WiFi 802.11 b/g/n + BLE 5.0
特色极致小巧,RISC-V架构,超低成本
重量约3g
数字IO12路(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 — 代码例程.md
# 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。

参考资料

暂无参考文献