Étape 3: codage
Tout codage dans ce instructable a été fait par mon collaborateur sur ce projet : dennishore, passionné de python gourou et l’électronique. Je ne veux pas changer les choses lui pour cette étape et l’étape 6: rapport. Il a accepté de répondre aux questions et a affecté tout le code à la fin de cette étape et l’étape 6.
Capteurs et connexions
Capteur de température de Grove - AI0
Potentiomètre rotatif Grove - AI1
Capteur de lumière Grove - AI2
Capteur de sons Grove - AI3
Écran LCD de Grove 16 x 2 - bus I2C
Grove LED - 2 numérique
Bouton de Grove - 3 numérique
Sonnerie de Grove - 4 digital
Grove GPS - UART
Le GPS communique comme un périphérique série. La page GPS Grove (comme la page équivalente pour tous les capteurs de Grove) a un Arduino et une section de la Raspberry Pi. Pour les autres capteurs, j’ai eu une bonne conjecture quant à comment le faire sur l’Edison basé sur la connectivité de la section de l’Arduino, et les commandes basé sur python Raspberry Pi modules. Mais cela diffère pour le GPS. Pour plus de clarté, c’est le module de SIM28 GPS mis à jour. En fin de compte, il fonctionne connecté à UART sur le bouclier de Grove et est initialisé avec :
L’état SIM28 fiche que le temps de démarrage peut être aussi court que 1 seconde (chaude et avec l’aide de l’internet), ou aussi longtemps que 32 s (froid et sans internet). La partie plus difficile (en cours) de ce projet a été pour déboguer ce qui est une erreur GPS (1), (2) serial port erreur, données GPS (3) l’analyse de problème de lecture. L’analyse se fait actuellement avec le module pymnea2. La routine d’initialisation complète est
Cela comprend la définition des catégories. Puisque nous utilisons le potentiomètre rotatif de Grove (et pas un encodeur rotatif), nous avons limité la résolution angulaire. Six catégories sont facilement sélectionnables sur l’écran LCD en tournant la poignée, mais nous pourrions probablement accueillir jusqu'à 15 ~ sans passer par les sélections des être trop rapprochés. Le code tente ensuite d’un point fixe GPS initial :
La boucle infinie est brisée lorsque les données de plus de deux satellites sont retournées. Succès est évaluée par l’analyse des données latitude dans un flotteur. Faute de quoi cela pourrait indiquer différents types d’erreurs GPS, y compris les erreurs de communication série. Une fois qu’un correctif a été mis en place, l’heure système actuelle est utilisée pour ouvrir le fichier journal :
L’algorithme principal est alors :
La demi-seconde de retard fournit une stabilité pour enregistrer les événements de presse bouton, sans moyen fancier de rejeter plusieurs conférences de presse. Cela sert aussi comme du temps de la base pour l’enregistrement des données, actuellement fixées à 10 fois cet intervalle (environ toutes les 5 secondes). Détails de la pioche, écran, getData et recordData fonctions peuvent être vu dans le code complet lié à la fin de cette section.
Pour le moment, le voyant s’éteint/clignote lorsqu’il perd ses coordonnées GPS, ou si le nombre de satellites est inférieure à 2. Pendant ces périodes, il est toujours possible aux données de champs d’enregistrements à l’aide de tous les capteurs sauf GPS, c'est-à-dire pas de latitude, longitude ou élévation de ces points de données. Le tableau de synthèse produit à partir de la sortie affiche des moyens pour les données, en prenant en considération si l’élévation est disponible ou non. En observant l’état de la LED avant d’enregistrer les données, cela offre la possibilité d’attendre (parfois seulement quelques secondes) afin d’avoir des données GPS disponibles ou non. De toute évidence, les points de données sans GPS n’apparaissent pas sur la carte.
Le code complet est lié ci-dessous.
Démarrer automatiquement au démarrage (Headless)
Puisque nous avons besoin du programme de collecte de données pour commencer dès que la puissance est reliée (et redémarrer si il faut changer les piles dans le domaine), nous avons besoin que le programme python commencer quand la Edison termine sa séquence de démarrage.