Pular para o conteúdo principal

Multiplexação de Pinos com Seeed Studio XIAO MG24

O XIAO MG24 possui até 22 pinos regulares, 18 pinos analógicos, 18 pinos digitais, 2 SPI, 2 UART, 2 I2C e oferece suporte a todo PWM. Ele oferece uma grande variedade de pinos disponíveis para o nosso uso. Neste wiki, vou ensinar você a acionar esses pinos, permitindo que possamos utilizá-los de forma eficaz 😀!

Digital

Preparação de Hardware

Seeed Studio XIAO MG24 SenseSeeed Studio Expansion Base for XIAO with Grove OLEDGrove - Relay

Instale o XIAO MG24(Sense) na placa de expansão e conecte o relé à 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 do XIAO. Quando o botão for pressionado, o relé ligará, e quando o botão for solto, o relé desligará.

const int buttonPin = D1;     // the number of the pushbutton pin
int buttonState = 0; // variable for reading the pushbutton status
const int relayPin = D0;

void setup() {
// initialize the Relay pin as an output:
pinMode(relayPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);

// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn Relay on:
digitalWrite(relayPin, HIGH);
} else {
// turn Relay off:
digitalWrite(relayPin, LOW);
}
}

Gráfico de resultado

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 MG24(Sense) suportam saída PWM. Portanto, você pode usar qualquer pino para gerar PWM para ajustar o brilho de luzes, controlar servos e outras funções.

Preparação de Hardware

Seeed Studio XIAO MG24 SenseSeeed Studio Expansion Base for XIAO with Grove OLEDGrove - Variable Color LED
dica

Instale o XIAO MG24(Sense) na placa de expansão e, em seguida, conecte o Variable Color LED à interface A0/D0 da placa de expansão usando um cabo Grove. Por fim, conecte o XIAO ao computador através de 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);
}
}

Gráfico de resultado

Se o programa for executado com sucesso, você verá o seguinte efeito.

Analógico

A placa de desenvolvimento XIAO MG24(Sense) possui ADC de 12 bits para leitura de alta resolução de valores de sensores analógicos, o que nos ajuda a ler valores mais precisos.

Em seguida, escolheremos dois sensores para refletir as características do ADC.

Preparação de Hardware

Seeed Studio XIAO MG24 SenseGrove-Variable Color LEDGrove-Rotary Angle Sensor Seeed Studio Grove Base for XIAO

Implementação de Software

const int analogInPin = D1;  // Analog input pin that the potentiometer is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to

int sensorValue = 0; // value read from the pot
int outputValue = 0; // value output to the PWM (analog out)

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);
}
dica

Deve-se observar que, se você quiser usar DMA para ler sinais analógicos, a versão da sua biblioteca precisa ser superior a 2.2.0. Atualmente, a nova versão ainda não foi aprovada e você precisa instalá‑la manualmente.

Gráfico de resultado

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 a tecla de atalho Ctrl+Shift+M.

Uso geral de Serial

Algumas das funções Serial mais usadas incluem:

  • Serial.begin() -- que inicializa a comunicação em uma taxa de baud específica;
  • 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 aguarda a conclusão da transmissão dos dados seriais de saí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);
}

Uso do Serial1

De acordo com os diagramas de pinos do XIAO MG24(Sense) acima, para parâmetros específicos, podemos observar que há um pino TX e um pino RX. Isso é diferente da comunicação Serial, mas o uso também é muito semelhante, exceto que alguns parâmetros precisam ser adicionados. Portanto, a seguir, usaremos os pinos expostos pelo chip para comunicação 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) 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 MG24 SenseSeeed Studio Expansion Base for XIAO with Grove OLED

O display OLED na placa de expansão XIAO usa o protocolo I2C e é conectado à interface I2C do XIAO por meio do circuito I2C da placa. Portanto, podemos simplesmente encaixar o XIAO na placa de expansão e programá‑lo para exibir conteúdo na tela.

Implementação de software

Este exemplo apresenta como usar o display OLED na Seeed Studio Expansion Base para XIAO MG24(Sense).

Etapa 1. Instale o Seeed Studio XIAO MG24(Sense) na placa de expansão e conecte o cabo Type‑C.

Etapa 2. Instale a biblioteca u8g2.

Etapa 3. Copie o código e cole na Arduino IDE e, em seguida, envie‑o.

  • Baixe o arquivo zip abaixo

📄 [ZIP] Cabeçalho smiley_face

  • Crie um arquivo de cabeçalho chamado "smiley_face. h" e copie o conteúdo do arquivo zip baixado para o arquivo de cabeçalho que você criou
#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]);
}
}

Gráfico de resultados

SPI

O chip XIAO MG24(Sense) 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 mais.

Visão geral da biblioteca Arduino


Com base no programa de exemplo do Arduino fornecido pela Waveshare, escrevemos uma biblioteca Arduino para uso com toda a série XIAO, e você pode ir diretamente para o Github dessa biblioteca através do botão abaixo.

Preparação de hardware

Seeed Studio XIAO MG24 SenseDisplay LCD SPI de 1,69 polegadas

Conexão de pinos

Depois de preparar o hardware conforme mencionado acima, use jumpers para conectar a interface SPI do XIAO e do OLED. Consulte o diagrama a seguir para o método de fiação.

Instalação

Como você já baixou a biblioteca zip, abra o Arduino IDE, clique em Sketch > Include Library > Add .ZIP Library. Escolha o arquivo zip que você acabou de baixar e, se a biblioteca for instalada corretamente, você verá Library added to your libraries na janela de aviso. Isso significa que a biblioteca foi instalada com sucesso.

Implementação de software

Após baixar e instalar a biblioteca corretamente, você pode encontrar dois programas de exemplo chamados helloworld.ino e bgcolor.ino na pasta de exemplos. O bgcolor.ino é um exemplo para mostrar a cor de fundo, definimos o vermelho como padrão. E o helloworld.ino é um exemplo para mostrar a animação sobre o logotipo da nossa empresa, e este exemplo contém o efeito que o exemplo bgcolor possui.

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

st7789v2 Display;

void setup() {
// put your setup code here, to run once:
Display.SetRotate(270);
Display.Init();
Display.SetBacklight(100);
Display.Clear(WHITE);
}

void loop() {
// put your main code here, to run repeatedly:
// 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);
}

Você verá o logotipo da Seeed Studio impresso dinamicamente no display.

Finalizando

Você aprendeu as funções básicas dos pinos do XIAO MG24 (Sense). Agora, vamos explorar ainda mais os sensores integrados.

Suporte técnico e discussão sobre o 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.

Loading Comments...