bouton-evenement.ino
Chaque appui publie un événement JSON vers le cloud Particle, consultable par d'autres cartes (abonné) ou par un webhook. Le montage anti-rebond est identique à l'Arduino nu : le framework ajoute juste la couche publish.
Matériel requis
Un module Particle Boron (nRF52840, Wi-Fi + Bluetooth LE, variante cellulaire le cas échéant) avec antenne embarquée. 1 bouton poussoir entre D2 et GND.
Câblage
Bouton entre D2 et GND ; la résistance de tirage est interne (INPUT_PULLUP).
Fonctionnement
Après validation du front (30 ms), snprintf construit une trame JSON et Particle.publish l'envoie au cloud. Les abonnés (Particle.subscribe) et webhooks la reçoivent en temps quasi réel.
Exécution
Installer le CLI Particle (particle setup), particle flash --serial ou OTA (particle flash <nom> firmware.bin). L'application Device Cloud ou l'API REST complete le deploiement.
Variantes
Publier aussi la température interne (getTemperature), ou déclencher une action locale sur un événement reçu (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.
}
}
}