melodie.ino
El pequeño amplificador I2S de la carcasa toca tonos cuadrados: frecuencia + duración y sale la melodía. Pulsar C para dispararla: el retorno sonoro perfecto de una alarma o un menú.
Hardware necesario
Un M5Stack Core Basic/Gray (ESP32 en carcasa con TFT de 320×240, botones A/B/C, altavoz, ranura microSD, batería de 110 mAh). Ninguno.
Cableado
Sin cableado; el altavoz de 1 W va enganchado en la carcasa. Volumen con M5.Speaker.setVolume (0-255).
Funcionamiento
M5.Speaker.tone genera la cuadrada en el driver I2S; la duración va en ms. El pequeño retardo entre notas evita que las tramas se peguen en el búfer DMA. En el Arduino IDE (paquete esp32), placa « M5Stack-Core-ESP32 »; instale la biblioteca « M5Stack » (o M5Unified) desde el gestor y suba.
Para ir más lejos
Un carillón de temperatura (frecuencia = valor), o tocar los 8 bits de un port como escala para depuración audio.
melodie.ino
// Buzzer/speaker 3 W via I2S (NS4168) — bibliotheque M5Stack.
#include <M5Stack.h>
struct Note { uint16_t freq; uint16_t duree; };
Note melody[] = {
{523, 200}, {659, 200}, {784, 200}, {1047, 400}, // do mi sol do'
{784, 150}, {659, 150}, {523, 300}, {0, 200}, // descente + pause
};
const int NB = sizeof(melody) / sizeof(Note);
void setup() {
M5.begin(true, false, true, false); // lcd, sd, speaker, power
M5.Power.setSpeakerMute(false);
Serial.begin(115200);
}
void loop() {
M5.update();
if (M5.BtnC.wasPressed()) {
Serial.println("Joue la melodie");
for (int i = 0; i < NB; i++) {
if (melody[i].freq) M5.Speaker.tone(melody[i].freq, melody[i].duree);
else delay(melody[i].duree);
delay(20); // laisse la trame I2S partir
}
}
delay(10);
}