Ces plans sont au format SVG ouvrable avec inkscape
(Version 20190510)
StationMeteo.svg(38.57 kB)
A la fin de ce projet vous saurez :
Sources
La mise en place et le développement de la carte Wipy est simple, voici comment procéder.
Télécharger et installer l'éditeur de texte Atom à partir de leur site officiel https://atom.io/
Attention, la version 1.4 de Atom fait planter Pymakr (voir https://github.com/pycom/pymakr-atom/issues/131 ) !!! Il faut installer la version 1.38 que l'on peut trouver ici : https://github.com/atom/atom/releases/tag/v1.38.2
En fait il s'agit d'un package dont le dépot GIT officiel se trouve sur https://atom.io/packages/pymakr
Il existe une façon très simple de l'installer :
Dans le logiciel Atom : faire File > Settings > Install. Rechercher "Pymakr" et cliquer sur "Install"
Au bout d'un moment le package se télécharge et s'installe automatiquement.
Ce package permet d'avoir une interface graphiquepour toutes les instructions commune de git ( commit, pull, push, stage, tec...)
Dans le logiciel Atom : faire File > Settings > Install. Rechercher "Git-plus" et cliquer sur "Install"
Au bout d'un moment le package se télécharge et s'installe automatiquement.
Une fois Atom lancé, il est nécessaire de se connecter au Wipy en cliquant (dans le bas de la fenêtre Atom ) sur le bouton " More > Get serial port "-> Le port série sur lequel est connecté la Wipy doit s'afficher. Dans mon cas j'ai :
COM45 (Pycom Ltd) (copied to clipboard)
Ouvrir ensuite les settings du package Pymakr. Dans le bas de la fenêtre Atom : Settings > Global settings et dans la section Devis adress , mettre le numéro de port COM trouvé précédemment (à place de " Default : 192.168.0.4.1 ")
Dans mon cas : COM45
Dans le bas de la fenêtre Atom, cliquez alors sur Connect . Vous devriez voir un prompt (3 chevrons comme ceci : >>>) qui s'affiche dans la console REPL (Read Evaluate Print Line) du logiciel Atom.
Vous êtes connecté à la Wipy ? Alors vous pouvez passer à la suite.
Si en lançant Atom, le Wipy branché n'est pas détecté, il faut sans doute installer le driver Pysense pour windows.
Ce drivers (**pycom.inf**) se trouve sur le dépôt GIT de pycom, ici :
https://github.com/pycom/pycom-documentation/blob/master/content/pytrackpysense/installation/pycom.inf
Tuto disponible en ligne ici : https://docs.pycom.io/gettingstarted/installation/drivers.html
Le Pysense est un module additionnel à la carte Wipy. Il permet d'ajouter des capteurs. Il existe une API pour les fonctions spécifiques de lecture des capteurs de température, humidité et autre accelérometre.
Pour en savoir plus sur le Pysense : https://docs.pycom.io/datasheets/boards/pysense.html
Si ce n'est pas déjà fait, installez le package git-clone dans Atom en faisant :
Les librairies officielles sont disponibles sur le dépôt : https://github.com/pycom/pycom-libraries . Nous allons donc l'intégrer dans Atom .
Dans Atom , pressez Ctrl + Shft + P pour afficher le panneau de commande, puis taper : git clone et coller ensuite l'URL : https://github.com/pycom/pycom-libraries
Au bout d'un moment, les répertoires et fichiers du dépôt vont apparaître dans Atom .
Les librairies pycom s'affichent dans la fenêtre projet de Atom ? Alors vous pouvez passer à la suite.
La station à besoin d'être transparente, car elle mesure la quantité de lumière.
Elle a également besoin, d'être aérée pour pouvoir mesurer le taux d'humidité ambiant.
Pour répondre à ces critères, nous allons privilégier le PMMA transparent découpé à la découpeuse laser.
Pour viser facilement la carte Pysense sur son support, j'ai utilisé du scotch. Il suffi de faire passer les vis par derrière, de les skotcher, de mettre les entretoises puis la pysense puis les écrous. Une fois le tout serré, le scotch n'est plus nécessaire.
Le montage en lui même n'est pas très compliqué, il faut juste veiller à mettre les vis avec leur écrous dans les trous prévu sur chacune des faces verticales. En positionnant alors les faces horizontale, les écrous vont rentrer dans les fentes prévus.
Votre Wipy est bien maintenu dans sa boite ? Alors vous pouvez passer à la suite.
Le MicroPython utilise la syntaxe du Python 3.5. Généralement le code écrit en Python 3.5 fonctionne sans trop de problèmes pour les modules utilisant du MicroPython. Ceci dit le MicroPython utilise des librairies spécifiques pour l'accès à des capteurs spécifiques. Pour la Wipy, il existe elles sont disponible ici : https://docs.micropython.org/en/latest/library/index.html#libraries-specific-to-the-wipy
Lors du boot d'un hardware Wipy, 2 fichiers sont exécutés automatiquement il s'agit de boot.py et main.py .
Ces fichiers sont placés dans le répertoire /flash . Ces 2 fichiers peuvent être édités librement en utilisant une connexion FTP ou en utilisant ATOM et le package pymakr.
flash
|-lib
| |- some_library.py
|-boot.py
|-main.py
Nous allons faire clignoter la LED de différentes couleurs. Dans le fichier main.py copier le code suivant :
import pycom
import time
pycom.heartbeat(False) # we disabled the standard "herat-beat"
while True:
pycom.rgbled(0xFF0000) # Red
time.sleep(1)
pycom.rgbled(0x00FF00) # Green
time.sleep(1)
pycom.rgbled(0x0000FF) # Blue
time.sleep(1)
Pour executer le code, cliquer sur " Run " en bas de la fenêtre de Atom ou presser Ctrl + Alt + R
La led du module Wipy doit maintenant être en train de passer alternativement en rouge, vert et bleu et le prompt du REPL n'est plus accessible.
Pöur arréter l'execution du script cliquez dans la fenêtre REPL et presser Ctrl + C
Par contre si on reboot le Wipy (en appuyant sur son bouton de reset), le programme ne s'execute plus ! C'est normal car il n'est pas dans le répertoire /flash .
Au lieux d'appuyer sur le bouton " Run" comme précédemment, il faut appuyer sur "Upload" (ou Ctrl + Alt + S ). Le fichier est maintenant écrit dans la Wipy. Si vous la rebootez elle devrait se mettre à clignoter.
Faites clignoter la LED de votre Wipy alternativement de mauve à blanc.
Indice : regardez l'encodage des couleurs RVB.
Votre Wipy clignote mauve puis blanc ? Vous pouvez passer à la suite.
Dans le REPL (Read Evaluate Print Loop, c'est à dire le prompt du module Pymakr), taper :
import os
os.mkfs('/flash')
Dans le cas d'un mauvais programme (Upload avant d'avoir testé en Run) il se peut que le REPL ne soit plus accessible. Dans ce cas il faut faire un soft Reset.
Voir la procédure décrite sur la page https://docs.pycom.io/gettingstarted/programming/safeboot.html
Nous allons voir comment faire pour :
Le site pybytes permet de faire un compte gratuitement pour avoir très rapidement la possibilité d'afficher des données envoyées par la carte Wipy. C'est parfait pour vérifier le bon fonctionnement des capteurs et de la communication entre la Wipy et un site internet.
Le site permet également de mettre à jour les fichiers transférés dans la Wipy.
Guide de démarrage pour ajouter son objet connecté dans pybytes : https://docs.pycom.io/pybytes/introduction.html
Vous avez un compte Pybytes ? Alors vous pouvez passer à la suite.
Pour ajouter une nouvelle Wipy dans pybytes, il faut aller dans le menu Devices > add a device to Pybytes . Choisir ensuite la Wipy
Ensuite viens la configuration du réseau wifi que va utiliser la carte Wipy.
Il faut maintenant mettre à jour la configuration dans la carte Wipy en upgradant le firmware. Il faut bien évidement que la carte Wipy soit branchée sur votre ordinateur. Un logiciel spéciale est fourni pour le faire de façon automatique.
Téléchargez la version pour votre ordinateur et suivez le wizard.
Et voila, votre Wipy est maintenant capable d'envoyer des données sur votre compte pybytes.
Documentation officielle : https://docs.pycom.io/pybytes/connect/index.html
Nous allons envoyer les mesures météo (température, humidité, pression atmosphérique, etc...) toute les 10 minutes vers notre base de données.
Pour cela il faut :
L'envoie de données sur le site de pybytes est très simple, il suffi de faire :
pybytes.send_signal(1, 123456)
Cela signifie qu'on va envoyer la valeur 123456 dans le signal 1 de pybytes. Si c'est la première fois que pybytes reçois ce signal, il apparaît dans Devices > My devices > Data > " undefined signals ". Il suffi alors de cliquer dessus pour lui donner un nom.
On voit ici qu'il y a 7 signaux qui sont attendu par pybytes en provenance de la Wipy.
Chacun de ces signaux a été nommé.
Le code est disponible sur le dépôt GIT : https://github.com/AlexDesign-Fr/Station-meteo-with-Wipy
Attention, le code contient peut-être des erreurs, analysez le avant de l'exécuter.
Vous arrivez à recevoir des données sur voter compte Pybytes ? Alors vous pouvez passer à la suite.
L'astuce consiste à mettre à jour l'horloge au boot de la Wipy.
Comme je ne souhaites pas que la Wipy reste bloquée pendant sont boot en attendant une réponse du serveur, j'utilise un tread
Pour cela modifier le fichier boot.py en lui apportant les lignes suivantes :
from machine import RTC
import _thread
# Update date in a tread
rtc = RTC()
_thread.start_new_thread(rtc.ntp_sync("pool.ntp.org"), ())
Pour vérifier que votre Wipy s'est mise à l'heure, dans la console REPL tappez :
from datetime import datetime
now = datetime.utcnow()
print( now)
Votre Wipy est à l'heure ? Alors vous pouvez passer à la suite.
En suivant ce projet vous saurez :
Attention, ce projet ne vous apprendra pas à installer un serveur Domoticz .
Si jamais votre Wipy a été flashée pour utiliser les services pybytes, il est nécessaire de les enlever (car il ne vont plus servir) et de mettre un firmware stable.Si vous n'avez pas flashé votre Wipy vous pouvez sans doute passer ce chapitre.Pour flasher un firmware stable, il faut tout d'abord récupérer le logciel prévu par Pycom.
Aller sur le site pybytes pour récupérer l'utilitaire de flashage.
Une fois identifié sur votre compte allez dans
Devices > Add device to Pybytes
et choisir la
Wipy
Cocher le réseau Wifi et faire Next
Saisissez ce que vous voulez, de tout façon on n'en a pas besoin, on veut juste récupérer le logiciel de mise à jour de firmware.
Nous y voila, prenez la version pour votre système (Windows dans mon cas) :
Et voila !
Modifier le fichier boot.py pour qu'il se connecte à votre réseau Wifi en changeant le SSID, le passwd et les identifiants de conection FTP
import pycom
import os
import machine
import network
import time
pycom.heartbeat(True)
# initiate network -------------------------------------------------------------
# Duplicate output on UART
uart = machine.UART(0, 115200)
os.dupterm(uart)
# Disable telnet and FTP server before connecting to the network
server = network.Server()
server.deinit()
# Connect to WLAN
wlan = network.WLAN()
wlan = network.WLAN(mode=network.WLAN.STA)
nets = wlan.scan()
for net in nets:
if net.ssid == '<SSID>':
wlan.connect(net.ssid, auth=(net.sec, '<passwd>'), timeout=5000)
while not wlan.isconnected():
machine.idle() # save power while waiting
# Enable telnet and FTP server with new settings
# You will have to update your Atom config with this login an passwd
server.init(login=('micro', 'python'), timeout=600)
# Wait some seconds before continuing
time.sleep(5)
L'envoie de donénes vers un serveur Domoticz implique l'envoie d'une requète en passant des paramètres en JSON.
On peut envoyer ses données au format JSON vers un serveur en utilisant urequests de la façon suivante :
from pysense import Pysense
from LTR329ALS01 import LTR329ALS01
urlDomoticz = "http://<IPServer>:<PortServer>/json.htm"
py = Pysense()
lt = LTR329ALS01(py)
def sendLight():
light = lt.light() # read light data. wil give a tuple with (redLight,blueLight)
lightResult = (int(light[0]) + int(light[1])) / 2
requestJSON = { "type":"command",
"param":"udevice",
"idx":276,
"svalue":lightResult}
Requete = urequests.get(urlDomoticz, requestJSON)
print( Requete.text ) # print the request result returned by the Domoticz server
# ============================================
# Send data in a thread. That's supposed to give user a chance to enter command in the command line (and not to stuck CPU)
_thread.start_new_thread(sendLight,())
Vos données sont correctement reçus dans votre serveur Domoticz ? Alors vous avez terminé ce projet.
Un Watchdog est un processus qui permet de rebooter une pycom lorsqu'elle ne répond plus au bout d'un certain timer.
On initialise un watchdog en lui donnant un temps à décompter. Si le temps est écoulé il reboot la Wipy. Il est possible de remettre à 0 le décompte, on dit alors qu'on "nourri" le watchdog.
Attention, une fois le watchdog démarré, il n'est pas possible de le reconfigurer ou d'en changer la valeur.
Exemple de mise en place :
from machine import WDT
watchdog = WDT(timeout=2 * 1000) # enable it with a timeout of 2 seconds
# fait une tâche courte (1)
watchdog.feed() # Réinitialisation du watchdog
# fait une tâche courte mais qui peut bloquer le programme (2)
watchdog.feed()
# fait une tâche très longue > 2 secondes (3)
watchdog.feed()
print("Au revoir")
Dans cet exemple on met en place un watchdog qui doit être nourri toutes les 2 secondes. Si ce n'est pas le cas, il reboot la Wipy.
Attention : la mise en place d'un watchdog peut entraîner des reboots de Wipy de façon intempestif, il peut alors être très dur de se connecter sur la Wipy.
Nous allons voir comment endormir la Wipy pour sauvegarder son énergie.
Lorsque le deep sleep est mis en place dans la Wipy, cette dernière va s'endormir pendant un certain temps. Le deep sleep peut être interrompu soit par un timing, soit par un événements extérieur (appuie sur un bouton, mouvement détecté par le capteur de mouvement, ...) à condition de le programmer !
Lorsque le Deep sleep est interrompu, la Wipy reboot. Elle est alors capable d'indiquer quel événement l'a réveillée.
Pour mettre la WIpy en mode Deep sleep pendant 60 secondes il faut faire :
# La Wipy va s'endormir pendant 60 secondes, il sera impossible de la réveiller avant.
from pysense import Pysense
py = Pysense()
py.setup_sleep(60) # Sleep for 60 seconds
py.go_to_sleep()
Ceci est la vue non overridée de l'objet project en mode listitem
Code à rajouter dans l'override.ini.append.php :
[line_project] Source=node/view/listitem.tpl MatchFile=listitem/project.tpl Subdir=templates Match[class_identifier]=project
Ceci est la vue non overridée de l'objet project en mode listitem
Code à rajouter dans l'override.ini.append.php :
[line_project] Source=node/view/listitem.tpl MatchFile=listitem/project.tpl Subdir=templates Match[class_identifier]=project
Ceci est la vue non overridée de l'objet project en mode listitem
Code à rajouter dans l'override.ini.append.php :
[line_project] Source=node/view/listitem.tpl MatchFile=listitem/project.tpl Subdir=templates Match[class_identifier]=project
Ceci est la vue non overridée de l'objet project en mode listitem
Code à rajouter dans l'override.ini.append.php :
[line_project] Source=node/view/listitem.tpl MatchFile=listitem/project.tpl Subdir=templates Match[class_identifier]=project
Ceci est la vue non overridée de l'objet project en mode listitem
Code à rajouter dans l'override.ini.append.php :
[line_project] Source=node/view/listitem.tpl MatchFile=listitem/project.tpl Subdir=templates Match[class_identifier]=project
Ceci est la vue non overridée de l'objet project en mode listitem
Code à rajouter dans l'override.ini.append.php :
[line_project] Source=node/view/listitem.tpl MatchFile=listitem/project.tpl Subdir=templates Match[class_identifier]=project
Ceci est la vue non overridée de l'objet project en mode listitem
Code à rajouter dans l'override.ini.append.php :
[line_project] Source=node/view/listitem.tpl MatchFile=listitem/project.tpl Subdir=templates Match[class_identifier]=project
Ceci est la vue non overridée de l'objet project en mode listitem
Code à rajouter dans l'override.ini.append.php :
[line_project] Source=node/view/listitem.tpl MatchFile=listitem/project.tpl Subdir=templates Match[class_identifier]=project
Ceci est la vue non overridée de l'objet project en mode listitem
Code à rajouter dans l'override.ini.append.php :
[line_project] Source=node/view/listitem.tpl MatchFile=listitem/project.tpl Subdir=templates Match[class_identifier]=project
Ceci est la vue non overridée de l'objet project en mode listitem
Code à rajouter dans l'override.ini.append.php :
[line_project] Source=node/view/listitem.tpl MatchFile=listitem/project.tpl Subdir=templates Match[class_identifier]=project
Ceci est la vue non overridée de l'objet project en mode listitem
Code à rajouter dans l'override.ini.append.php :
[line_project] Source=node/view/listitem.tpl MatchFile=listitem/project.tpl Subdir=templates Match[class_identifier]=project
Ceci est la vue non overridée de l'objet project en mode listitem
Code à rajouter dans l'override.ini.append.php :
[line_project] Source=node/view/listitem.tpl MatchFile=listitem/project.tpl Subdir=templates Match[class_identifier]=project
Ceci est la vue non overridée de l'objet project en mode listitem
Code à rajouter dans l'override.ini.append.php :
[line_project] Source=node/view/listitem.tpl MatchFile=listitem/project.tpl Subdir=templates Match[class_identifier]=project
Ceci est la vue non overridée de l'objet project en mode listitem
Code à rajouter dans l'override.ini.append.php :
[line_project] Source=node/view/listitem.tpl MatchFile=listitem/project.tpl Subdir=templates Match[class_identifier]=project
Ceci est la vue non overridée de l'objet project en mode listitem
Code à rajouter dans l'override.ini.append.php :
[line_project] Source=node/view/listitem.tpl MatchFile=listitem/project.tpl Subdir=templates Match[class_identifier]=project
Ceci est la vue non overridée de l'objet project en mode listitem
Code à rajouter dans l'override.ini.append.php :
[line_project] Source=node/view/listitem.tpl MatchFile=listitem/project.tpl Subdir=templates Match[class_identifier]=project