Pimometre: station météo de salon connectée

Dernière mise à jour : 31 déc. 2020


Ce tutoriel #pimometre concerne la création d'une mini station météo de salon pilotée par un Raspberry piZERO. Elle affiche sur un écran LCD la température et humidité ambiante d'un capteur DHT22, ainsi que les prévisions météo locale des 12 prochaines heures via une connexion à une API de météo. Un boîtier sur mesure (optionnel) est proposé en impression 3D si vous êtes équipé d'une imprimante 3D.


Matériel nécessaire


  • 1 Raspberry pi Zero WH avec Raspbian os lite et WIFI activé

  • 1 capteur température et humidité: DHT22 (précision T°: 0.5°C, précision humidité: 5%)

  • 1 résistance 4,7 k ohms (généralement fournie avec le capteur DHT22)

  • 1 écran LCD 16*2 avec backpack I2C à base de PCF8574

  • 2 condensateurs céramiques 100nf

  • 4 résistances 10 k ohms

  • 2 boutons poussoirs 6mm 4 pattes

  • 1 jack Barrel DC

  • 1 alimentation 5v 2A jack DC (n’apparaît pas sur la photo)

  • 1 barrette femelle 2*20pin pas 2,54mm pour Raspberry pi

  • 1 connecteur 4 pin header coudé mâle 2,54mm (pour brancher le LCD)

  • 1 connecteur 3 pin header coudé mâle 2,54mm (popur brancher le capteur DHT22)

  • des câbles dupond souples femelle/femelle pour raccorder le LCD et le DHT22 à la carte

  • un jeux d'entretoises nylons M2.5 pour fixer le LCD (et surélever le PCB si vous n'imprimez pas le boîtier).

  • 1 circuit imprimé à faire fabriquer chez un fabriquant de PCB de votre choix, à partir des fichiers GERBER fournis dans le Github du projet. Il s'agit du fichier zippé GERBER_pimometre.zip


Circuit électronique



Le LCD (avec son backpack I2C) ainsi que le capteur DHT22 sont connectés à la carte avec des connecteurs souples femelles raccordés sur les connecteurs coudés. La soudure des composants sur la carte est simple car toutes les explications sont sérigraphiées directement sur la carte, il n'y a aucun piège avec les sens à respecter. En dessous de la carte il faut souder le connecteur Jack DC et la barrette 2*20 pin, et tout le reste est au dessus.




Vous noterez que le capteur DHT22 est composé de 4 pattes, mais seules 3 sont raccordées à la carte. C'est bien normal, en lisant le datasheet du DHT22 la 3ème patte "NULL" ne doit pas être reliée (ne me demandez pas pourquoi ils en ont mis 4 ...). Il faut donc relier la 1 à VCC, la 2 à SIG, et la 4 à la masse GND sur la carte.




Pour assembler le tout, utilisez des petites entretoises en nylon M2.5 15mm pour surélever le LCD. Si vous n'imprimez pas le boitier 3D, pour obtenir un effet d'inclinaison il suffit d'utiliser au dessous de la carte deux paires d'entretoises qui ne sont pas de la même taille: le support est ainsi posé incliné et c'est plus agréable pour les yeux. Le Raspberry pi vient s'enficher par dessous sur le connecteur 2*20 pin, il ne doit pas dépasser de la carte (sinon c'est qu'il est dans le mauvais sens...)



Configuration du système


Pour voir tout le détail du projet (circuit électronique, explications pas à pas, tests prototypes et explications sur les scripts Python): je vous encourage à lire toutes les sections du Github du projet.


Étapes de configurations

  • Il faut dans un premier temps configurer le piZERO: cet article est dédié à la préparation d'un Raspberry piZERO.

  • Pour faire fonctionner l'API de météo, il faut déclarer votre propre TOKEN sur le site meteo.concept. Déclarez un token standard gratuit qui vous permet d'interroger l'API jusqu'à 500 fois par jour. Le script Python va interroger l'API toutes les 5mn, ce qui génère au maximum 288 interrogations par jour. Sauvegarder votre token dans un fichier tokenAPI.txt.

  • Déposez ensuite dans le répertoire /home/pi/pimometre les fichiers tokenAPI.txt (avec votre propre token en 1ère ligne), I2C_LCD_DRIVER.py, et pimometre.py

  • Installez bien toutes les dépendances nécessaires pour faire fonctionner le capteur DHT22, comme expliqué ans la partie "tests" du Github:


Il faut tout d'abord activer l'interface I2C du Raspberry pi avec:


sudo raspi-config

Reboot nécessaire (sudo reboot)


Il faut installer les dépendances et bibliothèques circuit-python d'Adafruit en suivant ce guide. Pour ce qui me concerne j'ai enchaîné ces commandes:

sudo pip3 install rpi.GPIO
sudo pip3 install adafruit-blinka
sudo pip3 install adafruit-circuitpython-dht
sudo apt-get install libgpiod2

Démarrage automatique


Le srcipt pimometre.py prend en paramètre le code INSEE de votre ville (à ne pas confondre avec le CODE POSTAL!). Pour retrouver le code INSEE de votre ville, c'est par ici. Sinon vous pouvez aussi utilisez les scripts de tests fournis dans le Github du projet où l'API est interrogée avec un code postal et fourni en retour les codes INSEE à choisir (un même code postal peut regrouper plusieurs villes).


Pour que le script soit exécuté au démarrage du Raspberry pi, on va passer par la crontab:


Editer la crontab en édition:

sudo nano /etc/crontab -e

ajouter ces deux lignes à la fin, avant le #:


@reboot pi python3 -u 'pimometre/pimometre.py' [INSEE] > 'pimometre/pimometre.log' 2>&1 & 
@daily reboot

pensez à remplacer [INSEE] par le code INSEE de votre ville (à ne pas confondre avec le code postal ...). CTRL-O pour sauvegarder les changements, puis CTRL-X pour quitter.


Et voilà, vous pouvez rebooter le Raspberry (sudo reboot) et lorsqu'il démarre la météo doit s'afficher . S'il ne se passe rien au bout de quelques minutes, vous pouvez consulter le fichier de logs /home/pi/pimometre/pimometre.log .


Normalement lorsque le Raspberry démarre le LCD s'allume et vous devez voir en surbrillance la 1ère ligne (pensez à régler la luminosité du LCD sur la petite vis au niveau du backpack I2C).


Quand le script s'exécute, vous devez voir cet écran: c'est bon signe. La première ligne indique que le DHT22 est en cours d'initialisation (ça peut lui prendre plusieurs secondes avant de fournir un résultat: c'est normal). La seconde ligne indique tout simplement que l'interrogation API n'est pas possible sans le WIFI: c'est normal car les services WIFI prennent du temps à démarrer sur le Raspberry pi, il faut patienter quelques dizaines de secondes tout au plus.


Si au bout de quelques minutes il ne se passe rien, c'est qu'il y a un problème avec l'appel d'API: connectez vous en SSH au piZERO et regardez le fichier de log pimometre/pimometre.log il y a sûrement un message d'erreur. Avez vous bien mis un code INSEE valable? Avez vous bien mis votre TOKEN dans le fichier tokenAPI.txt ?


Utilisation


  • la première ligne indique la température et humidité ambiante captée par le DHT22. S'il apparaît une étoile après le "In" c'est que la dernière mesure a échouée: ça arrive souvent les capteurs DHT22 sont capricieux. Les mesures se font toutes les 10 secondes: l'étoile disparaît dès qu'une mesure est ok, mais vous verrez qu'elle réapparaît souvent.

  • la seconde ligne indique les prévisions météo locales via l'API: un premier écran avec la température et l'humidité pendant 2 secondes, puis un second écran avec la vitesse du vent et la probabilité de pluie (2s), un troisième écran avec le bulletin météo en scrolling. La légende à gauche de l'écran indique l'heure de la prévision et une petite icône représentative de ce qui est affiché (thermomètre / soleil / pluie / 5 niveaux de pluie)

  • Un appui sur le bouton Select va afficher les prévisions météo dans 3h, puis 6h, 9h et retour à l'heure courante

  • un appui sur le bouton Off va éteindre le système. Pour le redémarrer: il faut enlever et rebrancher le +5v.

Enchaînement automatique des 3 écrans.


En cas de coupure WIFI, vous aurez le message "pb cnx API" affiché sur la seconde ligne. Dès que le WIFI est réactivé tout reprend.



Boîtier imprimé 3D



Si vous êtes équipé d'une imprimante 3D, vous pouvez imprimer ce petit boîtier réalisé sur mesure avec des cotes multiple de 0.2mm, de manière à pouvoir imprimer rapidement sans problème en 200 microns. Je conseille de cocher la case "amélioration de la surface d'adhésion" sinon les bords ont tendance à se soulever un peu lors de l'impression, ce qui rend le boîtier légèrement bombé et très difficile à fermer ensuite vu que tout est calculé au 1/5 de mm près.


Les fichiers STL sont dans le dossier impression3D du Github du projet.


Le boîtier peut être posé à plat, ou bien sur des pieds incliné à 20°, ou encore à 90° (l'ouverture de la prise Jack a été conçue pour) et enfin il peut être fixé sur un mur. Il y a 3 élements à imprimer: la coque basse, la coque haute et les pieds optionnels (à imprimer 2 fois) si vous optez pour une pose inclinée à 20°.


Une fois la coque basse imprimée (comptez 1h40 en 0.2mm) vous pouvez poser dedans tout le système assemblé avec 4 entretoises M2.5 (M2 aussi ça marche) de 15mm qui surélèvent le LCD. Il faut bien vous assurer que la carte est posée à raz-bord comme sur la photo: elle repose sur un tout petit rebord de 1mm. Si elle est dure à rentrer il faut l'incliner et rentrer de force: ça fait "clac" quand elle est en place. Il y a une toute petite ouverture de chaque côté de 0.4mm pour pouvoir la retirer facilement à l'aide d'un tournevis plat. Assurez-vous que la carte est à peut-près au milieu (ouvertures symétriques de chaque côté) ça va optimiser le positionnement des rehausses des boutons. Si les entretoisent (partie filetée) dépassent trop du bord de la carte il faut les couper sinon ça va gêner la fermeture du boîtier.



La coque haute (1h50 en 0.2mm) se pose sans problème et se maintient grâce aux petits renfort de 1mm de large qui entrent dans le logement de coque basse: idem ça fait un petit "clac" quand tout est en place. Faites juste gaffe à bien positionner les branchement de la sonde de température dans l'ouverture prévue sur le boîtier et ne pas les pincer entre les deux coques...



Quand aux pieds (10mn les 2 pieds en 0.2mm) ils se positionnent dans leur logement: ça passe juste mais ça rentre en insistant. N’hésitez pas à enlever les bavures d'impression au cutter.








553 vues0 commentaire

Posts récents

Voir tout