Esquemas de ligação para Raspberry Pi, CYD (ESP32-2432S028R) e Cardputer ADV, com o protocolo serial, uma calculadora de pacotes e a lista de outras placas que controlam o módulo.
O cabo HY2.0-4P que vem na caixa segue a convenção de cores da M5Stack. As funções abaixo estão do ponto de vista do módulo: o TX dele vai no RX da sua placa, e vice-versa.
| Pino físico | Função no Pi | Fio | Módulo |
|---|---|---|---|
| 2 | 5V | vermelho | 5V |
| 6 | GND | preto | GND |
| 8 | GPIO14 · TXD | branco | RX |
| 10 | GPIO15 · RXD | amarelo | TX |
sudo raspi-config, abra Interface Options → Serial Port. Responda não ao login shell e sim ao hardware serial. Reinicie./dev/serial0. No Pi 5, o UART dos pinos 8/10 aparece como /dev/ttyAMA0./dev/ttyUSB0.import serial, time
ser = serial.Serial("/dev/serial0", 9600, timeout=0.5)
def cmd(c, *data):
pkt = [c, (~c) & 0xFF, len(data), *data]
pkt.append(sum(pkt) & 0xFF) # checksum: 8 bits baixos da soma
ser.reset_input_buffer()
ser.write(bytes(pkt))
time.sleep(0.5) # mínimo de 500 ms entre comandos
return ser.read(32)
time.sleep(5) # espera o N9301 iniciar
cmd(0x06, 0x01, 15) # volume 15
cmd(0x0B, 0x01, 0x04) # modo: toca uma vez e para
cmd(0x04, 0x06, 0x00, 0x01) # toca a faixa 1
print(cmd(0x04, 0x00).hex(" ")) # consulta status
| Conector | Pino | Fio | Módulo |
|---|---|---|---|
| P1 | VIN (5V) | vermelho | 5V |
| P1 | GND | preto | GND |
| CN1 | IO27 → TX | branco | RX |
| CN1 | IO22 → RX | amarelo | TX |
#include <unit_audioplayer.hpp>
AudioPlayerUnit player;
void setup() {
Serial.begin(115200);
delay(5000); // tempo de boot do N9301
while (!player.begin(&Serial2, 22, 27)) { // RX = IO22, TX = IO27
Serial.println("Aguardando o AudioPlayer...");
delay(1000);
}
player.setVolume(15);
player.setPlayMode(AUDIO_PLAYER_MODE_SINGLE_STOP);
player.playAudioByIndex(1);
}
void loop() {
// exemplo: tocar a faixa 2 ao tocar na tela (integre com seu handler de touch)
}
| Grove Cardputer | Uso | Fio | Módulo |
|---|---|---|---|
| 5V | alimentação | vermelho | 5V |
| GND | terra | preto | GND |
| G2 | RX do ESP32 | amarelo | TX |
| G1 | TX do ESP32 | branco | RX |
1, 2), sem mexer no cabo.M5Unified, chame M5.Power.setExtOutput(true) para garantir os 5 V no Grove quando estiver na bateria.#include <M5Unified.h>
#include <unit_audioplayer.hpp>
AudioPlayerUnit player;
void setup() {
auto cfg = M5.config();
M5.begin(cfg);
M5.Power.setExtOutput(true); // 5 V no Grove
delay(5000);
while (!player.begin(&Serial1, 2, 1)) { // RX = G2, TX = G1
delay(1000);
}
player.setVolume(15);
player.playAudioByIndex(1);
}
void loop() { M5.update(); }
Cada pacote tem o formato CMD · ~CMD · LEN · DADOS… · SOMA. A soma são os 8 bits baixos da adição de todos os bytes anteriores. Exemplo do datasheet para tocar a faixa 8: 04 FB 03 06 00 08 10.
| Função | CMD | Subcomando / dados | Método na biblioteca Arduino |
|---|---|---|---|
| Controle de reprodução | 04 | 01 tocar · 02 pausar · 03 parar · 04 anterior · 05 próxima | playAudio(), pauseAudio(), stopAudio(), previousAudio(), nextAudio() |
| Tocar faixa por índice | 04 | 06 · índice (2 bytes, MSB primeiro) | playAudioByIndex(n) |
| Status | 04 | 00 | checkPlayStatus() |
| Volume | 06 | 00 consultar · 01 · nível | getVolume(), setVolume(v) |
| Modo de repetição | 0B | 00 consultar · 01 · modo 0–6 | getPlayMode(), setPlayMode(m) |
| Tempo total | 05 | 00 | getTotalPlayTime(buf) |
Qualquer placa com um UART livre em 9600 baud e uma fonte de 5 V controla o módulo. Esta lista agrupa as opções por ecossistema, com o ponto de atenção de cada uma.
| Dispositivo | Como ligar | Lógica | Observação |
|---|---|---|---|
| Ecossistema M5Stack (cabo Grove direto) | |||
| Core Basic / Core2 / CoreS3 | Grove Port A ou C | 3,3 V | Exemplos oficiais da biblioteca rodam sem alteração. |
| AtomS3 / AtomS3R / Atom Lite | Grove do Atom | 3,3 V | UART em qualquer um dos dois GPIOs do Grove. |
| M5StickC Plus2 | Grove (G32/G33) | 3,3 V | Bom para controle remoto de avisos sonoros. |
| M5Dial · NanoC6 · StampS3 | Grove ou pinos do Stamp | 3,3 V | O Dial serve como botão giratório de volume e faixa. |
| Cardputer (original) | Grove G1/G2 | 3,3 V | Mesma ligação do ADV. |
| ESP32 e similares | |||
| ESP32 DevKitC / WROOM | UART2 (G16 RX / G17 TX), 5 V do pino VIN | 3,3 V | A escolha mais barata para um tocador dedicado. |
| ESP32-S3 / C3 / C6 | Qualquer par de GPIOs via HardwareSerial | 3,3 V | No C3 só há um UART extra além do USB. |
| Seeed XIAO (ESP32-C3/S3, RP2040) | D6 TX / D7 RX, pino 5V | 3,3 V | Com o Grove Shield para XIAO, liga com o cabo original. |
| ESP8266 (Wemos D1 mini) | SoftwareSerial em D5/D6 | 3,3 V | O UART de hardware fica com o USB. 9600 baud funciona bem em software. |
| Home Assistant via ESPHome | Componente uart: + ação uart.write | 3,3 V | Envie os bytes da calculadora acima para ter avisos por voz na automação. |
| Microcontroladores RP2040 / STM32 / Arduino | |||
| Raspberry Pi Pico / Pico W / Pico 2 | UART0: GP0 TX / GP1 RX, 5 V do VBUS | 3,3 V | Em MicroPython, machine.UART(0, 9600) e a mesma função cmd() do Pi. |
| STM32 Blue Pill / Black Pill | USART1 (PA9/PA10) ou USART2 | 3,3 V | 5 V do pino 5V quando alimentado por USB. |
| Arduino Uno / Nano / Uno R4 | SoftwareSerial (Uno/Nano) ou Serial1 (R4) | 5 V | Divisor 1 kΩ/2 kΩ entre o TX do Arduino e o RX do módulo. O RX do Arduino lê 3,3 V sem problema. |
| Arduino Mega 2560 | Serial1–Serial3 | 5 V | Mesmo cuidado com o divisor de tensão. |
| Arduino Nano ESP32 | Serial1 em D0/D1 | 3,3 V | 5 V disponível no pino VBUS. |
| micro:bit v2 | Placa de expansão, uart.init(9600, tx=pin0, rx=pin1) | 3,3 V | Precisa de fonte de 5 V externa. O micro:bit perde o console USB enquanto usa o UART. |
| Computadores de placa única e PC | |||
| Orange Pi / Radxa Rock / Banana Pi | UART do header de 40 pinos | 3,3 V | Habilite o overlay de UART (armbian-config ou equivalente). |
| NVIDIA Jetson Nano / Orin Nano | Pinos 8/10 (/dev/ttyTHS1) | 3,3 V | Mesmo script Python do Raspberry Pi. |
| PC ou notebook | Adaptador USB-TTL (CP2102, CH340, FT232) | 3,3 V | O jeito mais rápido de testar o cartão e os comandos antes de montar o projeto. |
| Node-RED no Pi | Nó serial out com buffer binário | — | Dispara áudios a partir de MQTT, webhooks ou sensores. |
O P2 entrega nível de linha. Ele não aciona alto-falante passivo com volume útil.
| Destino | Ligação | Quando usar |
|---|---|---|
| Caixa de som amplificada / fone | Cabo P2–P2 direto | Protótipos, testes, quiosques com caixa ativa. |
| PAM8403 (2 × 3 W, 5 V) | P2 → L/R/GND do amplificador, alto-falantes 4–8 Ω | Projetos embarcados pequenos alimentados pela mesma fonte de 5 V. |
| TPA3116 / PAM8610 (maior potência) | P2 → entrada de linha, fonte separada de 12–24 V | Alarmes industriais, avisos em ambientes grandes. |
| Mesa de som / sistema de PA | P2 → 2 × RCA | Guias de voz em eventos e museus. |
Troque amarelo e branco. Confirme 9600 baud e os 5 s de espera após ligar.
Formate o cartão em FAT32, use no máximo 32 GB e grave os arquivos na raiz.
O índice segue a ordem de gravação no cartão, não o nome. Copie os arquivos um a um, na ordem desejada (001.mp3, 002.mp3…).
Mantenha 500 ms entre comandos e limpe o buffer de entrada antes de cada envio.
Saída de linha precisa de amplificador. Suba o volume com 06 F9 02 01 nível.
A fonte está no limite. Alimente os 5 V por uma fonte de pelo menos 1 A quando houver amplificador no mesmo barramento.