Multiplexação de Pinos (Arduino)

O Seeed Studio XIAO RP2350 possui interfaces ricas. Há 19 E/S digitais que podem ser usadas como pinos PWM e 3 entradas analógicas que podem ser usadas como pinos ADC. Ele suporta quatro interfaces de comunicação serial, como UART, I2C e SPI. Este wiki será útil para aprender sobre essas interfaces e implementá‑las em seus próximos projetos!
Preparação
Atualmente, há alguns problemas com o uso dos pinos do XIAO RP2350 devido a problemas de compatibilidade. Corrigimos esse problema e a biblioteca oficial da Raspberry Pi já foi mesclada. A versão atual é a 4.2.0, e a atualização será concluída na próxima versão, 4.2.1.

Enquanto isso, substitua este arquivo acessando Arduino15/packages/rp2040/hardware/rp2040/4.2.0/variants/seeed_xiao_rp2350(Seu Endereço da Biblioteca Arduino) e clicando aqui para baixar o arquivo. Depois disso, você pode aproveitar seu trabalho!

Digital
Preparação de Hardware
| Seeed Studio XIAO RP2350 | Base de Expansão Seeed Studio para XIAO com Grove OLED | Grove - LED |
|---|---|---|
![]() | ![]() | ![]() |
Instale o XIAO RP2350 na placa de expansão e conecte o Grove LED à interface A0/D0 da placa de expansão por meio de um cabo Grove. Por fim, conecte o XIAO ao computador usando um cabo USB‑C.
Implementação de Software
Neste exemplo, vamos implementar o controle do estado ligado/desligado de um relé usando um botão conectado à placa de expansão XIAO. Quando o botão é pressionado, o relé liga, e quando o botão é solto, o relé desliga.
//define which pin you use
int LED_BUILTIN = D0;
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
Efeito
Se tudo correr bem, após o envio do programa, você deverá ver o seguinte efeito.

Digital como PWM
Todos os pinos GPIO no XIAO RP2350 suportam saída PWM. Portanto, você pode usar qualquer pino para gerar PWM a fim de ajustar o brilho de luzes, controlar servos e outras funções.
Preparação de Hardware
| Seeed Studio XIAO RP2350 | Base de Expansão Seeed Studio para XIAO com Grove OLED | Grove - LED |
|---|---|---|
![]() | ![]() | ![]() |
Instale o XIAO RP2350 na placa de expansão e conecte o Grove LED à interface A0/D0 da placa de expansão por meio de um cabo Grove. Por fim, conecte o XIAO ao computador usando um cabo USB‑C.
Implementação de Software
Neste exemplo, vamos demonstrar como usar a saída PWM para controlar o brilho de uma luz.
int LED_pin = D0; // LED connected to digital pin 10
void setup() {
// declaring LED pin as output
pinMode(LED_pin, OUTPUT);
}
void loop() {
// fade in from min to max in increments of 5 points:
for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 3) {
// sets the value (range from 0 to 255):
analogWrite(LED_pin, 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 -= 3) {
// sets the value (range from 0 to 255):
analogWrite(LED_pin, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
}
Efeito
Se o programa for executado com sucesso, você verá o seguinte efeito em execução.

Analógico
A placa de desenvolvimento XIAO MG24(Sense) tem ADC de 12 bits para leitura de alta resolução de valores de sensores analógicos, o que pode nos ajudar a ler valores mais precisos.
Em seguida, escolheremos dois sensores para refletir as características do ADC.
Preparação de Hardware
| Seeed Studio XIAO RP2350 | Base de Expansão Seeed Studio para XIAO com Grove OLED | Grove - Sensor de Ruído |
|---|---|---|
![]() | ![]() | ![]() |
Implementação de Software
int loudness;
void setup()
{
Serial.begin(9600);// initialize Serial
}
void loop()
{
loudness = analogRead(A0);// read analog data from A0 pin
Serial.println(loudness);
delay(200);
}
Efeito
Se tudo correr bem, depois de enviar o programa, você deverá ver o seguinte efeito.

UART
Ao trabalhar com a Arduino IDE, a comunicação Serial é uma parte essencial de muitos projetos. Para usar Serial na Arduino IDE, você precisa começar abrindo a janela do Monitor Serial. Isso pode ser feito clicando no ícone Serial Monitor na barra de ferramentas ou pressionando o atalho Ctrl+Shift+M.
Uso Geral
Algumas das funções Serial mais usadas incluem:
Serial.begin()-- que inicializa a comunicação em uma taxa de baud especificada;Serial.print()-- que envia dados para a porta Serial em um formato legível;Serial.write()-- que envia dados binários para a porta Serial;Serial.available()-- que verifica se há algum dado disponível para ser lido da porta Serial;Serial.read()-- que lê um único byte de dados da porta Serial;Serial.flush()-- que espera a transmissão dos dados seriais de saída ser concluída.
Usando essas funções Serial, você pode enviar e receber dados entre a placa Arduino e o seu computador, o que abre muitas possibilidades para criar projetos interativos.
Aqui está um programa de exemplo:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
void loop() {
// send data to the serial port
Serial.println("Hello World!");
// read data from the serial port
if (Serial.available() > 0) {
// read the incoming byte:
char incomingByte = Serial.read();
// print the incoming byte to the serial monitor:
Serial.print("I received: ");
Serial.println(incomingByte);
}
// wait for a second before repeating the loop
delay(1000);
}
Efeito
Se tudo correr bem, depois de enviar o programa, você deverá ver o seguinte efeito.

Uso do Serial1
De acordo com os diagramas de pinos do XIAO RP2350 acima para parâmetros específicos, podemos observar que há pinos TX e RX (D6, D7). O uso também é muito semelhante, mas precisamos usar uma ferramenta de monitoramento de porta serial para monitorar os pinos D6 e D7 para obter dados. Então, a seguir, usaremos os pinos D6 e D7 para usar o Serial1.
Normalmente, usamos Serial para se comunicar entre o dispositivo e o seu computador, para que possamos saber o que está acontecendo no seu programa.
Com base nisso, você deseja usar este dispositivo para se comunicar com outro dispositivo. Nesse caso, usaremos Serial1.
void setup() {
Serial1.begin(115200);
}
void loop() {
if(Serial1.available() > 0)
{
char incominByte = Serial1.read();
Serial1.print("I received : ");
Serial1.println(incominByte);
}
delay(1000);
}
Efeito
Se tudo correr bem, depois de enviar o programa, você deverá ver o seguinte efeito.

I2C
O XIAO RP2350 possui uma interface I2C que pode ser usada para transmissão e análise de dados de muitos sensores, bem como para usar algumas telas OLED.
Preparação de Hardware
| Seeed Studio XIAO RP2350 | Base de Expansão Seeed Studio para XIAO com Grove OLED | Grove - Sensor de Temperatura e Umidade DHT20 |
|---|---|---|
![]() | ![]() | ![]() |
O sensor DHT20 usa o protocolo I2C, então podemos usar a porta I2C na Placa de Expansão XIAO para obter os dados do sensor.

Implementação de Software
Este exemplo apresenta como obter dados do sensor DHT20 por meio da Seeed Studio Expansion Base para XIAO RP2350.
Passo 1. Instale o Seeed Studio XIAO RP2350 na placa de expansão e então conecte o cabo Type-C.
Passo 2. Instale a biblioteca Grove Temperature And Humidity Sensor.
Passo 3. Adicione a biblioteca ao Arduino.

Passo 4. Abra o Demo DHTtester a partir da biblioteca que você acabou de baixar.

Como usamos o DHT20, precisamos descomentar os códigos do DHT20 como no código a seguir.
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
#include "Grove_Temperature_And_Humidity_Sensor.h"
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
// #define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
//#define DHTTYPE DHT10 // DHT 10
#define DHTTYPE DHT20 // DHT 20
/*Notice: The DHT10 and DHT20 is different from other DHT* sensor ,it uses i2c interface rather than one wire*/
/*So it doesn't require a pin.*/
// #define DHTPIN 2 // what pin we're connected to(DHT10 and DHT20 don't need define it)
// DHT dht(DHTPIN, DHTTYPE); // DHT11 DHT21 DHT22
DHT dht(DHTTYPE); // DHT10 DHT20 don't need to define Pin
// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
#if defined(ARDUINO_ARCH_AVR)
#define debug Serial
#elif defined(ARDUINO_ARCH_SAMD) || defined(ARDUINO_ARCH_SAM)
#define debug SerialUSB
#else
#define debug Serial
#endif
void setup() {
debug.begin(115200);
debug.println("DHTxx test!");
Wire.begin();
/*if using WIO link,must pull up the power pin.*/
// pinMode(PIN_GROVE_POWER, OUTPUT);
// digitalWrite(PIN_GROVE_POWER, 1);
dht.begin();
}
void loop() {
float temp_hum_val[2] = {0};
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
if (!dht.readTempAndHumidity(temp_hum_val)) {
debug.print("Humidity: ");
debug.print(temp_hum_val[0]);
debug.print(" %\t");
debug.print("Temperature: ");
debug.print(temp_hum_val[1]);
debug.println(" *C");
} else {
debug.println("Failed to get temprature and humidity value.");
}
delay(1500);
}
Efeito
Se tudo correr bem, após o upload do programa, você deverá ver o seguinte efeito.

SPI
O chip XIAO RP2350 integra vários periféricos, incluindo uma interface SPI que pode ser usada para conectar dispositivos SPI externos, como memória flash, displays, sensores e muito mais. O XIAO RP2350 também suporta modo de transferência SPI de alta velocidade, que pode atingir uma taxa máxima de transferência SPI de 80 MHz, atendendo às necessidades de transferência de dados da maioria dos dispositivos SPI.
Preparação de Hardware
| Seeed Studio XIAO RP2350 | Grove - OLED Display 1.12 (SH1107) V3.0 - SPI/IIC |
|---|---|
![]() | ![]() |
Depois de preparar o hardware como mencionado acima, use fios jumper para conectar a interface SPI do XIAO e do OLED. Consulte a tabela a seguir para realizar a fiação.
| XIAO RP2350 | OLED Display |
|---|---|
| D8 | SCL |
| D10 | SI |
| D5 | RES |
| D4 | D/C |
| D7 | CS |
| VCC(VBUS) | 5V |
| GND | GND |
Implementação de Software
Em seguida, tomaremos o seguinte programa como exemplo para apresentar como usar a interface SPI para controlar a exibição do OLED.
Instale a biblioteca u8g2.
#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
#include <Wire.h>
U8G2_SH1107_128X128_1_4W_HW_SPI u8g2(U8G2_R3, /* cs=*/ D7, /* dc=*/ D4, /* reset=*/ D5);
void setup(void) {
u8g2.begin();
}
void loop(void) {
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_luBIS08_tf);
u8g2.drawStr(0,24,"Hello Seeed!");
} while ( u8g2.nextPage() );
}
Na função setup(), a classe U8G2_SH1107_128X128_1_4W_HW_SPI é instanciada com os argumentos de construtor apropriados que especificam os pinos usados para chip select (cs), data/command (dc) e reset. Em seguida, a função u8g2.begin() é chamada para inicializar o display.
Na função loop(), o display é atualizado com novo conteúdo usando as funções u8g2.firstPage(), u8g2.setFont() e u8g2.drawStr(). A função u8g2.firstPage() configura o buffer de exibição para escrita, enquanto u8g2.nextPage() exibe o conteúdo atualizado. O loop do-while garante que o conteúdo seja exibido continuamente até que o programa seja interrompido.
De modo geral, este código demonstra como usar a biblioteca U8g2 para controlar um display OLED e exibir texto nele.

Finalizando
Você aprendeu as funções básicas dos pinos do XIAO RP2350. Agora, vamos nos divertir com ele~

Suporte Técnico e Discussão de Produto
Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.






_V3.0/img/10402050_Main-02.png)