Ligne 21 : |
Ligne 21 : |
| La sortie du senseur PIR est une '''sortie active''' qui place le potentiel à GND/Masse ou 3.3V en fonction de l'état du senseur PIR. | | La sortie du senseur PIR est une '''sortie active''' qui place le potentiel à GND/Masse ou 3.3V en fonction de l'état du senseur PIR. |
| | | |
− | [[fichier:SPARK-PIR_bb.jpg|640px]] | + | Cette sortie est donc compatible avec un système 3.3v, même si le senseur a besoin de 5 volts pour fonctionner correctement. En branchant l'alimentation du senseur sur la broche VIN, nous y récupérons une tension de 5V lorsque le Particle Core est alimenté via USB (5V) ou via {{underline|une source de tension externe 5V}} branchée directement sur VIN. |
| + | |
| + | [[fichier:SPARK-PIR_bb.jpg|480px]] |
| | | |
| Lorsque le senseur PIR détecte une activité, il active sa sortie, ce qui applique 3.3V sur la broche D4. Cette sortie PIR reste active pendant plusieurs secondes... à la suite de quoi le potentiel est ramené la masse (broche D4 est donc à 0 volt). | | Lorsque le senseur PIR détecte une activité, il active sa sortie, ce qui applique 3.3V sur la broche D4. Cette sortie PIR reste active pendant plusieurs secondes... à la suite de quoi le potentiel est ramené la masse (broche D4 est donc à 0 volt). |
− |
| + | |
| == Code == | | == Code == |
| Voici le petit bout de code pour votre Core | | Voici le petit bout de code pour votre Core |
Ligne 35 : |
Ligne 37 : |
| // 1) De détecter l'activation d'un senseur PIR avec | | // 1) De détecter l'activation d'un senseur PIR avec |
| // avec déparasitage logiciel. | | // avec déparasitage logiciel. |
− | // 2) Reporte cette information dans une variable "counter" sur Spark Cloud | + | // 2) Reporte cette information dans une variable "counter" sur Particle Cloud |
| // (le nombre de détection) permettant à un autre logiciel comme | | // (le nombre de détection) permettant à un autre logiciel comme |
| // un SmartPhone de détecter l'événement. | | // un SmartPhone de détecter l'événement. |
Ligne 42 : |
Ligne 44 : |
| // Pratique par exemple pour savoir s'il y a de l'activité dans une | | // Pratique par exemple pour savoir s'il y a de l'activité dans une |
| // pièce (ex: surveiller un stock en pleine nuit). | | // pièce (ex: surveiller un stock en pleine nuit). |
− | // 3) Offrir une fonction "reset" sur Spark Cloud permettant | + | // 3) Offrir une fonction "reset" sur Particle Cloud permettant |
| // a un autre logiciel de remettre le compteur "counter" à zéro. | | // a un autre logiciel de remettre le compteur "counter" à zéro. |
| // Force la relecture de l'entrée digital et la mise à jour | | // Force la relecture de l'entrée digital et la mise à jour |
Ligne 53 : |
Ligne 55 : |
| // | | // |
| // Sortie du senseur PIR branché sur la broche D4 | | // Sortie du senseur PIR branché sur la broche D4 |
− | #define btnPin 4 | + | #define pirPin 4 |
| | | |
| // Créer une variable qui pour stocker la valeur | | // Créer une variable qui pour stocker la valeur |
Ligne 65 : |
Ligne 67 : |
| void setup() | | void setup() |
| { | | { |
− | // Enregistrer la variable compteur sur Spark Cloud | + | // Enregistrer la variable compteur sur Particle Cloud |
| Spark.variable("counter", &counter, INT ); | | Spark.variable("counter", &counter, INT ); |
− | // Publie l'état du contact dans la variable "close" sur Spark Cloud | + | // Publie l'état du contact dans la variable "close" sur Particle Cloud |
− | Spark.variable("close", &contactState, INT ); | + | Spark.variable("actif", &pirState, INT ); |
| | | |
− | // Enregistrer la fonction "reset compteur" sur Spark Cloud | + | // Enregistrer la fonction "reset compteur" sur Particle Cloud |
| Spark.function("reset", resetCounter ); | | Spark.function("reset", resetCounter ); |
| | | |
| // Active la broche D4 comme entrée | | // Active la broche D4 comme entrée |
− | pinMode(btnPin, INPUT); | + | pinMode(pirPin, INPUT); |
| // lecture de l'état initial | | // lecture de l'état initial |
− | contactState = digitalRead( btnPin ); | + | pirState = digitalRead( pirPin ); |
| } | | } |
| | | |
Ligne 84 : |
Ligne 86 : |
| int val, val2; // variable pour stocker la valeur lue sur la broche D4 | | int val, val2; // variable pour stocker la valeur lue sur la broche D4 |
| | | |
− | val = digitalRead( btnPin ); | + | val = digitalRead( pirPin ); |
| delay( 10 ); // delai de 10ms pour déparasitage logiciel | | delay( 10 ); // delai de 10ms pour déparasitage logiciel |
− | val2 = digitalRead( btnPin ); | + | val2 = digitalRead( pirPin ); |
| | | |
| // si val = val2 --> lecture de l'entrée est consistante | | // si val = val2 --> lecture de l'entrée est consistante |
Ligne 94 : |
Ligne 96 : |
| | | |
| // Si le contact a changé d'état? (passe du HIGH->LOW ou de LOW->HIGH) | | // Si le contact a changé d'état? (passe du HIGH->LOW ou de LOW->HIGH) |
− | if( val != contactState ){ | + | if( val != pirState ){ |
| | | |
− | // Si le contact est ouvert | + | // Si le PIR est actif |
− | if( val == LOW ){ | + | if( val == HIGH ){ |
| | | |
| counter = counter +1; // incrémenter le compteur | | counter = counter +1; // incrémenter le compteur |
Ligne 103 : |
Ligne 105 : |
| | | |
| // Se souvenir du nouvel état de l'entrée | | // Se souvenir du nouvel état de l'entrée |
− | contactState = val; | + | pirState = val; |
| } | | } |
| | | |
Ligne 113 : |
Ligne 115 : |
| // Pas de chaine de commande. | | // Pas de chaine de commande. |
| // a) Réinitialise le compteur "counter" à zéro. | | // a) Réinitialise le compteur "counter" à zéro. |
− | // b) mise-à-jour de la variable open. | + | // b) mise-à-jour de la variable actif. |
| int resetCounter( String command ){ | | int resetCounter( String command ){ |
| counter = 0; | | counter = 0; |
| | | |
| // relecture de l'entrée | | // relecture de l'entrée |
− | contactState = digitalRead( btnPin ); | + | pirState = digitalRead( pirPin ); |
| delay( 10 ); // déparasitage logiciel | | delay( 10 ); // déparasitage logiciel |
− | contactState = digitalRead( btnPin ); | + | pirState = digitalRead( pirPin ); |
| | | |
| return 1; // retour de valeur pour l'API | | return 1; // retour de valeur pour l'API |
Ligne 126 : |
Ligne 128 : |
| | | |
| == Faire un appel d'API avec CURL == | | == Faire un appel d'API avec CURL == |
− | Nous allons maintenant tester notre programme... nous allons donc faire des appels d'API sur Spark Cloud. | + | Nous allons maintenant tester notre programme... nous allons donc faire des appels d'API sur Particle Cloud. |
| | | |
| Pour rappel, nous avons deux API dans notre programme: | | Pour rappel, nous avons deux API dans notre programme: |
− | * '''counter''' (variable) - permet de savoir combien de fois le contact magnétique à été ouvert. | + | * '''counter''' (variable) - permet de savoir combien de fois le senseur PIR à été activé. |
− | * '''close''' (variable) - permet de savoir si le contact magnétic est fermé (close=1). | + | * '''actif''' (variable) - permet de savoir si le le senseur PIR est actif. |
| * '''reset''' (function) - sans paramètre, permet de réinitialiser le compteur à 0 mais aussi de reforcer la lecture de l'entrée :-) | | * '''reset''' (function) - sans paramètre, permet de réinitialiser le compteur à 0 mais aussi de reforcer la lecture de l'entrée :-) |
| | | |
Ligne 139 : |
Ligne 141 : |
| <nowiki>curl -G https://api.spark.io/v1/devices/0123456789abcdef/counter -d access_token=123412341234</nowiki> | | <nowiki>curl -G https://api.spark.io/v1/devices/0123456789abcdef/counter -d access_token=123412341234</nowiki> |
| | | |
− | Ce qui produit le résultat ci-dessous, où vous pouvez constater que nous avons ouvert 5 fois le contact: | + | Ce qui produit le résultat ci-dessous, où vous pouvez constater que nous avons activé 5 fois le senseur PIR: |
| | | |
| <nowiki>{ | | <nowiki>{ |
Ligne 153 : |
Ligne 155 : |
| }</nowiki> | | }</nowiki> |
| | | |
− | === L'état du contact === | + | === L'état du senseur === |
− | Pour commencer, nous allons récupérer l'état du contact magnétique en utilisant curl (voyez nos précédents tutoriels concernant CURL). | + | Pour commencer, nous allons récupérer l'état du senseur PIR en utilisant curl (voyez nos précédents tutoriels concernant CURL). |
| | | |
− | <nowiki>curl -G https://api.spark.io/v1/devices/0123456789abcdef/close -d access_token=123412341234</nowiki> | + | <nowiki>curl -G https://api.spark.io/v1/devices/0123456789abcdef/actif -d access_token=123412341234</nowiki> |
| | | |
− | Ce qui produit le résultat ci-dessous, où vous pouvez constater que le contact est actuellement ouvert (a priori, la porte est ouverte): | + | Ce qui produit le résultat ci-dessous, où vous pouvez constater que le senseur est actuellement actif (a priori, quelqu'un est passé dans le champs de détection): |
| | | |
| <nowiki>{ | | <nowiki>{ |
| "cmd": "VarReturn", | | "cmd": "VarReturn", |
− | "name": "close", | + | "name": "actif", |
| "result": 1, | | "result": 1, |
| "coreInfo": { | | "coreInfo": { |
Ligne 173 : |
Ligne 175 : |
| | | |
| === Réinitialiser le compteur === | | === Réinitialiser le compteur === |
− | Idéalement votre programme utilisant l'API Spark devrait prendre la valeur du compteur... puis surveiller le changement de cette valeur. | + | Idéalement votre programme utilisant l'API Particle devrait prendre la valeur du compteur... puis surveiller le changement de cette valeur. |
| | | |
− | Si le compteur augmente... c'est que l'on a ouvert le contact (la porte) :-) | + | Si le compteur augmente... c'est qu'il détecte des mouvement (des personnes passent par là) :-) |
| | | |
| Restons pragmatique... cette façon de faire n'est pas forcement confortable. | | Restons pragmatique... cette façon de faire n'est pas forcement confortable. |
| | | |
− | En conséquence, nous avons ajouté une fonction '''reset''' sur Spark Cloud pour réinitialiser le compteur (ps: j'ai volontairement laissé le paramètre "params", même s'il est vide). | + | En conséquence, nous avons ajouté une fonction '''reset''' sur Particle Cloud pour réinitialiser le compteur (ps: j'ai volontairement laissé le paramètre "params", même s'il est vide). |
| | | |
| <nowiki>curl https://api.spark.io/v1/devices/0123456789abcdef/reset -d access_token=123412341234 -d params=</nowiki> | | <nowiki>curl https://api.spark.io/v1/devices/0123456789abcdef/reset -d access_token=123412341234 -d params=</nowiki> |
Ligne 193 : |
Ligne 195 : |
| }</nowiki> | | }</nowiki> |
| | | |
− | La valeur 1 est retournée par l'exécution de la fonction sur le Spark... mais le compteur sera bien à zéro! | + | La valeur 1 est retournée par l'exécution de la fonction sur le Particle... mais le compteur sera bien à zéro! |
| | | |
| {{Spark-Core-Hacking-TRAILER}} | | {{Spark-Core-Hacking-TRAILER}} |