servo-cloud.ino
Le servo se tourne par simple appel cloud (Particle.function "tourner") et sa position reste lisible en variable. La routine de retour au centre après deux minutes montre comment donner une autonomie raisonnable à un actionneur connecté.
Matériel requis
Un module Particle Boron (nRF52840, Wi-Fi + Bluetooth LE, variante cellulaire le cas échéant) avec antenne embarquée. 1 servo d'angle (SG90) + alimentation externe 5 V conseillée.
Câblage
Signal du servo sur A1, + sur 5 V externe, - sur GND commun avec la carte.
Fonctionnement
La bibliothèque Servo génère l'impulsion 50 Hz ; tourner() valide la consigne 0-180, la pousse au servo et la renvoie au cloud. La variable position reste interrogable à tout moment.
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
Ajouter des positions mémorisées ("home", "scan"), ou enchaîner une série de positions pour un geste répété.
servo-cloud.ino
// Servo d'angle sur A1, position commandee par Particle.function.
#include "Servo.h"
Servo myservo;
int position = 90;
int tourner(String args) {
int v = args.toInt();
if (v < 0 || v > 180) return -1;
position = v;
myservo.write(position);
return position;
}
void setup() {
myservo.attach(A1); // signal du servo sur A1
myservo.write(position);
Particle.function("tourner", tourner);
Particle.variable("position", position);
Serial.begin(9600);
}
void loop() {
// Petite routine : revenir au centre apres 2 min sans commande.
static unsigned long dernierOrdre = 0;
if (position != 90 && millis() - dernierOrdre > 120000) {
dernierOrdre = millis();
tourner("90");
}
// Met a jour la reference du temps a chaque commande recue.
static int dernierePos = 90;
if (position != dernierePos) {
dernierePos = position;
dernierOrdre = millis();
}
}
// Commande : Particle.function "tourner" avec "45", "90", "135".