bouton-evenement.ino
Cada pulsación publica un evento JSON hacia la nube Particle, consultable por otras placas (suscritas) o por un webhook. El montaje antirrebote es igual que en Arduino puro: el framework solo añade la capa publish.
Hardware
Un módulo Particle Boron (nRF52840, Wi-Fi + Bluetooth LE, variante celular si procede) con antena integrada. 1 botón pulsador entre D2 y GND.
Cableado
Botón entre D2 y GND; la resistencia de pull-up es interna (INPUT_PULLUP).
Funcionamiento
Tras validar el flanco (30 ms), snprintf construye una trama JSON y Particle.publish la envía a la nube. Los suscriptores (Particle.subscribe) y webhooks la reciben casi en tiempo real.
Ejecución
Instala el CLI de Particle (particle setup), graba con particle flash --serial u OTA (particle flash <nombre> firmware.bin). La app Device Cloud o la API REST completan el despliegue.
Variantes
Publicar también la temperatura interna (getTemperature), o disparar una acción local ante un evento recibido (subscribe + handler).
bouton-evenement.ino
// Bouton sur D2 : publish d'un evenement cloud a chaque appui.
int bouton = D2; // bouton vers GND, patte libre sur D2
bool etatPrecedent = HIGH;
unsigned long dernierBord = 0;
void setup() {
pinMode(bouton, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
bool lecture = digitalRead(bouton);
unsigned long maintenant = millis();
if (lecture != etatPrecedent) {
dernierBord = maintenant;
}
if (maintenant - dernierBord >= 30 && lecture != etatPrecedent) {
etatPrecedent = lecture;
if (lecture == LOW) { // appui (PULLUP -> LOW)
char trame[48];
snprintf(trame, sizeof(trame),
"{\"appui\":%lu,\"uptime\":%lu}",
millis(), millis());
bool ok = Particle.publish("bouton-presse", trame, 60, PUBLIC);
Serial.println(ok ? "evenement publie" : "publication refusee");
// NB : limite de flux cloud ~1 publish/s : ne pas spammer.
}
}
}