Saltar al contenido principal

Multiplexación de pines con Seeed Studio XIAO ESP32-C5

Seeed Studio XIAO ESP32-C5

La Seeed Studio XIAO ESP32-C5 es una placa de desarrollo potente y versátil que incorpora una variedad de interfaces periféricas y pines GPIO. Estos pines pueden utilizarse para diversos fines, como comunicarse con otros dispositivos, leer sensores analógicos, controlar LED y mucho más. En este tutorial, te guiaremos sobre cómo utilizar los pines multiplexados de la XIAO ESP32-C5.
En resumen, la XIAO ESP32-C5 incorpora 1×I2C, 1×SPI, 2×UART, hasta 11×GPIO (compatibles con PWM), 5×canales ADC y una interfaz de almohadillas de conexión JTAG (almohadillas en el lado posterior).

Introducción

A continuación, proporcionaré ejemplos de tutoriales y código respectivamente basados en las dos plataformas: PlatformIO y Arduino IDE, y puedes elegir la plataforma de desarrollo según tus circunstancias específicas.
Si no has utilizado Arduino IDE antes, consulta Primeros pasos con Seeed Studio XIAO ESP32-C5.
Si no has utilizado PlatfromIO antes, consulta Platform IO con Seeed Studio XIAO ESP32-C5

Descripción general del pinout

Antes de comenzar, revisemos todos los pines que tiene la XIAO ESP32-C5 y sus funciones con el siguiente esquema.

Parte frontal

Parte posterior

Digital

Los 11 pines IO (D0–D10) de la XIAO ESP32-C5 admiten funciones digitales. A continuación se muestra un ejemplo práctico que demuestra cómo utilizar funciones digitales para controlar el estado de encendido/apagado de una luz, y puedes multiplexar estos pines según tus requisitos específicos.

Preparación de hardware

Seeed Studio XIAO ESP32-C5Seeed Studio Grove Base for XIAO Grove - Variable Color LEDGrove - Button

Software

Los siguientes ejemplos de código se basan respectivamente en Arduino IDE y PlatformIO, y logran el mismo efecto de control. Puedes seleccionar y reutilizar el código adecuado según tu situación real de desarrollo.

  • Código de referencia
const int buttonPin = D1;   // Button pin
const int ledPin = D0; // LED pin

bool ledState = false; // LED current state (OFF/ON)

// Debounce
const unsigned long DEBOUNCE_MS = 30;
bool lastReading = HIGH; // because INPUT_PULLUP idle is HIGH
bool stableState = HIGH;
unsigned long lastChangeTime = 0;

void setup() {
pinMode(ledPin, OUTPUT);

pinMode(buttonPin, INPUT_PULLUP);

}

void loop() {
bool reading = digitalRead(buttonPin);

// Detect a level change and start timing (for debouncing)
if (reading != lastReading) {
lastChangeTime = millis();
lastReading = reading;
}

if (millis() - lastChangeTime >= DEBOUNCE_MS) {
if (stableState != reading) {
stableState = reading;


if (stableState == LOW) {
ledState = !ledState; // toggle
digitalWrite(ledPin, ledState ? HIGH : LOW);
}
}
}
}

Resultado

  • Después de cargar el código, pulsa el botón: cada pulsación conmuta el LED entre encendido y apagado, simulando el efecto real de controlar una luz.
tip

Si no se consigue el efecto anterior después de pulsar el botón, es posible que primero tengas que pulsar el botón RESET integrado para activar la placa.

PWM

Todos los pines D0–D11 de la XIAO ESP32-C5 admiten funcionalidad PWM. El PWM puede utilizarse para accionar dispositivos como servos, motores y luces LED. A continuación se muestra un ejemplo de luces respiratorias controladas por PWM para demostrar la funcionalidad de PWM.

Preparación de hardware

Seeed Studio XIAO ESP32-C5Seeed Studio Grove Base for XIAO Grove - Variable Color LED

Software

Los siguientes ejemplos de código se basan respectivamente en Arduino IDE y PlatformIO, y logran el mismo efecto de control. Puedes seleccionar y reutilizar el código adecuado según tu situación real de desarrollo.

  • Código de referencia
int ledPin = D1;    // LED connected to digital pin 10

void setup() {
// declaring LED pin as output
pinMode(ledPin, OUTPUT);
}

void loop() {
// fade in from min to max in increments of 5 points:
for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {
// sets the value (range from 0 to 255):
analogWrite(ledPin, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(30);
}

// fade out from max to min in increments of 5 points:
for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {
// sets the value (range from 0 to 255):
analogWrite(ledPin, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
}

Resultado

Después de cargar el código, el Grove - Variable Color LED mostrará un efecto de luz respiratoria.

Analógico

Para el XIAO ESP32-C5, los pines A0–A5 admiten la funcionalidad de lectura analógica. La lectura ADC se puede aplicar a escenarios como la medición del voltaje de la batería y la lectura de codificadores rotatorios. A continuación, demostraremos la función de lectura ADC tomando como ejemplo la medición de voltaje del Grove-Rotary Angle Sensor.

Preparación de hardware

Seeed Studio XIAO ESP32-C5Seeed Studio Grove Base for XIAO Grove - Rotary Angle Sensor

Software

Los siguientes ejemplos de código se basan respectivamente en Arduino IDE y PlatformIO, y logran el mismo efecto de control. Puedes seleccionar y reutilizar el código apropiado según tu situación de desarrollo real.

iconst int analogPin = A0; 

void setup() {
// Initialize serial communication at 115200 bits per second
Serial.begin(115200);

// Set the resolution to 12 bits (0-4095)
analogReadResolution(12);
}

void loop() {
// Read the analog value and millivolts for the analogPin
int analogValue = analogRead(analogPin);
int analogVolts = analogReadMilliVolts(analogPin);

// Convert millivolts to volts
float voltage = analogVolts / 1000.0;

// Print the values to the Serial Monitor
Serial.printf("ADC analog value = %d\n", analogValue);
Serial.printf("ADC millivolts value = %d\n", analogVolts);
Serial.printf("Voltage = %.3f V\n", voltage);

delay(1000); // Delay for clear reading from serial
}

Resultado

Abre el monitor serie y este imprimirá el valor ADC bruto (analogValue), el valor en milivoltios (analogVolts) y el valor de voltaje (voltage) leídos desde el Grove-Rotary Angle Sensor. Se producirán cambios evidentes a medida que gires el Grove-Rotary Angle Sensor.

Comunicación serie

El XIAO ESP32-C5 cuenta con dos interfaces de comunicación serie por hardware: USB Serial y UART1 Serial, que puedes utilizar para la comunicación serie. Además, puedes usar otros pines de propósito general para simular interfaces de comunicación serie.

USB / UART1 Serial

Para USB Serial, conecta la placa directamente a un ordenador mediante USB-C para la monitorización; esta es la interfaz utilizada en los ejemplos anteriores. Para UART1 Serial, utiliza el XIAO Debug Mate de Seeed Studio para la monitorización.

Preparación de hardware
Seeed Studio XIAO ESP32-C5Seeed Studio XIAO Debug Mate
Software

Los siguientes ejemplos de código se basan respectivamente en Arduino IDE y PlatformIO, y logran el mismo efecto de control. Puedes seleccionar y reutilizar el código apropiado según tu situación de desarrollo real.
Los pines correspondientes para Serial1 son RX_PIN - D7 y TX_PIN - D6.

  • Código de referencia
#define RX_PIN D7
#define TX_PIN D6
#define BAUD 115200

void setup() {
Serial.begin(115200);
Serial1.begin(BAUD,SERIAL_8N1,RX_PIN,TX_PIN);
}

void loop() {
Serial.print("PC Serial \n");
Serial1.print("Hello XIAO ESP32-C5\n");
delay(1000);
}
Resultado

Después de cargar el programa, puedes monitorizarlo mediante la función UART del XIAO Debug Mate de Seeed Studio.

tip

Si no has utilizado antes el Seeed Studio XIAO Debug Mate, puedes visitar Primeros pasos con XIAO Debug Mate.

Puerto serie por software

Esta sección demostrará la funcionalidad de la comunicación serie por software simulando pines de comunicación serie utilizando pines de propósito general.

Preparación de hardware
Seeed Studio XIAO ESP32-C5Módulo y adaptador CH340G USB a serie (TTL)
Software

Los siguientes ejemplos de código se basan respectivamente en Arduino IDE y PlatformIO, y logran el mismo efecto de control. Puedes seleccionar y reutilizar el código adecuado según tu situación real de desarrollo.
Los pines correspondientes simulados por software son RX_PIN - D2 y TX_PIN - D1.

  • Instala la biblioteca de dependencias EspSoftwareSerial.

  • Código de referencia
#include <SoftwareSerial.h>

#define MYPORT_TX D1
#define MYPORT_RX D2

EspSoftwareSerial::UART mySerial;

String receivedData = ""; // Used for storing the received data
unsigned long lastReceiveTime = 0; // Record the last reception time
const unsigned long TIMEOUT = 100; // 100ms timeout period

void setup() {
Serial.begin(115200); //USB-C
mySerial.begin(38400, SWSERIAL_8N1, MYPORT_RX, MYPORT_TX, false);
}

void loop() {
// Process the data received via the serial port of the software
while (mySerial.available()) {
char incomingChar = mySerial.read();
receivedData += incomingChar;
lastReceiveTime = millis(); // The latest time of reception
}

// Check if the time limit has been exceeded. If it has, consider that the reception of one frame of data is complete.
if (receivedData.length() > 0 && (millis() - lastReceiveTime > TIMEOUT)) {
Serial.print("Received via software serial: ");
Serial.println(receivedData);
receivedData = ""; // Clear the buffer area
}

// Process the data received through the hardware serial port
if (Serial.available()) {
String data = Serial.readString(); // Read the entire string at once
mySerial.print("Received via hardware serial: ");
mySerial.println(data);
}
}
Resultado
  • Diagrama de cableado
  • Después de cargar el programa, conecta la placa a cualquier herramienta serie, configura la velocidad en baudios correspondiente y, a continuación, se podrá establecer la comunicación bidireccional.

I2C

El chip XIAO ESP32-C5 integra una interfaz I2C, que se puede utilizar para conectar dispositivos I2C externos como memorias flash, pantallas y sensores. A continuación, demostraremos el uso de I2C con la Seeed Studio Expansion Board Base for XIAO como ejemplo.

Preparación de hardware

Seeed Studio XIAO ESP32-C5Seeed Studio Expansion Board Base for XIAO

Software

Los siguientes ejemplos de código se basan respectivamente en Arduino IDE y PlatformIO, y logran el mismo efecto de visualización. Puedes seleccionar y reutilizar el código adecuado según tu escenario real de desarrollo.

  • Instala la biblioteca U8g2.

  • Código de referencia
#include <U8x8lib.h>
#include <Wire.h>

#define SCL D5
#define SDA D4

U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // OLEDs without Reset of the Display

void setup(void) {
u8x8.begin();
u8x8.setFlipMode(0);
}

void loop(void) {
u8x8.setFont(u8x8_font_chroma48medium8_r);

u8x8.setCursor(2, 10);
u8x8.print("Hello World!");
u8x8.setCursor(1, 28);
u8x8.print("XIAO ESP32-C5!");
}

Resultado

  • Después de cargar el programa, el texto Hello World! y XIAO ESP32-C5! se mostrará en la pantalla.

SPI

El chip XIAO ESP32-C5 integra una interfaz SPI, que se puede utilizar para conectar dispositivos SPI externos como memorias flash, pantallas y sensores. Este ejemplo demuestra la funcionalidad de SPI utilizando una pantalla SPI.

Preparación de hardware

Seeed Studio XIAO ESP32-C5Grove - OLED Display 1.12 (SH1107) V3.0 - SPI/IIC

Software

Los siguientes fragmentos de código se basan respectivamente en Arduino IDE y PlatformIO, y logran el mismo efecto de visualización. Puedes seleccionar y reutilizar el código adecuado según tus necesidades reales de desarrollo.

  • Instala la biblioteca U8g2.

  • Código de referencia
#include <U8g2lib.h>
#include <SPI.h>
#include <Wire.h>

U8G2_SH1107_128X128_1_4W_HW_SPI u8g2(U8G2_R3,
/* cs=*/ D0,
/* dc=*/ D1,
/* reset=*/ D2);

void setup(void) {
u8g2.begin();
}

void loop(void) {
const char* msg = "Hello XIAO ESP32-C5";

u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_luBIS08_tf);

int16_t w = u8g2.getStrWidth(msg);
int16_t x = (128 - w) / 2;

int16_t ascent = u8g2.getAscent();
int16_t descent = u8g2.getDescent();
int16_t h = ascent - descent;
int16_t y = (128 - h) / 2 + ascent;

u8g2.drawStr(x, y, msg);
} while (u8g2.nextPage());
}

Resultado

  • Diagrama de cableado
  • Después de cargar el código, el texto Hello XIAO ESP32-C5 se mostrará en la pantalla.

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...