M5Stack U197 · Unit AudioPlayer

Unit AudioPlayer N9301

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.

InterfaceUART 9600 8N1
Alimentação5 V · 25 mA
FormatosMP3 · WAV
CartãomicroSD ≤ 32 GB
Sistema de arquivosFAT16/FAT32
SaídaP2 3,5 mm (linha)

Conector Grove do 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.

GNDPreto · terra comum
5VVermelho · alimentação
TX do móduloAmarelo · vai no RX da placa
RX do móduloBranco · vai no TX da placa
Confira antes de ligar. Revendedores publicam a ordem amarelo/branco invertida. Se o módulo não responder, troque os dois fios de dados: a inversão não causa dano. A lógica é 3,3 V no padrão M5Stack, mas meça o pino TX com multímetro antes de ligar em uma placa que não tolera 5 V (Raspberry Pi).

Raspberry Pi (3, 4, 5, Zero 2 W)

Cabo Grove → jumper fêmea
Pino físicoFunção no PiFioMódulo
25Vvermelho5V
6GNDpretoGND
8GPIO14 · TXDbrancoRX
10GPIO15 · RXDamareloTX
  • Em sudo raspi-config, abra Interface Options → Serial Port. Responda não ao login shell e sim ao hardware serial. Reinicie.
  • Use /dev/serial0. No Pi 5, o UART dos pinos 8/10 aparece como /dev/ttyAMA0.
  • Os GPIOs do Pi não toleram 5 V. Se o TX do módulo medir 5 V, coloque um divisor 1 kΩ/2 kΩ antes do pino 10.
  • Alternativa sem GPIO: adaptador USB-TTL (CP2102/CH340) em /dev/ttyUSB0.
player.py · pip install pyserial
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

CYD · ESP32-2432S028R

P1 (energia) + CN1 (dados)
ConectorPinoFioMódulo
P1VIN (5V)vermelho5V
P1GNDpretoGND
CN1IO27 → TXbrancoRX
CN1IO22 → RXamareloTX
  • Não use TX/RX do P1 (IO1/IO3): é o UART0, ligado ao USB. Ele conflita com upload e monitor serial.
  • O CN1 só fornece 3,3 V. Os 5 V vêm do pino VIN do P1 quando a placa está no USB.
  • IO22 e IO27 são os GPIOs livres mais seguros. Display, touch e SD já ocupam os demais.
  • Existem revisões da CYD com pinagem diferente (duas USB, versão com ST7789). Confira a serigrafia da sua.
cyd_audio.ino · biblioteca M5Unit-AudioPlayer
#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)
}

Cardputer ADV (Stamp-S3A)

Plug-and-play pelo Grove
Grove CardputerUsoFioMódulo
5Valimentaçãovermelho5V
GNDterrapretoGND
G2RX do ESP32amareloTX
G1TX do ESP32brancoRX
  • Basta o cabo que vem com o módulo. Se não responder, inverta os pinos no código (1, 2), sem mexer no cabo.
  • Com M5Unified, chame M5.Power.setExtOutput(true) para garantir os 5 V no Grove quando estiver na bateria.
  • O ADV já tem alto-falante e P2 próprios. O módulo compensa para um segundo canal de áudio, um banco de sons separado ou para liberar o S3 da decodificação.
  • Também funciona pelo UiFlow2, com o bloco Unit AudioPlayer.
cardputer_audio.ino · M5Unified + M5Unit-AudioPlayer
#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(); }

Protocolo N9301

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çãoCMDSubcomando / dadosMétodo na biblioteca Arduino
Controle de reprodução0401 tocar · 02 pausar · 03 parar · 04 anterior · 05 próximaplayAudio(), pauseAudio(), stopAudio(), previousAudio(), nextAudio()
Tocar faixa por índice0406 · índice (2 bytes, MSB primeiro)playAudioByIndex(n)
Status0400checkPlayStatus()
Volume0600 consultar · 01 · nívelgetVolume(), setVolume(v)
Modo de repetição0B00 consultar · 01 · modo 0–6getPlayMode(), setPlayMode(m)
Tempo total0500getTotalPlayTime(buf)
Temporização. O fabricante recomenda esperar 5 s após ligar antes do primeiro comando e manter pelo menos 500 ms entre comandos. Cada pacote tem no máximo 32 bytes.

Outros dispositivos compatíveis

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.

DispositivoComo ligarLógicaObservação
Ecossistema M5Stack (cabo Grove direto)
Core Basic / Core2 / CoreS3Grove Port A ou C3,3 VExemplos oficiais da biblioteca rodam sem alteração.
AtomS3 / AtomS3R / Atom LiteGrove do Atom3,3 VUART em qualquer um dos dois GPIOs do Grove.
M5StickC Plus2Grove (G32/G33)3,3 VBom para controle remoto de avisos sonoros.
M5Dial · NanoC6 · StampS3Grove ou pinos do Stamp3,3 VO Dial serve como botão giratório de volume e faixa.
Cardputer (original)Grove G1/G23,3 VMesma ligação do ADV.
ESP32 e similares
ESP32 DevKitC / WROOMUART2 (G16 RX / G17 TX), 5 V do pino VIN3,3 VA escolha mais barata para um tocador dedicado.
ESP32-S3 / C3 / C6Qualquer par de GPIOs via HardwareSerial3,3 VNo C3 só há um UART extra além do USB.
Seeed XIAO (ESP32-C3/S3, RP2040)D6 TX / D7 RX, pino 5V3,3 VCom o Grove Shield para XIAO, liga com o cabo original.
ESP8266 (Wemos D1 mini)SoftwareSerial em D5/D63,3 VO UART de hardware fica com o USB. 9600 baud funciona bem em software.
Home Assistant via ESPHomeComponente uart: + ação uart.write3,3 VEnvie os bytes da calculadora acima para ter avisos por voz na automação.
Microcontroladores RP2040 / STM32 / Arduino
Raspberry Pi Pico / Pico W / Pico 2UART0: GP0 TX / GP1 RX, 5 V do VBUS3,3 VEm MicroPython, machine.UART(0, 9600) e a mesma função cmd() do Pi.
STM32 Blue Pill / Black PillUSART1 (PA9/PA10) ou USART23,3 V5 V do pino 5V quando alimentado por USB.
Arduino Uno / Nano / Uno R4SoftwareSerial (Uno/Nano) ou Serial1 (R4)5 VDivisor 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 2560Serial1–Serial35 VMesmo cuidado com o divisor de tensão.
Arduino Nano ESP32Serial1 em D0/D13,3 V5 V disponível no pino VBUS.
micro:bit v2Placa de expansão, uart.init(9600, tx=pin0, rx=pin1)3,3 VPrecisa 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 PiUART do header de 40 pinos3,3 VHabilite o overlay de UART (armbian-config ou equivalente).
NVIDIA Jetson Nano / Orin NanoPinos 8/10 (/dev/ttyTHS1)3,3 VMesmo script Python do Raspberry Pi.
PC ou notebookAdaptador USB-TTL (CP2102, CH340, FT232)3,3 VO jeito mais rápido de testar o cartão e os comandos antes de montar o projeto.
Node-RED no PiNó serial out com buffer binário—Dispara áudios a partir de MQTT, webhooks ou sensores.

Saída de áudio

O P2 entrega nível de linha. Ele não aciona alto-falante passivo com volume útil.

DestinoLigaçãoQuando usar
Caixa de som amplificada / foneCabo P2–P2 diretoProtó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 VAlarmes industriais, avisos em ambientes grandes.
Mesa de som / sistema de PAP2 → 2 × RCAGuias de voz em eventos e museus.
Ruído de fundo. Com o amplificador e o microcontrolador na mesma fonte, um chiado costuma indicar laço de terra. Use um único ponto de GND e, se preciso, um capacitor de 470 µF na entrada de 5 V do amplificador.

Problemas comuns

Não responde a nenhum comando

Troque amarelo e branco. Confirme 9600 baud e os 5 s de espera após ligar.

Responde, mas não toca

Formate o cartão em FAT32, use no máximo 32 GB e grave os arquivos na raiz.

Toca a faixa errada

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

Comandos ignorados em sequência

Mantenha 500 ms entre comandos e limpe o buffer de entrada antes de cada envio.

Som muito baixo

Saída de linha precisa de amplificador. Suba o volume com 06 F9 02 01 nível.

Reinicia ao tocar

A fonte está no limite. Alimente os 5 V por uma fonte de pelo menos 1 A quando houver amplificador no mesmo barramento.