Skip to main content

Multiplexación de pines con Seeed Studio XIAO MG24

El XIAO MG24 cuenta con hasta 22 pines regulares, 18 pines analógicos, 18 pines digitales, 2 SPI, 2 UART, 2 I2C, y es compatible con todos los PWM. Ofrece una amplia variedad de pines disponibles para nuestro uso. En esta wiki, te enseñaré cómo manejar estos pines, ¡permitiéndonos utilizarlos de manera efectiva 😀!

Digital

Preparación de hardware

Seeed Studio XIAO MG24 SenseSeeed Studio Expansion Base para XIAO con Grove OLEDGrove - Relé

Por favor, instala el XIAO MG24(Sense) en la placa de expansión y conecta el relé a la interfaz A0/D0 de la placa de expansión mediante un cable Grove. Finalmente, conecta el XIAO a la computadora mediante un cable USB-C.

Implementación de Software

En este ejemplo, implementaremos el control del estado de encendido/apagado de un relé utilizando un botón conectado a la placa de expansión XIAO. Cuando se presiona el botón, el relé se enciende, y cuando se suelta el botón, el relé se apaga.

const int buttonPin = D1;     // el número del pin del botón
int buttonState = 0; // variable para leer el estado del botón
const int relayPin = D0;

void setup() {
// inicializar el pin del relé como salida:
pinMode(relayPin, OUTPUT);
// inicializar el pin del botón como entrada con resistencia pull-up:
pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
// leer el estado del valor del botón:
buttonState = digitalRead(buttonPin);

// verificar si el botón está presionado. Si lo está, el estado del botón es HIGH:
if (buttonState == HIGH) {
// encender el relé:
digitalWrite(relayPin, HIGH);
} else {
// apagar el relé:
digitalWrite(relayPin, LOW);
}
}

Gráfico de resultados

Si todo va bien, después de cargar el programa, deberías ver el siguiente efecto.

Digital como PWM

Todos los pines GPIO en el XIAO MG24(Sense) son compatibles con salida PWM. Por lo tanto, puedes usar cualquier pin para generar PWM y ajustar el brillo de las luces, controlar servos y otras funciones.

Preparación de Hardware

Seeed Studio XIAO MG24 SenseSeeed Studio Expansion Base para XIAO con Grove OLEDGrove - LED de Color Variable
tip

Por favor, instala el XIAO MG24(Sense) en la placa de expansión, luego conecta el LED de color variable a la interfaz A0/D0 de la placa de expansión utilizando un cable Grove. Finalmente, conecta el XIAO a tu computadora mediante un cable USB-C.

Implementación de Software

En este ejemplo, demostraremos cómo usar la salida PWM para controlar el brillo de una luz.

int LED_pin = D0;    // LED conectado al pin digital 10

void setup() {
// declarar el pin del LED como salida
pinMode(LED_pin, OUTPUT);
}

void loop() {
// desvanecer de mínimo a máximo en incrementos de 3 puntos:
for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 3) {
// establece el valor (rango de 0 a 255):
analogWrite(LED_pin, fadeValue);
// espera 30 milisegundos para ver el efecto de atenuación
delay(30);
}

// desvanecer de máximo a mínimo en incrementos de 3 puntos:
for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 3) {
// establece el valor (rango de 0 a 255):
analogWrite(LED_pin, fadeValue);
// espera 30 milisegundos para ver el efecto de atenuación
delay(30);
}
}

Gráfico de resultados

Si el programa se ejecuta correctamente, verás el siguiente efecto en funcionamiento.

Analógico

La placa de desarrollo XIAO MG24(Sense) tiene un ADC de 12 bits para lecturas de alta resolución de los valores de los sensores analógicos, lo que nos ayuda a obtener valores más precisos.

A continuación, elegiremos dos sensores para reflejar las características del ADC.

Preparación de Hardware

Seeed Studio XIAO MG24 SenseGrove-LED de Color VariableGrove-Sensor de ángulo rotativo Seeed Studio Grove Base para XIAO

Implementación de Software

const int analogInPin = D1;  // Pin de entrada analógica al que está conectado el potenciómetro
const int analogOutPin = 9; // Pin de salida analógica al que está conectada la LED

int sensorValue = 0; // valor leído desde el potenciómetro
int outputValue = 0; // valor de salida para el PWM (salida analógica)

void setup() {
Serial.begin(115200);
}

void loop() {
sensorValue = analogRead(analogInPin);
outputValue = map(sensorValue, 0, 4095, 0, 255);
analogWrite(analogOutPin, outputValue);

Serial.print("sensor = ");
Serial.print(sensorValue);
Serial.print("\t output = ");
Serial.println(outputValue);
delay(100);
}

Gráfico de resultados

Si todo funciona correctamente, después de cargar el programa, deberías ver el siguiente efecto.

UART

Cuando se trabaja con Arduino IDE, la comunicación serial es una parte esencial de muchos proyectos. Para utilizar Serial en Arduino IDE, primero debes abrir la ventana del Monitor Serial. Esto se puede hacer haciendo clic en el icono del Monitor Serial en la barra de herramientas o presionando el atajo de teclado Ctrl+Shift+M.

Uso general de Serial

Algunas de las funciones más utilizadas en la comunicación Serial incluyen:

  • Serial.begin() -- Inicializa la comunicación a una velocidad en baudios específica.
  • Serial.print() -- Envía datos al puerto Serial en un formato legible.
  • Serial.write() -- Envía datos binarios al puerto Serial.
  • Serial.available() -- Verifica si hay datos disponibles para ser leídos desde el puerto Serial.
  • Serial.read() -- Lee un solo byte de datos desde el puerto Serial.
  • Serial.flush() -- Espera a que la transmisión de datos seriales salientes se complete.

Mediante estas funciones, puedes enviar y recibir datos entre la placa Arduino y tu computadora, lo que permite la creación de proyectos interactivos.

Aquí tienes un programa de ejemplo:

void setup() {
// inicializar la comunicación serial a 9600 bits por segundo:
Serial.begin(9600);
}

void loop() {
// enviar datos al puerto serie
Serial.println("Hello World!");

// leer datos del puerto serie
if (Serial.available() > 0) {
// leer el byte entrante:
char incomingByte = Serial.read();
// imprimir el byte recibido en el monitor serie:
Serial.print("He recibido: ");
Serial.println(incomingByte);
}

// esperar un segundo antes de repetir el bucle
delay(1000);
}

Uso de Serial1

De acuerdo con los diagramas de pines de XIAO MG24(Sense) para parámetros específicos, podemos observar que hay un pin TX y un pin RX.
Esto es diferente de la comunicación serial tradicional, pero su uso es muy similar, excepto que se deben agregar algunos parámetros adicionales.
A continuación, utilizaremos los pines expuestos por el chip para la comunicación serial.

#define BAUD 115200

void setup() {
Serial1.begin(BAUD);
}

void loop() {
if(Serial1.available() > 0)
{
char incominByte = Serial1.read();
Serial1.print("I received : ");
Serial1.println(incominByte);
}
delay(1000);
}

I2C

XIAO MG24(Sense) tiene una interfaz I2C que puede utilizarse para la transmisión de datos y el análisis de muchos sensores, así como para el uso de algunas pantallas OLED.

Preparación de Hardware

Seeed Studio XIAO MG24 SenseSeeed Studio Expansion Base para XIAO con Grove OLED

La pantalla OLED en la placa de expansión de XIAO utiliza el protocolo I2C y está conectada a la interfaz I2C de XIAO a través del circuito I2C de la placa. Por lo tanto, podemos conectar directamente XIAO a la placa de expansión y programarla para mostrar contenido en la pantalla.

Implementación de Software

Este ejemplo muestra cómo utilizar la pantalla OLED en la Seeed Studio Expansion Base para XIAO MG24(Sense).

Paso 1. Instalar el Seeed Studio XIAO MG24(Sense) en la placa de expansión y conectar el cable Type-C.

Paso 2. Instalar la biblioteca u8g2.

Paso 3. Copiar el código y pegarlo en el Arduino IDE, luego subirlo.

  • Descarga el archivo zip a continuación

📄 [ZIP] Header de carita sonriente

  • Crea un archivo de encabezado llamado "smiley_face.h" y copia el contenido del archivo zip descargado en el archivo de encabezado que creaste.
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include "smiley_face.h"

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

int xx = 20;
int yy = 10;

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

void loop() {
smeil_display();
delay(500);
}

void smeil_display() {
const unsigned char* smileImages[] = {
semil1, semil2, semil3, semil4, semil5,
semil6, semil7, semil8, semil9, semil10,
semil11, semil12, semil13, semil14, semil15,
semil16, semil17, semil18, semil19, semil20,
semil21, semil22, semil23, semil24, semil25,
semil26, semil27
};

int delays[] = {
40, 50, 40, 40, 40,
40, 40, 50, 40, 40,
40, 40, 40, 50, 40,
40, 50, 40, 40, 50,
40, 50, 40, 40, 50,
50, 50, 40, 50
};

for (int i = 0; i < sizeof(smileImages) / sizeof(smileImages[0]); i++) {
u8g2.firstPage();
do {
u8g2.drawXBMP(xx, yy, 48, 48, smileImages[i]);
} while (u8g2.nextPage());
delay(delays[i]);
}
}

Resultado

SPI

El chip XIAO MG24(Sense) integra múltiples periféricos, incluida una interfaz SPI que puede usarse para conectar dispositivos SPI externos, como memoria flash, pantallas, sensores y más.

Descripción general de la biblioteca de Arduino


Basándonos en el programa de ejemplo de Arduino proporcionado por Waveshare, hemos desarrollado una biblioteca de Arduino para toda la serie XIAO. Puedes acceder directamente al repositorio de GitHub de esta biblioteca mediante el botón a continuación.

Preparación del hardware

Seeed Studio XIAO MG24 SenseDisplay LCD SPI 1.69-pulg.

Conexión de pines

Después de preparar el hardware como se mencionó anteriormente, utiliza cables de puente para conectar la interfaz SPI de XIAO y la pantalla OLED. Consulta el siguiente diagrama para el método de cableado.

Instalación

Dado que has descargado la biblioteca en formato zip, abre tu Arduino IDE, haz clic en Sketch > Incluir biblioteca > Agregar biblioteca .ZIP. Selecciona el archivo zip que acabas de descargar, y si la biblioteca se instala correctamente, verás Biblioteca añadida a tus bibliotecas en la ventana de notificación. Esto significa que la biblioteca se ha instalado con éxito.

Implementación de Software

Después de descargar e instalar correctamente la biblioteca, podrás encontrar dos programas de ejemplo llamados helloworld.ino y bgcolor.ino en la carpeta de ejemplos. El archivo bgcolor.ino es un ejemplo que muestra el color de fondo, estableciendo el color rojo como predeterminado. El archivo helloworld.ino es un ejemplo que muestra la animación del logo de nuestra empresa, y este ejemplo incluye el efecto que tiene el ejemplo bgcolor.

#include <st7789v2.h>
#include "SPI.h"
#include "seeed.h"

st7789v2 Display;

void setup() {
// pon tu código de configuración aquí, para que se ejecute una vez:
Display.SetRotate(270);
Display.Init();
Display.SetBacklight(100);
Display.Clear(WHITE);
}

void loop() {
// pon tu código principal aquí, para que se ejecute repetidamente:
// Display.SetPixel(100, 100, RED);
// Display.DrawPoint(50, 50, YELLOW, DOT_PIXEL_8X8, DOT_FILL_AROUND);

Display.DrawImage(gImage_seeed, 20, 90, 240, 47);

Display.DrawLine(15, 65, 65, 65, MAGENTA, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
Display.DrawLine(15, 70, 80, 70, MAGENTA, DOT_PIXEL_2X2, LINE_STYLE_SOLID);

Display.DrawRectangle(15, 80, 265, 150, GRAY, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);

Display.DrawCircle(10, 10, 25, BLUE, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 10, 20, BLACK, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 10, 15, RED, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 10, 10, GREEN, DOT_PIXEL_2X2, DRAW_FILL_FULL);

Display.DrawCircle(270, 10, 25, BLUE, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(270, 10, 20, BLACK, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(270, 10, 15, RED, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(270, 10, 10, GREEN, DOT_PIXEL_2X2, DRAW_FILL_FULL);

Display.DrawCircle(10, 230, 25, BLUE, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 230, 20, BLACK, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 230, 15, RED, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 230, 10, GREEN, DOT_PIXEL_2X2, DRAW_FILL_FULL);

Display.DrawCircle(270, 230, 25, BLUE, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(270, 230, 20, BLACK, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(270, 230, 15, RED, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(270, 230, 10, GREEN, DOT_PIXEL_2X2, DRAW_FILL_FULL);

Display.DrawLine(200, 160, 265, 160, GRAYBLUE, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
Display.DrawLine(215, 165, 265, 165, GRAYBLUE, DOT_PIXEL_2X2, LINE_STYLE_SOLID);

Display.DrawString_EN(20, 180, "By: Jason", &Font20, WHITE, BLACK);
// Display.DrawNum(100, 220, 123456, &Font24, RED, BRED);
Display.DrawFloatNum(100, 210, 1.00, 2, &Font16, WHITE, BLACK);
}

Verás el logotipo de Seeed Studio impreso en la pantalla de forma dinámica.

Conclusión

Has aprendido las funciones básicas de los pines del XIAO MG24 (Sense). Ahora, vamos a explorar más a fondo los sensores integrados.

Soporte Técnico y Discusión de Producto

¡Gracias por elegir nuestros productos! Estamos aquí para brindarte soporte en diferentes áreas y asegurarnos de 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...