Station météo connectée avec une Wipy

Station météo connectée avec une Wipy

Station météo connectée avec une Wipy

Mise en place d'une station météo connecté autonome avec une carte Wipy écrite en Micro-python.

Il faut

100% Complete

Objectifs pédagogiques

A la fin de ce projet vous saurez :

  • Mettre en route une station météo simple.
  • Envoyer les données de la station vers le site pybytes, ou votre base de données.
  • Mettre en place votre environnement de développement micro-python avec le logiciel Atom.
  • Accéder à votre Wipy à partir de votre ordinateur.
  • Mettre la Wipy à l'heure.

La mise en place et le développement de la carte Wipy est simple, voici comment procéder.

Installation de l'environnement de développement Atom

Installation de l'environnement de développement Atom

100% Complete
Le logiciel libre Atom permet d'installer l'environnement de développement pour la carte Wipy. Pour cela il suffi d'installer l'extension développée par Pycom : Pymakr

Download

Télécharger et installer l'éditeur de texte Atom à partir de leur site officiel https://atom.io/

Installation du package Pymakr

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.

Installation du package Git

Bien que ce package soit un package installé par défaut avec Atom, si ce n'est pas le cas, voici comment l'installer

Dans le logiciel Atom : faire File > Settings > Install. Rechercher "Git" et cliquer sur "Install"

Au bout  d'un moment le package se télécharge et s'installe automatiquement.

Connexion du Wipy dans Atom

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é le 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édement (à place de "Default : 192.168.0.4.1")

Dans mon cas : COM45

Dans le bas de la fenêtre Atom, cliquer alors sur Connect.

Problème rencontré sous windows 10

Le module WiPy n'est pas détecté par Atom parmi les ports série

Si en lançant Atom, le Wipy branché n'est pas détecté, il faut sans doute installer le driver Pysense pour windows.

Tuto disponible en ligne ici : https://docs.pycom.io/gettingstarted/installation/drivers.html

Récupération des librairies officielles pour le Pysense

Récupération des librairies officielles pour le Pysense

100% Complete
Voici comment récupérer dans Atom les librairies pour le Pysense à partir du dépôt Git officiel.

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

Package git-clone

Si ce n'est pas déjà fait, installez le package git-clone dans Atom en faisant :

  1. Packages > Install et chercher git-clone
  2. Cliquez sur install

Récupération des librairies pour le Pysense

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.git

Au bout d'un moment, les répertoires et fichiers du dépôt vont apparaître dans Atom.

Construction d'une boite

Construction d'une boite

100% Complete
Pour rendre notre module totalement autonome il est nécessaire de l'installer en extérieur avec sa batterie. Voici comment faire une boite sur mesure.

Il faut

  • PMMA 3mm transparent
  • 8 vis M2 de 1 mm (longuere max)
  • 8 écrous M2
  • 2 cerflexes (pour tenir la batterie dans le fond de la boite)

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.

Astuce

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.

Astuce pour fixer la pysense

Montage de la boite

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.

20190508_212023

Download

Téléchargements

[svg+xml icon file]

Ces plans sont au format SVG ouvrable avec inkscape

(Version 20190510)

StationMeteo.svg
(38.57 kB)
Création d'un projet dans Atom

Création d'un projet dans Atom

100% Complete
Voici quelques informations générale à savoir au sujet de MicroPython et la manière de faire un projet dans Atom

Au sujet du MicroPython

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.

Création d'un projet dans Atom

  1. Créer un répertoire vide sur votre ordinateur. Dans notre cas, C:\StationMeteo
  2. Ouvrir Atom et faire :
    1. File > Open Folder et choisir le répertoire créer précédemment (C:\StationMeteo)
  3. Maintenant que le projet est créé, on peut lui ajouter des fichiers :

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.

Upload du projet dans le Wipy

Au lieux d'appuyer sur le bouton "Run" comme précédemment, il faut appuyer sur "Upload" (ou Ctrl + Alt + S)

Pour supprimer tout les fichiers dans le Wipy

Dans le REPL (Read Evaluate Print Loop, c'est à dire le prompt du module Pymakr), taper :

import os

os.mkfs('/flash')

Soft Reset

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

Mise à l'heure automatique de la Wipy

Mise à l'heure automatique de la Wipy

100% Complete
Voici comment mettre à jour l'heure et la date de la Wipy en utilisant le serveur de temps pool.ntp.org

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"), ())

Envoyer des données vers le site pybytes avec une Wipy

Envoyer des données vers le site pybytes avec une Wipy

100% Complete
Voici comment faire pour envoyer les données de la carte Pysense d'une Wipy vers le site pybytes tout en étant en mode deep sleep.

Objectifs pédagogiques

Nous allons voir comment faire pour :

  • ajouter une Wipy sur votre compte pybytes
  • mettre en place le mode deep sleep sur la Wipy
  • envoyer des données vers votre compte pybytes

Pybytes

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

Ajout de la Wipy dans pybytes

Pour ajouter une nouvelle Wipy dans pybytes, il faut aller dans le menu Devices > add a device to Pybytes. Choisir ensuite la Wipy

pybytes - add device

Ensuite viens la configuration du réseau wifi que va utiliser la carte Wipy.

pybytes - Wifi config

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éciales est fourni pour le faire de façon automatique.

Téléchargez la version pour votre ordinateur et suivez le wizard.

pybytes - firmware upgrade

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

Spécification

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. Ente chaque mesure on va "endormir" la Wipy en mode sauvegarde d'énergie.

  1. Initialisation des capteurs,
  2. Lecture des données des capteurs.
  3. Création d'un tread dans lequel on fait :
    1. Allumage de la led en rouge
    2. Envoie des données vers le site de pypytes
    3. Allumage de la led en vert
    4. Si on a été réveillé du mode deep sleep par un mouvement, on met le système en pause (cela doit permettre de ne pas freezer le système entre 2 éveils)
    5. On se met en deep sleep pendant 10 minutes.

Le mode deep sleep

Le mode deep sleep (ou mode sauvegarde d'énergie) permet de faire des économie conséquente de batterie. Dans ce mode le système ne consomme qu'environ ~350uA.

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 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()

Envoyer les données

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.

Screenshot - 09_05_2019 , 01_09_48

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é.

Code

Le code est disponible sur le dépôt GIT : https://github.com/AlexDesign-Fr/Station-meteo-with-Wipy

Envoyer des données sur son propre server

100% Complete
Comme tout objet connecté i lest possible d'envoyer ses données vers sont propre serveur sans passer par un site tierce.

Objectifs pédagogiques

En suivant ce projet vous saurez :

  • Flasher votre Wipy,
  • Connecter votre Wipy sur votre réseau Wifi.
  • Envoyer les données collectées par une Pysense vers votre serveur.

Flasher votre Wipy

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.

Download du logiciel Pycom upgrade

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

Screenshot - 12_05_2019 , 22_39_48

Cocher le réseau Wifi et faire Next

Screenshot - 12_05_2019 , 22_42_25

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.

Screenshot - 12_05_2019 , 22_44_12

Nous y voila, prenez la version pour votre système (Windows dans mon cas) :

Screenshot - 12_05_2019 , 22_46_30

Flashage du firmware stable avec "Pycom upgrade"

Screenshot - 12_05_2019 , 22_49_07
Screenshot - 12_05_2019 , 23_01_36
Screenshot - 12_05_2019 , 23_02_45

Et voila !

Connecter la Wipy sur son réseau Wifi

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)

Envoyer ses données vers un serveur Domoticz

On peut envoyer ses données 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

    request = { "type":"command",

                "param":"udevice",

                "idx":276,

                "svalue":lightResult}

    Requete = urequests.get(urlDomoticz, request )

    print( Requete.text ) # print the request result returned by the Domoticz server

    # going to sleep

    py.go_to_sleep()

# ============================================

# 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,())

Copyright © 2015 Alex-design.fr All rights reserved.