Étape 6: Une présentation détaillée de comment cela fonctionne : Code de l’appareil
Commençons par le code de l’appareil. Il est court et simple. Il a deux emplois : collecter des relevés de température et de répondre aux touches.
Jetez un oeil à la définition de fonction pour getTemp().
Cette fonction collecte les relevés de température à intervalles réguliers. L’intervalle est défini par une constante, intervalle, en haut du fichier. Fait le premier getTemp chose est programmer elle-même d’exécuter à nouveau dans l’intervalle (secondes), en appelant imp.wakeup (intervalle, getTemp). Il planifie un rappel; l’imp peut continuer à faire d’autres choses, et dans l’intervalle en secondes, le système d’exploitation va rappeler et demandez-nous de réexécuter getTemp.
Après ordonnancement lui-même de réexécuter, getTemp lit la tension dans le milieu de la cloison de la thermistance, puis utilise une simple ajustement pour estimer la température de la courbe de le 2e ordre. Les coefficients pour l’ajustement de la courbe sont stockés en tant que constantes dans la partie supérieure du fichier (si vous regardez, vous remarquerez que nous utilisons en fait juste une ajustement linéaire de la courbe ! Mais l’ajustement de la 2e ordre est là si vous voulez l’essayer).
Ensuite, nous avons une fonction qui indique l’imp quoi faire quand il est temps d’aller pour dormir :
Cette fonction fait deux choses : tout d’abord, il configure Pin1 comme une épingle de réactivation, afin que si le bouton est enfoncé il vous réveille l’imp de sommeil profond. Deuxièmement, il raconte l’imp d’aller au sommeil profond pour tant qu’il est permis (MAXSLEEP est définie 86396 secondes en haut du fichier, il s’agit de 1 jour à moins de 4 secondes. L’appel à server.sleepfor() avertit le serveur que l’appareil se rendra pour dormir, si l’agent n’auront pas à attendre pour l’imp de disparaissent avant il réalise ce qui s’est passé.
Au-dessous, il y a une fonction de Gestionnaire d’événements de presse bouton :
Il s’agit d’une fonction intéressante. Il s’avère que, lorsque vous appuyez sur la touche du tout, l’imp appelle cette fonction tout de suite. L’imp n’attendez plusieurs secondes à se pour endormir, car vous pourriez avoir pensé de comment fonctionne le thermomètre. Au lieu de cela, l’imp appelle cette fonction immédiatement et attend de voir si l’utilisateur maintient la touche enfoncée pendant trois secondes. Si vous le faites, il s’endort. Si vous n’avez pas, il quitte la fonction et remonte à faire ce qu’il faisait avant.
Ensuite, nous voyons quelques rappels étant inscrits pour les événementsde l’agent :
Le premier gestionnaire d’ici permet à l’agent de dire à l’appareil d’aller pour dormir. Lorsque l’appareil est en marche, le maintient de l’agent un coup de œil combien température changer il est voyant et ajuste la quantité de temps, qu'il laissera l’appareil reste éveillé avant de qualifier cet événement et raconter l’appareil d’aller pour dormir pour économiser la batterie.
Le deuxième gestionnaire n’est utilisé que dans des occasions spéciales. L’agent ne sait automatiquement les ID de périphérique de l’appareil, mais elle en a besoin afin de mettre les noms de canal pour envoyer des données à Xively. Normalement, l’agent et l’appareil démarre ensemble lors du démarrage de l’agent pour la première fois, après quoi l’agent reste allumé. Cependant, parfois l’agent redémarre par lui-même, par exemple, si vous appuyez sur nouveau code à elle. Dans ce cas, l’agent a besoin d’un moyen de demander à l’appareil ce qui est son ID de périphérique - cette fonction lui donne un moyen de le faire.
Après cela, nous avons finis avec les définitions, et nous atteignons le point où le fonctionnement d’exécution proprement dit commencera lors du démarrage de l’appareil. La première chose que l’imp fait quand il démarre c’est déterminer pourquoi elle démarré. Si c’était à cause d’un réveil Pin1, l’imp fait la même chose pour cela, si vous maintenez le bouton pour l’envoyer dormir - il reste ici et attend de voir si vous maintenez le bouton. Si vous relâchez avant les 3 secondes délai d’attente, l’imp va retourner directement à dormir avant même, il se connecte à internet.
Enfin, nous instancions les objets que nous devons faire notre travail et vérifier avec l’agent, puis commencer la lecture de la température pour commencer.
Nous allons jeter un coup d’oeil sur le code de l’agent dans l’étape suivante, si vous êtes intéressé.