PDD 6块钱包邮的 ESP32-C3 SuperMini 到货了,有关资料可以参考 ESP32C3SuperMini 入门 。相比nrf52840,ESP32的应用更加广泛,社区资料和支持也丰富,简单记叙用Arduino点灯过程。

在Arduino的 Boards Manager 中,输入esp32搜索,安装 by Espressif Systems 那个。装好后设置board为 Nologo ESP32C3 Super Mini和对应端口就OK。ESP32-C3 SuperMini连接到电脑后会创建2个串口,要选择 Serial Port(USB) 这个。
点灯代码如下:
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // 初始化板载LED引脚为输出模式
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // 点亮LED
delay(1000); // 延时1秒
digitalWrite(LED_BUILTIN, LOW); // 熄灭LED
delay(1000); // 延时1秒
}
代码撰写完成后点击upload即可完成烧录,不需要像之前的 SuperMini nRF52480 那样每次烧录前都得手动短接RST和GND进入DFU模式,非常便利。
另外该开发板同样支持 CircuitPython ,参见 https://circuitpython.org/board/makergo_esp32c3_supermini/ 。
补充一些代码:
扫描附近蓝牙设备:
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEScan.h>
#include <BLEAdvertisedDevice.h>
#include <Preferences.h>
Preferences preferences;
RTC_DATA_ATTR int sessionCount = 0; // 本次上电期间的计数
RTC_DATA_ATTR bool isFirstBoot = true;
int scanTime = 5; // 扫描时长(秒)
BLEScan* pBLEScan;
class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
void onResult(BLEAdvertisedDevice advertisedDevice) {
Serial.printf("发现设备: %s \n", advertisedDevice.getName().c_str());
Serial.printf("设备地址: %s \n", advertisedDevice.getAddress().toString().c_str());
Serial.printf("信号强度 (RSSI): %d dBm\n", advertisedDevice.getRSSI());
Serial.println("-----------------------");
}
};
void setup() {
Serial.begin(115200);
Serial.println("ESP32 BLE 扫描程序启动...");
BLEDevice::init("");
pBLEScan = BLEDevice::getScan(); // 创建扫描对象
pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
pBLEScan->setActiveScan(true); // 主动扫描模式,获取更多信息
pBLEScan->setInterval(100);
pBLEScan->setWindow(99); // 必须小于或等于setInterval
preferences.begin("stats", false);
int totalBootCount = preferences.getInt("total", 0);
if(isFirstBoot) {
// 冷启动:从Flash恢复数据到RTC Memory
totalBootCount++;
preferences.putInt("total", totalBootCount);
isFirstBoot = false;
}
sessionCount++;
Serial.printf("本次上电启动次数: %d\n", sessionCount);
Serial.printf("历史总启动次数: %d\n", totalBootCount);
preferences.end();
}
void loop() {
// 正确的代码:使用指针接收返回值
BLEScanResults* foundDevices = pBLEScan->start(scanTime, false);
Serial.print("发现设备数量: ");
Serial.println(foundDevices->getCount());
Serial.println("扫描结束");
pBLEScan->clearResults(); // 清空结果,为下次扫描做准备
delay(5000);
}
这段代码除了执行蓝牙扫描,还会保存并输出总启动次数。
circuitpython 安装使用可以参考
https://circuitpython.org/board/makergo_esp32c3_supermini/ https://learn.adafruit.com/circuitpython-with-esp32-quick-start/overview
https://learn.adafruit.com/circuitpython-with-esp32-quick-start/connecting-via-web-browser
https://learn.adafruit.com/circuitpython-with-esp32-quick-start/setting-up-web-workflow
由于ESP32缺少原生USB支持,所以使用上没有之前的nrf52840 supermini方便。

如上图所示,可以直接在浏览器中输入代码并执行。

通过网页也可以上传文件夹,导入库文件时很有用。
推荐阅读:Getting Started with the ESP32-C3 Super Mini
PlatformIO使用方式可以参考后续文章,个人认为比Arduino好用。