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 Photon (Wi-Fi 2,4 GHz, microcontrôleur STM32, blindage métallique) alimenté par USB ou VIN. 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
Avec le CLI Particle : particle flash --serial (mode DFU, double reset) ou flash OTA une fois la carte en ligne. Le mode Safe Mode (reset + WiFi) sert au dépannage.
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.
}
}
}