Modifications

Sauter à la navigation Sauter à la recherche
5 742 octets ajoutés ,  24 octobre 2015 à 13:15
aucun résumé de modification
Ligne 1 : Ligne 1 :  
{{Spark-Core-Hacking-NAV}}
 
{{Spark-Core-Hacking-NAV}}
  −
{{traduction}}
      
== Mesurer la température ==
 
== Mesurer la température ==
{{bloc-etroit|text=Jusqu'ici nous avons appris comment envoyer des commandes personnalisée à note Core et comment contrôler la matériel.  
+
{{bloc-etroit|text=Jusqu'ici nous avons appris comment envoyer des commandes personnalisée à note Core et comment contrôler le matériel.  
    
Mais comment lire des données sur notre Core?
 
Mais comment lire des données sur notre Core?
Ligne 65 : Ligne 63 :  
Tester le senseur est vraiment simple mais vous aurez besoin d'un bloc de piles (ou d'une alimentation).
 
Tester le senseur est vraiment simple mais vous aurez besoin d'un bloc de piles (ou d'une alimentation).
   −
Connectre une alimentation de 2.7 à 5.5V (2-4 piles AA fonctionnent bien) de façon à ce que la masse (GND) soit connecté sur la broche 3 (pin 3, celle de droite), et l'alimentation sur la broche 1 (pin 1, celle de gauche)
+
Connecter une alimentation de 2.7 à 5.5V (2-4 piles AA fonctionnent bien) de façon à ce que la masse (GND) soit connecté sur la broche 3 (pin 3, celle de droite), et l'alimentation sur la broche 1 (pin 1, celle de gauche)
    
Raccordez ensuite un multimètre (en position mesure de tension continue) entre la masse (GND) et la broche 2 restée libre (pin 2, au milieu).
 
Raccordez ensuite un multimètre (en position mesure de tension continue) entre la masse (GND) et la broche 2 restée libre (pin 2, au milieu).
Ligne 95 : Ligne 93 :     
Le {{pl|59|TMP36}} est un senseur de température très facile à trouver.  
 
Le {{pl|59|TMP36}} est un senseur de température très facile à trouver.  
Il s'agit d'un périphérique analogique (la tension en sortie du senseur dépend de la température). Ce senseur est également inclus dans le {{pl|519|Spark Core Maker Kit}}!  
+
Il s'agit d'un périphérique analogique (la tension en sortie du senseur dépend de la température). Ce senseur est également inclus dans le {{pl|519|Particle Core Maker Kit}}!  
    
Vous pouvez [http://www.analog.com/en/mems-sensors/digital-temperature-sensors/tmp36/products/product.html télécharger la fiche technique] ici.
 
Vous pouvez [http://www.analog.com/en/mems-sensors/digital-temperature-sensors/tmp36/products/product.html télécharger la fiche technique] ici.
Ligne 110 : Ligne 108 :     
== Le code ==
 
== Le code ==
Voici le code proposé par Spark que nous avons traduit pour faciliter la compréhension.  
+
Voici le code proposé par Particle que nous avons traduit pour faciliter la compréhension.  
    
Notez que ce montage utilise le deuxième schéma de raccordement (lecture sur la broche analogique A7 et filtrage).
 
Notez que ce montage utilise le deuxième schéma de raccordement (lecture sur la broche analogique A7 et filtrage).
Ligne 124 : Ligne 122 :  
void setup()
 
void setup()
 
{
 
{
   // Enregistrer la variable sur Spark Cloud
+
   // Enregistrer la variable sur Particle Cloud
 
   Spark.variable("temperature", &temperature, DOUBLE);
 
   Spark.variable("temperature", &temperature, DOUBLE);
   −
   // Active la broche A7 comme entrée (broche
+
   // Active la broche A0 comme entrée (broche
 
   // sur laquelle le senseur de température est connecté)
 
   // sur laquelle le senseur de température est connecté)
   pinMode(A7, INPUT);
+
   pinMode(A0, INPUT);
 
}
 
}
   Ligne 138 : Ligne 136 :     
   // Lire continuellement la valeur du senseur. De sorte que
 
   // Lire continuellement la valeur du senseur. De sorte que
   // lorsque nous faison un appel sur l'API pour lire la valeur
+
   // lorsque nous faisons un appel sur l'API pour lire la valeur
 
   // nous obtenons la dernière valeur disponible.
 
   // nous obtenons la dernière valeur disponible.
   reading = analogRead(A7);
+
   reading = analogRead(A0);
    
   // La lecture analogique retourne une valeur entre 0 et 4095
 
   // La lecture analogique retourne une valeur entre 0 et 4095
Ligne 157 : Ligne 155 :  
  GET /v1/devices/{DEVICE_ID}/temperature
 
  GET /v1/devices/{DEVICE_ID}/temperature
    +
=== Appel d'API avec CURL ===
 
Voici un exemple de requête Curl, Core_ID est 0123456789abcdef et un Access Token 123412341234.
 
Voici un exemple de requête Curl, Core_ID est 0123456789abcdef et un Access Token 123412341234.
   Ligne 164 : Ligne 163 :     
Le -G de la commande curl indique que nous voulons utiliser une requête de type GET.
 
Le -G de la commande curl indique que nous voulons utiliser une requête de type GET.
 +
 +
Ce qui produit un résultat comparable à celui-ci:
 +
 +
<nowiki>{
 +
  "cmd": "VarReturn",
 +
  "name": "temperature",
 +
  "result": 23.413919413919405,
 +
  "coreInfo": {
 +
    "last_app": "",
 +
    "last_heard": "2014-12-08T11:55:38.292Z",
 +
    "connected": true,
 +
    "deviceID": "0123456789abcdef"
 +
  }
 +
}</nowiki>
 +
 +
=== Appel d'API avec navigateur ===
 +
Cette fois-ci, il sera facile d'utiliser votre navigateur favoris pour faire un appel d'API et obtenir le contenu d'une variable.
 +
 +
Dans le cas présent, il s'agit d'une requête de type GET, ce que fait exactement votre navigateur internet lorsque vous visitez un site internet.
 +
 +
Ouvrez donc votre navigateur favori et saisissez:
 +
 +
<nowiki>https://api.spark.io/v1/devices/54fyyyyyyyyyyyyyyyyyyy67/temperature?access_token=1dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf8</nowiki>
 +
 +
Cet exemple ci utilise le Particle Core de MCHobby... raison pour laquelle le CORE ID et l'ACCESS TOKEN sont différents
 +
 +
{{SPARKImage|Spark.IO-Core-TMP36-10.jpg|640px}}
 +
 +
== Les petits curieux : Découvrir l'API de votre Core ==
 +
Soyons un peu plus curieux et désobéissons! En poursuivant nos investigations, '''nous avons découvert comment énumérer l'interface disponible sur un Core'''.
 +
 +
Pour la petite histoire, avant d'opter pour l'utilisation d'un montage avec filtrage (cfr début de ce tutoriel), j'ai essayé de comprendre pourquoi mon Core prétendait qu'il faisait -20°C dans mon salon!
 +
 +
J'ai donc modifié le programme pour publier toutes les variables du programme sur l'API Particle Cloud et c'est là qu'on apprend des choses intéressantes.
 +
 +
{{underline|Note:}}
 +
 +
Depuis la première rédaction de cet article, nous avons également traduit [[Spark.IO-CLI|le tutoriel sur "Particle CLI"]] (Interface en ligne de commande) où l'on apprend comment lister les Cores et leur interface.
 +
 +
=== Le code ===
 +
Le code ci-dessous déclare toutes les variables utilisées par le programme... variables que je publie sur l'API Particle Cloud.
 +
 +
<nowiki>// -----------------
 +
// Lecture de la température
 +
//    version des petits curieux.
 +
// -----------------
 +
 +
// Créer une variable qui pour stocker la valeur
 +
// de la température
 +
double temperature = 0.0;
 +
double voltage = 0.0;
 +
int reading = 0;
 +
 +
void setup()
 +
{
 +
  // Enregistrer la variable sur Particle Cloud
 +
  Spark.variable("temperature", &temperature, DOUBLE);
 +
  Spark.variable("voltage", &voltage, DOUBLE );
 +
  Spark.variable("reading", &reading, INT );
 +
  // Active la broche A7 comme entrée (broche
 +
  // sur laquelle le senseur de température est connecté)
 +
  pinMode(A0, INPUT);
 +
}
 +
 +
void loop()
 +
{
 +
  reading = 0;
 +
  voltage = 0.0;
 +
 +
  // Lire continuellement la valeur du senseur. De sorte que
 +
  // lorsque nous faison un appel sur l'API pour lire la valeur
 +
  // nous obtenons la dernière valeur disponible.
 +
  reading = analogRead(A0);
 +
 +
  // La lecture analogique retourne une valeur entre 0 et 4095
 +
  // pour une tension entre 0 et 3.3V.
 +
  // Calculer la tension correspondante
 +
  voltage = (reading * 3.3) / 4095;
 +
 +
  // Calculer la valeur de la température (formule pour un TMP36)
 +
  // et stocker la valeur dans notre variable statique 'temperature'
 +
  temperature = (voltage - 0.5) * 100;
 +
}</nowiki>
 +
 +
=== Lecture des valeurs ===
 +
Pour lire les différentes valeurs, nous pouvons utiliser les trois requêtes CURL suivantes:
 +
 +
<nowiki>curl -G https://api.spark.io/v1/devices/54yyyyyyyyyyyyyyyyyyy67/temperature -d access_token=1dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf8</nowiki>
 +
 +
Ce qui offre le résultat suivant:
 +
  <nowiki>{
 +
  "cmd": "VarReturn",
 +
  "name": "temperature",
 +
  "result": 23.413919413919405,
 +
  "coreInfo": {
 +
    "last_app": "",
 +
    "last_heard": "2014-12-08T11:55:38.292Z",
 +
    "connected": true,
 +
    "deviceID": "54yyyyyyyyyyyyyyyyyyy67"
 +
  }
 +
}</nowiki>
 +
 +
Il est également possible de lire les autres variables avec les requêtes CURL suivantes:
 +
 +
<nowiki>curl -G https://api.spark.io/v1/devices/54yyyyyyyyyyyyyyyyyyy67/voltage -d access_token=1dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf8</nowiki>
 +
 +
<nowiki>curl -G https://api.spark.io/v1/devices/54yyyyyyyyyyyyyyyyyyy67/reading -d access_token=1dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf8</nowiki>
 +
 +
=== Désobéissons: énumérer l'API ===
 +
Vous vous doutez certainement que votre programme Spark publie les éléments de votre interface sur Particle Cloud.
 +
 +
C'est en faisant preuve de curiosité que j'ai remarqué qu'il était possible de consulter l'interface disponible en faisant une {{underline|requête CURL sur le Core (sans préciser l'API)}}.
 +
 +
<nowiki>curl -G https://api.spark.io/v1/devices/54yyyyyyyyyyyyyyyyyyy67 -d access_token=1dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf8</nowiki>
 +
 +
Ce qui produit un résultat contenant une énumération de l'interface disponible sur votre Core.
 +
 +
<nowiki>{
 +
  "id": "54yyyyyyyyyyyyyyyyyyy67",
 +
  "name": "mch-demo",
 +
  "connected": true,
 +
  "variables": {
 +
    "temperature": "double",
 +
    "voltage": "double",
 +
    "reading": "int32"
 +
  },
 +
  "functions": [],
 +
  "cc3000_patch_version": "1.29"
 +
</nowiki>
 +
 +
Comme vous pouvez le contaster, nous obtenons beaucoup d'informations utiles:
 +
* '''id''': Identification de votre Core. Superflux à la base mais peut grandement faciliter l'écriture de votre code.
 +
* '''name''': Le nom que vous avez donné à votre Core. En utilisant une nomenclature adéquate, vous pourriez identifier
 +
* '''connected''': permet de savoir si votre Core est actuellement connecté sur Particle Cloud.
 +
* '''variables''': contient les entrées (et type) correspondant aux {{underline|variables}} d'API déclarées dans notre programme avec <code>Spark.variable()</code>
 +
* '''functions''': contient les entrées correspondant aux {{underline|fonctions}} d'API déclarées dans votre programme avec <code>Spark.function()</code>
    
{{Spark-Core-Hacking-TRAILER}}
 
{{Spark-Core-Hacking-TRAILER}}
    
<small>Source: [http://docs.spark.io/examples/#measuring-the-temperature docs.spark.io/examples/#measuring-the-temperature]</small>
 
<small>Source: [http://docs.spark.io/examples/#measuring-the-temperature docs.spark.io/examples/#measuring-the-temperature]</small>
29 836

modifications

Menu de navigation