Saltar al contenido principal

Primeros pasos con Seeed Studio XIAO ESP32C6

Seeed Studio XIAO ESP32C6

Introducción

Seeed Studio XIAO ESP32C6 está impulsado por el SoC ESP32-C6 altamente integrado, basado en dos procesadores RISC-V de 32 bits, con un procesador de alto rendimiento (HP) que funciona hasta 160 MHz, y un procesador RISC-V de 32 bits de bajo consumo (LP), que puede funcionar hasta 20 MHz. Hay 512KB de SRAM y 4 MB de Flash en el chip, lo que permite más espacio de programación y aporta más posibilidades a los escenarios de control IoT.

XIAO ESP32C6 es nativamente compatible con Matter gracias a su conectividad inalámbrica mejorada. La pila inalámbrica es compatible con WiFi 6 de 2,4 GHz, Bluetooth® 5.3, Zigbee y Thread (802.15.4). Como el primer miembro de XIAO compatible con Thread, es una opción perfecta para construir proyectos compatibles con Matter, logrando así interoperabilidad en el hogar inteligente.

Especificaciones

ProductoXIAO ESP32-C6XIAO ESP32-C3XIAO ESP32-S3
ProcesadorEspressif ESP32-C6 SoC
dos procesadores RISC-V de 32 bits, con el de alto rendimiento funcionando hasta 160 MHz y el de bajo consumo funcionando hasta 20 MHz
Espressif ESP32-C3 SoC
procesador de chip RISC-V monocore de 32 bits con una canalización de cuatro etapas que funciona hasta 160 MHz
Espressif ESP32-S3R8 SoC
procesador Xtensa LX7 de doble núcleo y 32 bits que funciona hasta 240 MHz
InalámbricoSubsistema Wi-Fi 6 completo de 2,4GHzSubsistema Wi-Fi completo de 2,4GHzSubsistema Wi-Fi completo de 2,4GHz
Bluetooth Low Energy 5.0
Zigbee, Thread, IEEE 802.15.4//
Memoria en chip512KB SRAM & 4MB Flash400KB SRAM & 4MB Flash8MB PSRAM & 8MB Flash
Interfaz1x UART
1x LP_UART
1x IIC
1x LP_IIC
1x SPI
11x GPIO(PWM)
7x ADC
1x SDIO
1x UART
1x IIC
1x SPI
11x GPIO(PWM)
4x ADC
1x UART
1x IIC
1x SPI
11x GPIO(PWM)
9x ADC
1x User LED
1x Charge LED
1x Reset button
1x Boot button
Dimensiones21 x 17.8mm
AlimentaciónVoltaje de entrada (Type-C): 5V
Voltaje de entrada (BAT): 3.7V
Modelo de consumo de energía (Típ.)
(Alimentación: 3.8V)
Modelo Modem-sleep: 30 mA
Modelo Light-sleep: 3.1 mA
Modelo Deep Sleep: 15 μA
Modelo Modem-sleep: 24 mA
Modelo Light-sleep: 3 mA
Modelo Deep Sleep: 44 μA
Modelo Modem-sleep: 27 mA
Modelo Light-sleep: 2 mA
Modelo Deep Sleep: 14 μA
Temperatura de trabajo-40°C ~ 85°C-40°C ~ 85°C-40°C ~ 65°C

XIAO ESP32-S3 vs ESP32-C3 vs ESP32-C6: Which One Is Best for Your Project?

Características

  • Conectividad mejorada: Integra conectividad de radio Wi-Fi 6 (802.11ax) de 2.4 GHz, Bluetooth 5(LE) e IEEE 802.15.4, lo que permite la aplicación de los protocolos Thread y Zigbee.
  • Compatibilidad nativa con Matter: Admite la creación de proyectos de hogar inteligente compatibles con Matter, garantizando la interoperabilidad entre diferentes dispositivos inteligentes.
  • Seguridad cifrada en el chip: Utiliza el ESP32-C6 para proporcionar funciones de arranque seguro, cifrado y Trusted Execution Environment (TEE), mejorando la seguridad de los proyectos de hogar inteligente.
  • Rendimiento RF sobresaliente: Incorpora una antena integrada con un alcance BLE/Wi-Fi de hasta 80m y ofrece una interfaz para conectar una antena UFL externa, garantizando una conectividad fiable.
  • Aprovechamiento del consumo de energía: Ofrece cuatro modos de funcionamiento, incluido un modo de suspensión profunda con un consumo tan bajo como 15 μA, junto con soporte para la gestión de carga de baterías de litio.
  • Procesadores RISC-V duales: Incorpora dos procesadores RISC-V de 32 bits, con el procesador de alto rendimiento capaz de funcionar hasta 160 MHz y el procesador de bajo consumo hasta 20 MHz.
  • Diseños clásicos de XIAO: Mantiene el factor de forma del tamaño de un pulgar de 21 x 17.8mm y el diseño de montaje en un solo lado, ideal para proyectos con espacio limitado como dispositivos portátiles.

Descripción general del hardware

Diagrama indicativo de XIAO ESP32C6
Lista de pines de XIAO ESP32C6
RF Switch

La función RF Switch te permite alternar entre la antena cerámica integrada y una antena externa configurando GPIO14. Para habilitar esta función, primero debes establecer GPIO3 a nivel bajo, ya que esto activa el control del conmutador RF.

  • GPIO14 en nivel bajo (configuración predeterminada): El dispositivo utiliza la antena cerámica integrada.
  • GPIO14 en nivel alto: El dispositivo cambia a la antena externa.

De forma predeterminada, GPIO14 está configurado a nivel bajo, habilitando la antena integrada. Para usar una antena externa, establece GPIO14 a nivel alto. Consulta el código de ejemplo a continuación para obtener orientación sobre cómo configurar GPIO3 y GPIO14 para activar la antena externa:

void setup() {
pinMode(WIFI_ENABLE, OUTPUT); // pinMode(3, OUTPUT);
digitalWrite(WIFI_ENABLE, LOW); // digitalWrite(3, LOW); // Activate RF switch control

delay(100);

pinMode(WIFI_ANT_CONFIG, OUTPUT); // pinMode(14, OUTPUT);
digitalWrite(WIFI_ANT_CONFIG, HIGH); // digitalWrite(14, HIGH); // Use external antenna
}

Mapa de pines

Pin XIAOFunciónPin del chipFunciones alternativasDescripción
5VVBUSEntrada/Salida de alimentación
GND
3V33V3_OUTSalida de alimentación
D0AnalógicoGPIO0LP_GPIO0GPIO, ADC
D1AnalógicoGPIO1LP_GPIO1GPIO, ADC
D2AnalógicoGPIO2LP_GPIO2GPIO, ADC
D3DigitalGPIO21SDIO_DATA1GPIO
D4SDAGPIO22SDIO_DATA2GPIO, Datos I2C
D5SCLGPIO23SDIO_DATA3GPIO, Reloj I2C
D6TXGPIO16GPIO, Transmisión UART
D7RXGPIO17GPIO, Recepción UART
D8SCKGPIO19SPI_CLKGPIO, Reloj SPI
D9MISOGPIO20SPI_MISOGPIO, Datos SPI
D10MOSIGPIO18SPI_MOSIGPIO, Datos SPI
MTDOGPIO7JTAG
MTDIGPIO5JTAG, ADC
MTCKGPIO6JTAG, ADC
MTMSGPIO4JTAG, ADC
ENCHIP_PUReinicio
BootGPIO9Entrar en modo Boot
RF Switch Port SelectGPIO14Conmutar entre la antena integrada y la antena UFL
RF Switch PowerGPIO3Alimentación
LightGPIO15Luz de usuario

Primeros pasos

Para permitirte comenzar más rápido con el XIAO ESP32C6, lee la preparación de hardware y software a continuación para preparar el XIAO.

Preparación de hardware

Necesitas preparar lo siguiente:

tip

Algunos cables USB solo pueden suministrar energía y no pueden transferir datos. Si no tienes un cable USB o no sabes si tu cable USB puede transmitir datos, puedes consultar Seeed USB Type-C support USB 3.1.

Soldar los pines

XIAO ESP32C6 se envía sin pines soldados por defecto, necesitas preparar tus propios pines y soldarlos a los pines correspondientes del XIAO para que puedas conectarlo a la placa de expansión o al sensor.

Debido al tamaño miniatura del XIAO ESP32C6, ten cuidado al soldar los pines, no juntes pines diferentes y no dejes que la soldadura toque la cubierta metálica u otros componentes. De lo contrario, puede provocar que el XIAO tenga un cortocircuito o no funcione correctamente, y las consecuencias derivadas de esto serán responsabilidad del usuario.

Modo BootLoader

A veces, cuando usamos el programa equivocado, el XIAO puede parecer perder los puertos o no funcionar correctamente. El comportamiento específico es:

  • Conectado al ordenador, pero no se encuentra ningún número de puerto para el XIAO.
  • El ordenador está conectado y aparece el número de puerto, pero la carga del programa falla.

Cuando te encuentres con las dos situaciones anteriores, puedes intentar poner el XIAO en modo BootLoader, lo que puede resolver la mayoría de los problemas de dispositivos no reconocidos y cargas fallidas. El método específico es:

  • Paso 1. Mantén pulsado el botón BOOT en el XIAO ESP32C6 sin soltarlo.
  • Paso 2. Mantén pulsado el botón BOOT y luego conéctalo al ordenador mediante el cable de datos. Suelta el botón BOOT después de conectarlo al ordenador.
  • Paso 3. Carga el programa Blink para comprobar el funcionamiento del XIAO ESP32C6.

Reinicio

Cuando el programa se ejecuta de forma anormal, puedes pulsar Reset una vez durante el encendido para que el XIAO vuelva a ejecutar el programa cargado.

Cuando mantienes pulsada la tecla BOOT mientras enciendes y luego pulsas la tecla Reset una vez, también puedes entrar en el modo BootLoader.

Preparación de software

La herramienta de programación recomendada para el XIAO ESP32C6 es el Arduino IDE, por lo que necesitas completar la instalación de Arduino como parte de la preparación del software.

tip

Si es la primera vez que usas Arduino, te recomendamos encarecidamente que consultes Getting Started with Arduino.

Y el paquete integrado para XIAO ESP32C6 requiere al menos la versión 2.0.8 para estar disponible.

  • Paso 1. Descarga e instala la versión estable de Arduino IDE de acuerdo con tu sistema operativo.


  • Paso 2. Inicia la aplicación Arduino.

  • Paso 3. Añade el paquete integrado XIAO ESP32C6 al Arduino IDE y haz clic en OK.

  • Paso 4. Cierra el Arduino IDE y vuelve a abrirlo.

Añadir la placa XIAO-C6

Para instalar la placa XIAO ESP32C6, sigue estos pasos:

https://espressif.github.io/arduino-esp32/package_esp32_index.json
  1. Añade la URL del gestor de placas anterior a las preferencias de tu Arduino IDE, que se toma de Installing - Arduino ESP32.
  1. Descarga el paquete de la placa XIAO ESP32C6.
nota

Solo está disponible si la versión de la placa esp32 es superior a 3.0.0.

  1. Elige la variante XIAO_ESP32C6.

Ahora disfruta programando ✨.

  • Paso 1. Inicia la aplicación Arduino.

  • Paso 2. Navega a File > Examples > 01.Basics > Blink y abre el programa.

  • Paso 3. Selecciona el modelo de placa XIAO ESP32C6 y selecciona el número de puerto correcto para cargar el programa.

Una vez que el programa se haya cargado correctamente, verás el siguiente mensaje de salida y podrás observar que el LED naranja en el lado derecho del XIAO ESP32C6 está parpadeando.

Uso de la batería

La serie XIAO ESP32C6 incorpora un chip de gestión de energía, lo que le permite alimentarse de forma independiente mediante una batería o cargar la batería a través de su puerto USB.

Para conectar una batería a tu XIAO, recomendamos usar una batería de litio recargable de 3,7 V cualificada. Al soldar la batería, distingue cuidadosamente entre los terminales positivo y negativo. La almohadilla del electrodo negativo debe estar situada en el lado izquierdo cerca del serigrafiado "D8", mientras que la almohadilla del electrodo positivo debe estar situada en el lado derecho cerca del serigrafiado "D5".

precaución

Cuando se utiliza alimentación por batería, no habrá tensión en el pin de 5V.

Luz indicadora roja

El XIAO ESP32C6 tiene una luz indicadora roja para la carga de la batería, similar al XIAO ESP32S3:

El comportamiento de la luz roja para el XIAO ESP32C6 es el siguiente:

  • Cuando no hay batería conectada:
    • La luz roja se enciende cuando se conecta el cable Type-C y se apaga después de 30 segundos.
  • Cuando una batería está conectada y el cable Type-C está enchufado para cargar:
    • La luz roja parpadea.
  • Cuando la batería está completamente cargada a través de la conexión Type-C:
    • La luz roja se apaga.

Lectura del voltaje de la batería

Para monitorizar el voltaje de la batería en el XIAO ESP32C6, de forma similar al XIAO ESP32C3, tendrás que soldar una resistencia de 200k en una configuración de 1:2. Esta configuración reduce el voltaje a la mitad, lo que permite una monitorización segura a través del puerto analógico A0.

Código de ejemplo

El siguiente código inicializa el ADC en el puerto A0 y promedia 16 lecturas para calcular el voltaje de la batería, ajustando la relación de atenuación 1:2 del divisor de voltaje.

#include <Arduino.h>

void setup() {
Serial.begin(115200);
pinMode(A0, INPUT); // Configure A0 as ADC input
}

void loop() {
uint32_t Vbatt = 0;
for(int i = 0; i < 16; i++) {
Vbatt += analogReadMilliVolts(A0); // Read and accumulate ADC voltage
}
float Vbattf = 2 * Vbatt / 16 / 1000.0; // Adjust for 1:2 divider and convert to volts
Serial.println(Vbattf, 3); // Output voltage to 3 decimal places
delay(1000); // Wait for 1 second
}

Este código toma 16 mediciones del ADC, las promedia y luego compensa la relación 1:2 del divisor de voltaje para mostrar el voltaje de la batería en voltios con tres decimales de precisión.

Modo de sueño profundo y activación

El XIAO ESP32C6 tiene un modo de sueño profundo completo y una función de activación. Aquí mostraremos dos de los ejemplos más comunes ofrecidos por el ESP.

Demo1: Sueño profundo con activación externa

Este código muestra cómo usar el modo de sueño profundo con un disparador externo como fuente de activación y cómo almacenar datos en la memoria RTC para utilizarlos tras los reinicios.

/*
Hardware Connections
======================
Push Button to GPIO 0 pulled down with a 10K Ohm
resistor

NOTE:
======
Bit mask of GPIO numbers which will cause wakeup. Only GPIOs
which have RTC functionality can be used in this bit map.
For different SoCs, the related GPIOs are:
- ESP32: 0, 2, 4, 12-15, 25-27, 32-39
- ESP32-S2: 0-21
- ESP32-S3: 0-21
- ESP32-C6: 0-7
- ESP32-H2: 7-14
*/

#define BUTTON_PIN_BITMASK (1ULL << GPIO_NUM_0) // GPIO 0 bitmask for ext1

RTC_DATA_ATTR int bootCount = 0;

/*
Method to print the reason by which ESP32
has been awaken from sleep
*/
void print_wakeup_reason(){
esp_sleep_wakeup_cause_t wakeup_reason;

wakeup_reason = esp_sleep_get_wakeup_cause();

switch(wakeup_reason)
{
case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break;
case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break;
case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break;
default : Serial.printf("Wakeup was not caused by deep sleep: %d\n",wakeup_reason); break;
}
}

void setup(){
Serial.begin(115200);
delay(1000); //Take some time to open up the Serial Monitor

//Increment boot number and print it every reboot
++bootCount;
Serial.println("Boot number: " + String(bootCount));

//Print the wakeup reason for ESP32
print_wakeup_reason();

/*
First we configure the wake up source
We set our ESP32 to wake up for an external trigger.
There are two types for ESP32, ext0 and ext1, ext0
don't support ESP32C6 so we use ext1.
*/

//If you were to use ext1, you would use it like
esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK,ESP_EXT1_WAKEUP_ANY_HIGH);

//Go to sleep now
Serial.println("Going to sleep now");
esp_deep_sleep_start();
Serial.println("This will never be printed");
}

void loop(){
//This is not going to be called
}

Demo2: Modo Deep Sleep con Despertar por Temporizador

ESP32 ofrece un modo de deep sleep para un ahorro de energía efectivo, ya que la energía es un factor importante para las aplicaciones de IoT. En este modo, las CPU, la mayor parte de la RAM y todos los periféricos digitales que se sincronizan con APB_CLK se apagan. Las únicas partes del chip que pueden seguir encendidas son: el controlador RTC, los periféricos RTC y las memorias RTC.

Este código muestra el deep sleep más básico con un temporizador para despertarlo y cómo almacenar datos en la memoria RTC para usarlos después de los reinicios.

/*
Simple Deep Sleep with Timer Wake Up
=====================================
This code is under Public Domain License.

Author:
Pranav Cherukupalli <[email protected]>
*/

#define uS_TO_S_FACTOR 1000000ULL /* Conversion factor for micro seconds to seconds */
#define TIME_TO_SLEEP 5 /* Time ESP32 will go to sleep (in seconds) */

RTC_DATA_ATTR int bootCount = 0;

/*
Method to print the reason by which ESP32
has been awaken from sleep
*/
void print_wakeup_reason(){
esp_sleep_wakeup_cause_t wakeup_reason;

wakeup_reason = esp_sleep_get_wakeup_cause();

switch(wakeup_reason)
{
case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break;
case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break;
case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break;
default : Serial.printf("Wakeup was not caused by deep sleep: %d\n",wakeup_reason); break;
}
}

void setup(){
Serial.begin(115200);
delay(1000); //Take some time to open up the Serial Monitor

//Increment boot number and print it every reboot
++bootCount;
Serial.println("Boot number: " + String(bootCount));

//Print the wakeup reason for ESP32
print_wakeup_reason();

/*
First we configure the wake up source
We set our ESP32 to wake up every 5 seconds
*/
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
Serial.println("Setup ESP32 to sleep for every " + String(TIME_TO_SLEEP) +
" Seconds");

/*
Next we decide what all peripherals to shut down/keep on
By default, ESP32 will automatically power down the peripherals
not needed by the wakeup source, but if you want to be a poweruser
this is for you. Read in detail at the API docs
http://esp-idf.readthedocs.io/en/latest/api-reference/system/deep_sleep.html
Left the line commented as an example of how to configure peripherals.
The line below turns off all RTC peripherals in deep sleep.
*/
//esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
//Serial.println("Configured all RTC Peripherals to be powered down in sleep");

/*
Now that we have setup a wake cause and if needed setup the
peripherals state in deep sleep, we can now start going to
deep sleep.
In the case that no wake up sources were provided but deep
sleep was started, it will sleep forever unless hardware
reset occurs.
*/
Serial.println("Going to sleep now");
Serial.flush();
esp_deep_sleep_start();
Serial.println("This will never be printed");
}

void loop(){
//This is not going to be called
}
tip

Si quieres aprender a usar más funciones del modo deep sleep y de despertar, puedes encontrar más programas de ejemplo escritos oficialmente para el chip por ESP en el Arduino IDE.

Recursos

Diseño de hardware

Diseño mecánico

Recursos del curso

Soporte técnico y debate sobre el producto

Gracias por elegir nuestros productos. Estamos aquí para ofrecerte diferentes tipos de soporte y garantizar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para adaptarnos a diferentes preferencias y necesidades.

Loading Comments...