文章目录
Seeed Studio 简介
Seeed Studio是一家开源硬件创新实验室,致力于将硬件创新变得更加简单、高效、低成本。我们的产品涵盖了Arduino、Raspberry Pi、Micro:bit等开源硬件平台,以及各种传感器、执行器、电机、电子模块等,广泛应用于物联网、机器人、智能家居、工业自动化等领域。
Seeed Studio 官网
Seeed Studio 文档
Arduino 开发板管理器地址
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json
开发板选择 XIAO_ESP32C3
擦除Flash(非必要操作)
# 查看串口端口
ls /dev/cu.*
# 安装依赖
pip install esptool
pip install pyserial
# 擦除Flash,要先按Boot键再连接USB
esptool.py --port /dev/cu.usbmodem14101 erase_flash
注意:需要先按住主板上的 Boot 键再连接USB进入下载模式,注意下载期间手不要松开直到烧录完。
烧录程序
每次烧录都需要先按住主板上的 Boot 键再连接USB进入下载模式,注意下载期间手不要松开直到烧录完。MAC 环境连接上USB后串口号可能会发生变化,最好重新选择串口后再编译烧录。
串口示例
String serialBuffer = "";
void setup() {
Serial.begin(115200);
Serial.println("ESP32-Serial:connection successful,baud 115200");
}
void loop() {
while (Serial.available()) {
char c = Serial.read();
serialBuffer += c;
delay(2);
}
if (serialBuffer.length() > 0) {
Serial.println("ESP32-Serial:" + serialBuffer);
serialBuffer = "";
}
delay(20);
}
EEPROM
- begin()方法用定义好的命名空间打开一个“存储空间”。false参数意味着我们将在读/写模式下使用它。使用true以只读模式打开或创建命名空间。
preferences.begin("my-app", false);
- clear()来清除打开的命名空间下的所有首选项(它不会删除命名空间)
preferences.clear();
- remove()从打开的命名空间中删除一个键
preferences.remove(key);
- end() 方法关闭打开的命名空间下的首选项
preferences.end();
-
根据要保存的变量类型,你应该使用不同的方法。写入和读取的数据类型应该是相同的。
char、Uchar、short、Ushort、int、Uint、long、Ulong、long64、Ulong64、float、double、bool、string 和 bytes -
完全擦除并重新格式化偏好设置使用的NVS内存
#include <nvs_flash.h>
void setup() {
nvs_flash_erase(); // erase the NVS partition and...
nvs_flash_init(); // initialize the NVS partition.
while(true);
}
void loop() {
}
在运行上述代码后,你应该立即下载一个新的sketch到你的板上,否则每次启动NVS分区时,它都会重新格式化。
#include <Preferences.h>
Preferences preferences;
void setup() {
// 串口
Serial.begin(115200);
// 保存
preferences.begin("namespace", false);
preferences.putString("ssid", "test");
preferences.putString("password", "123456");
preferences.end();
Serial.println("save data");
// 读取
Serial.println("read data");
preferences.begin("namespace", false);
String ssid = preferences.getString("ssid", "");
String password = preferences.getString("password", "");
preferences.end();
}
void loop() {
}
蓝牙示例
扫描蓝牙设备
使用XIAO ESP32C3扫描它周围可用的蓝牙设备。
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEScan.h>
#include <BLEAdvertisedDevice.h>
int scanTime = 5; //In seconds
BLEScan* pBLEScan;
class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
void onResult(BLEAdvertisedDevice advertisedDevice) {
Serial.printf("Advertised Device: %s \n", advertisedDevice.toString().c_str());
}
};
void setup() {
Serial.begin(115200);
Serial.println("Scanning...");
BLEDevice::init("");
pBLEScan = BLEDevice::getScan(); //create new scan
pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
pBLEScan->setActiveScan(true); //active scan uses more power, but get results faster
pBLEScan->setInterval(100);
pBLEScan->setWindow(99); // less or equal setInterval value
}
void loop() {
// put your main code here, to run repeatedly:
BLEScanResults foundDevices = pBLEScan->start(scanTime, false);
Serial.print("Devices found: ");
Serial.println(foundDevices.getCount());
Serial.println("Scan done!");
pBLEScan->clearResults(); // delete results fromBLEScan buffer to release memory
delay(2000);
}
蓝牙服务器
使用XIAO ESP32C3作为蓝牙服务器。在这里,我们将使用智能手机搜索XIAO ESP32C3板,并发送字符串以显示在串行监视器上。
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
// See the following for generating UUIDs:
// https://www.uuidgenerator.net/
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
class MyCallbacks: public BLECharacteristicCallbacks {
void onWrite(BLECharacteristic *pCharacteristic) {
std::string value = pCharacteristic->getValue();
if (value.length() > 0) {
Serial.println("*********");
Serial.print("New value: ");
for (int i = 0; i < value.length(); i++)
Serial.print(value[i]);
Serial.println();
Serial.println("*********");
}
}
};
void setup() {
Serial.begin(115200);
BLEDevice::init("MyESP32");
BLEServer *pServer = BLEDevice::createServer();
BLEService *pService = pServer->createService(SERVICE_UUID);
BLECharacteristic *pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_WRITE
);
pCharacteristic->setCallbacks(new MyCallbacks());
pCharacteristic->setValue("Hello World");
pService->start();
BLEAdvertising *pAdvertising = pServer->getAdvertising();
pAdvertising->start();
}
void loop() {
// put your main code here, to run repeatedly:
delay(2000);
}
WiFI示例
扫描WiFi网络(站模式)
使用XIAO ESP32C3扫描其周围可用的WiFi网络。在这里,单板将配置为STA (Station)模式。
#include "WiFi.h"
void setup()
{
Serial.begin(115200);
// Set WiFi to station mode and disconnect from an AP if it was previously connected
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("Setup done");
}
void loop()
{
Serial.println("scan start");
// WiFi.scanNetworks will return the number of networks found
int n = WiFi.scanNetworks();
Serial.println("scan done");
if (n == 0) {
Serial.println("no networks found");
} else {
Serial.print(n);
Serial.println(" networks found");
for (int i = 0; i < n; ++i) {
// Print SSID and RSSI for each network found
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?" ":"*");
delay(10);
}
}
Serial.println("");
// Wait a bit before scanning again
delay(5000);
}
连接WiFi网络
#include <WiFi.h>
const char* ssid = "your-ssid";
const char* password = "your-password";
void setup()
{
Serial.begin(115200);
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void loop()
{
}
用作接入点
使用XIAO ESP32C3作为WiFi接入点,其他设备可以连接到它。这类似于手机的WiFi热点功能。
#include "WiFi.h"
void setup()
{
Serial.begin(115200);
WiFi.softAP("ESP_AP", "123456789");
}
void loop()
{
Serial.print("Host Name:");
Serial.println(WiFi.softAPgetHostname());
Serial.print("Host IP:");
Serial.println(WiFi.softAPIP());
Serial.print("Host IPV6:");
Serial.println(WiFi.softAPIPv6());
Serial.print("Host SSID:");
Serial.println(WiFi.SSID());
Serial.print("Host Broadcast IP:");
Serial.println(WiFi.softAPBroadcastIP());
Serial.print("Host mac Address:");
Serial.println(WiFi.softAPmacAddress());
Serial.print("Number of Host Connections:");
Serial.println(WiFi.softAPgetStationNum());
Serial.print("Host Network ID:");
Serial.println(WiFi.softAPNetworkID());
Serial.print("Host Status:");
Serial.println(WiFi.status());
delay(1000);
}