ESP32 (XIAO-ESP32-C3)开发环境搭建

本文介绍了SeeedStudio的ESP32C3开发板,包括使用Arduino进行Flash擦除和烧录程序、串口通信、EEPROM数据存储、蓝牙设备扫描和服务器功能,以及WiFi网络的连接与AP模式设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

  1. begin()方法用定义好的命名空间打开一个“存储空间”。false参数意味着我们将在读/写模式下使用它。使用true以只读模式打开或创建命名空间。
preferences.begin("my-app", false);
  1. clear()来清除打开的命名空间下的所有首选项(它不会删除命名空间)
preferences.clear();
  1. remove()从打开的命名空间中删除一个键
preferences.remove(key);
  1. end() 方法关闭打开的命名空间下的首选项
preferences.end();
  1. 根据要保存的变量类型,你应该使用不同的方法。写入和读取的数据类型应该是相同的。
    char、Uchar、short、Ushort、int、Uint、long、Ulong、long64、Ulong64、float、double、bool、string 和 bytes

  2. 完全擦除并重新格式化偏好设置使用的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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逢生博客

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值