buzzer-alarme.ino
Un evento cloud "alarme" dispara una sirena de dos tonos en un zumbador pasivo, y "off" la detiene. El patrón sonoro no bloquea (tone con duración + paso de 200 ms), así la alarma sigue controlable mientras suena.
Hardware
Un módulo Particle Photon (Wi-Fi 2,4 GHz, microcontrolador STM32, blindaje metálico) alimentado por USB o VIN. 1 zumbador pasivo de 3,3-5 V.
Cableado
Zumbador entre D6 y GND. tone() genera la frecuencia; un zumbador activo no valdría (pitido fijo).
Funcionamiento
Particle.subscribe ejecuta el handler en cada evento "alarme"; loop() alterna dos frecuencias cada 200 ms sin bloquear nunca el enlace cloud.
Ejecución
Con el CLI de Particle: particle flash --serial (modo DFU, doble reset) o flash OTA cuando la placa esté en línea. El Safe Mode (reset + WiFi) sirve para depurar.
Variantes
Añadir un botón local de silencio, o hacer parpadear el LED D7 sincronizado con el sonido.
buzzer-alarme.ino
// Buzzer passif sur D6 : sequence d'alarme declenchee par evenement.
const int BUZZER = D6;
bool alarme = false;
void surEvenement(String event, String data) {
if (data == "on") alarme = true;
if (data == "off") alarme = false;
}
void setup() {
pinMode(BUZZER, OUTPUT);
Particle.subscribe("alarme", surEvenement, MY_DEVICES);
Serial.begin(9600);
}
void loop() {
static uint32_t t0 = 0;
static int etape = 0;
if (millis() - t0 < 200) return;
t0 = millis();
if (alarme) {
// Motif deux tons repetes (la, si, la, si...).
static const int NOTES[] = {440, 587};
tone(BUZZER, NOTES[etape % 2], 180);
etape++;
} else {
noTone(BUZZER);
}
}
// Declencher depuis une autre carte ou l'API :
// Particle.publish("alarme", "on", 60, PRIVATE);