Hé! Vous semblez être en United States, souhaitez-vous utiliser notre site English ?
Switch to English site
Skip to main content

Station météorologique XinaBox avec ubidots Cloud

Zerynth, XinaBox et ubidots Cloud sont des outils pratiques pour la réalisation de prototypes IoT. Cet article est conçu pour vous aider à programmer XinaBox de manière à collecter des données météorologiques du capteur SW03 et à les relier à ubidots

Parts list

Qty Produit Part number
1 • Module de capteur météorologique XinaBox SW03, pour MPL3115A2 174-3746
1 • Module principal XinaBox xCHIP Wi-Fi et Bluetooth CW02 174-3702
1 • Module XinaBox d'interface de programmation USB 174-3703
1 Zerynth Studio
1 ubidots

For Chinese version, please visit at <实例 - XinaBox气象站和ubidots云>.

Qu'est-ce que XinaBox ?

IMG_7176_copy_70b5fce003868c0421b4735c75e4265e9a1196ed.jpg

XinaBox est un système électronique modulaire composé de différents modules principaux et modules capteurs. Même sans posséder de connaissances en câblage, soudure, carte d'expérimentation ou matériel informatique, vous pouvez réaliser un prototype en quelques minutes. Ce projet utilise le module principal CW02 et le module capteur SW03. Le module principal CW02 est doté d'une puce ESP8266/ESP-12F Wi-Fi. Le SW03 est un module capteur météorologique permettant de collecter les données à partir de l'environnement immédiat.

Pour en savoir plus sur XinaBox, rendez-vous sur le site https://xinabox.cc/pages/overview.

Qu'est-ce que Zerynth ?

Selon Zerynth, "Zerynth est une boîte à outils logicielle qui permet de programmer les microcontrôleurs 32 bits les plus populaires en Python ou mélange C/Python". Par conséquent, vous pouvez utiliser Zerynth pour programmer des microcontrôleurs 32 bits, tels que XinaBox, sans toucher au code C, ce qui réduit la complexité. Dans Support Zerynth, vous pouvez consulter les circuits pris en charge par Zerynth.

Pour en savoir plus sur Zerynth, rendez-vous sur le site https://www.zerynth.com/.

Qu'est-ce que ubidots ?

ubidots est la plate-forme Cloud de l'Internet des objets (IoT). Ses fonctions principales incluent la capture des données, la visualisation, l'analyse et la gestion des règles. L'interface graphique utilisateur ubidots est simple et facile à utiliser. Vous pouvez créer vos tableaux de bord pour afficher les données reçues par ubidots. Les API dans ubidots permettent de connecter les appareils et de visualiser les données en quelques étapes seulement. Et le plus important, c'est gratuit.

Pour en savoir plus sur ubidots, rendez-vous sur le site https://ubidots.com/.

Étape 1 : Assemblage du matériel

Connectez le module comme indiqué ci-dessous :

  • Connectez le module XinaBox CW02 au module d'interface de programmation USB IP01.
  • Connectez le capteur météorologique SW03 au module CW02.

IMG_08303_a6550cd1b9e7b96f4cd543158e3465570bf9f848.jpg

Si vous souhaitez en savoir plus sur le matériel, consultez le document Spécifications techniques XinaBox CW02 ou Documentation Zerynth.

Étape 2 : Configuration de Zerynth Studio

Zerynth Studio et un environnement de développement intégré (IDE) prenant en charge l'écriture de matériel embarqué en Python. Il est gratuit et multi plate-forme, et compatible avec Windows 64 bits, Linux 64 bits et Mac OS X. Cliquez sur le lien ci-dessous pour télécharger le fichier d'installation correspondant au système d'exploitation de votre ordinateur.

Téléchargez Zerynth Studio : https://www.zerynth.com/zerynth-studio/.

Installation facile en quelques étapes seulement. Cliquez sur le lien ci-dessous pour consulter le guide d'installation.

Guide d'installation Zerynth Studio :

https://docs.zerynth.com/latest/official/core.zerynth.docs/installationguide/docs/index.htmlStep

Étape 3 : Programmation de XinaBox CW02

Configuration de l'appareil dans Zerynth Studio

Après l'installation, lancez Zerynth Studio. 

Suivez les étapes indiquées dans la documentation :

Lien : https://docs.zerynth.com/latest/official/core.zerynth.docs/gettingstarted/docs/index.html

  1. Créez un compte utilisateur pour accéder à Zerynth.
  2. Connectez le XinaBox à votre ordinateur.
  3. Sélectionnez le module XinaBox CW02 (ESP32) dans la barre d'outils de gestion de l'appareil dans Zerynth Studio (débranchez-le et rebranchez-le si le module XinaBox CW02 n'apparaît pas ; vérifiez également que le pilote est bien installé). Screenshot_2019-08-19_at_13.38_.04_2_2_4e48b6459967077c38061837cc3e5c35bead4422.png
  4. Enregistrez l'appareil en cliquant sur le bouton "Z" dans Zerynth Studio.
  5. Créez une machine virtuelle pour l'appareil en cliquant sur le bouton "Z" une deuxième fois.
  6. Virtualisez l'appareil en cliquant sur le bouton "Z" une troisième fois.

Les étapes sont reprises dans la vidéo (mêmes étapes que le module CW02).

Vous êtes maintenant prêt à programmer le XinaBox.

Collecte des données du capteur météorologique SW03

Si vous rencontrez des difficultés dans cette section, reportez-vous au Guide de mise en route.

Le code programme est disponible dans Zerynth Studio. Il est simple. Dans Zerynth Studio, il suffit d'accéder à "Examples" (Exemples) et de rechercher "SW03", de cloner le projet "data environment" (environnement de données) et de télécharger le programme vers XinaBox. La sortie de données du code programme peut être affichée dans la console.

##############################################
#   This is an example for SW03 ambient
#   temperature, altitude and pressure
#   sensor.
#
#   Ambient temperature, altitude and pressure
#   is measured and printed out on the console.
##############################################
import streams
from xinabox.sw03 import sw03

streams.serial()

# SW03 instance
SW03 = sw03.SW03(I2C0)

# configure SW03
SW03.init()

while True:
    temp = SW03.getTempC()      # return temp in degree celcius
    alt = SW03.getAltitude()    # return alitude in meters
    pres = SW03.getPressure()   # return pressure in pascals
    
    print('Temperature: ', temp, ' C')
    print('Altitude   : ', alt, ' m')
    print('Pressure   : ', pres, ' Pa')
    
    sleep(1000)

Console:

Screenshot_2019-08-20_at_15.33_.56_4_a5bee9a00d8ac8f6d2c712253d6566470233ae5f.png

Étape 4 : Configuration d'ubidots

Création d'un compte dans ubidots

Enregistrez votre compte à l'aide de votre adresse e-mail, nom d'utilisateur sélectionné et mot de passe sur le site https://app.ubidots.com/accounts/signin/. Une fois la connexion établie, une page similaire à celle ci-dessous s'affiche.

Screenshot_2019-08-21_at_14.26_.02_2_1aca03da749cea03831d702136e6e1ec940b36b5.png

Connexion de votre appareil

Vous devez tout d'abord créer un "Device" (appareil) et des "Variables" pour recevoir les données publiées par l'appareil. Cliquez sur "Devices" → "Add Device" (Appareils → Ajouter un appareil), puis saisissez le nom souhaité (par exemple, xinabox). Cliquez sur l'appareil nouvellement créé pour afficher un contenu similaire à celui ci-dessous.

Screenshot_2019-08-21_at_14.46_.10_1_3ba9471836e96c20dc4fa6ddda8decb0ad4a2226.png

Ensuite, créez une variable pour permettre à ubidots de recevoir le contenu envoyé par l'appareil. Cliquez sur "Add Variable" → "Default" (Ajouter une variable → Valeur par défaut), puis saisissez le nom de variable "temperature" (température) comme indiqué ci-dessous.

Screenshot_2019-08-21_at_14.51_.34_1_7f6dd58e8cedcca56052288dc6c5b02a1bf3f58d.png

Étape 5 : Envoi de données aléatoires à ubidots

Lancez Zerynth Studio et recherchez "Ubidots → IOT → Controlled publish period" (Période de publication contrôlée) dans "Examples" (Exemples), ou bien téléchargez la pièce jointe au bas de cette page.

Observez le dossier de ce projet :

Screenshot_2019-08-21_at_15.05_.16_1_e54e486ec7e8eee3c5386ad331f2f4947666a366.png

Code pour main.py :

# Ubidots Controlled publish period 
# Created at 2017-10-03 08:49:48.182639

import streams
import json
from wireless import wifi

# choose a wifi chip supporting secure sockets
from espressif.esp32net import esp32wifi as wifi_driver

# import ubidots iot module
from ubidots.iot import iot

# import helpers functions to easily device configuration
import helpers

# SET DEVICE CONFIGURATION INSIDE THE FOLLOWING JSON FILE
new_resource('device.conf.json')

# define a callback for period updates
def period_callback(value):
    global publish_period
    print('requested publish period:', int(value))
    publish_period = int(value)

streams.serial()
wifi_driver.auto_init()

print('connecting to wifi...')
# place here your wifi configuration
#### !!!! Change HERE !!!!
wifi.link("SSID",wifi.WIFI_WPA2,"PSD")

device_conf = helpers.load_device_conf()
publish_period = 1000

# create ubidots iot device instance, connect to mqtt broker, set variable update callback and start mqtt reception loop
device = iot.Device(device_conf['device_label'], device_conf['user_type'], device_conf['api_token'])
print('connecting to mqtt broker...')
device.mqtt.connect()

device.on_variable_update(device_conf['device_label'], 'publish_period', period_callback, json=False)
device.mqtt.loop()

while True:
    print('publish random sample...')
    device.publish({ 'value': random(0,10) }, variable='temperature')
    sleep(publish_period)

Observez le code pour main.py. Cette fonction

device.publish({ 'value': random(0,10) }, variable='temperature')

envoie la charge utile contenue dans le paquet MQTT { 'value': random(0,10) } à ubidots. Cette fonction envoie des données à ubidots.

Dans main.py, vous devez modifier la valeur de 2 variables, SSID et PSW à la ligne 31.

# place here your wifi configuration
wifi.link("SSID",wifi.WIFI_WPA2,"PSW")

SSID et PSW (mot de passe) se trouvent dans votre paramètre de réseau Wi-Fi. J'utilise mon téléphone mobile comme point d'accès Wi-Fi, bien sûr, mon téléphone mobile est connecté à Internet (sur le réseau cellulaire 4G).

device.conf.json - stocke la configuration de l'appareil ; nous devons modifier la valeur de "device_label" et  api_token".

{
    "user_type": "educational",
    "device_label": "my-dev",
    "api_token": "api-token"
}

"my_dev" et "api-token" représentent les seules informations utilisées pour authentifier les appareils dans le Cloud. Vous pouvez obtenir les device_label et api_token uniques dans ubidots.

Revenez à votre navigateur. Dans l'appareil que vous avez créé, cliquez sur le bouton indiqué par la flèche pour modifier le mode d'affichage et recherchez le device_label "xinabox" sur la gauche (respectez les majuscules/minuscules). Cliquez sur le nom dans le coin supérieur droit, puis cliquez sur "API Credentials" (Authentification API) pour copier le contenu du jeton par défaut (Default token) vers le jeton api (api_token).

Screenshot_2019-08-21_at_16.23_.37_1_78f013ae6d49e30483f5a18d468ed4274f496309.png

Après avoir apporté la modification, device.conf.json apparaît comme suit :

{
    "user_type": "educational",
    "device_label": "xinabox",
    "api_token": "A1E-7xxxu"
}

Après avoir vérifié ce fichier main.py dans Zerynth Studio, téléchargez-le vers XinaBox. Vous obtenez le résultat suivant :

Screenshot_2019-08-21_at_16.43_.37_1_21d1b55d88f6fec5aa4e1efd8d6c165039fc4f89.png

Screenshot_2019-08-21_at_16.42_.25_1_fabfcf24714da29a1f26243de887678528987929.png

Étape 6 : Création d'un tableau de bord en ligne

Dans ubidots, vous décidez des données à présenter, ainsi que des méthodes d'affichage des données sur le tableau de bord.

Consultez la vidéo pour apprendre à créer un tableau de bord simple.

Étape 7 : Transfert des données du capteur SW03 vers ubidots

Il suffit d'intégrer le code ci-dessus pour envoyer les données SW03 vers ubidots Cloud. La transmission des données du capteur peut être affichée dans le tableau de bord ubidots.

Ceci est le code pour le fichier main.py, également disponible au téléchargement à partir de la pièce jointe :

# test_20190813_ubidots
# Created at 2019-08-13 04:01:02.692687

#################### SETTING 1 <BEGIN> ####################
#################### Uploading data to Ubidots Dashboard 
## Example: Ubidots Controlled publish period

import streams
import json
from wireless import wifi
 
# choose a wifi chip supporting secure sockets
from espressif.esp32net import esp32wifi as wifi_driver

# import ubidots iot module
from ubidots.iot import iot

# import helpers functions to easily device configuration
import helpers

# SET DEVICE CONFIGURATION INSIDE THE FOLLOWING JSON FILE
new_resource('device.conf.json')

# define a callback for period updates
def period_callback(value):
    global publish_period
    print('requested publish period:', int(value))
    publish_period = int(value)

streams.serial()
wifi_driver.auto_init()

print('connecting to wifi...')
# place here your wifi configuration
wifi.link("Rxxxs",wifi.WIFI_WPA2,"axxx4")

device_conf = helpers.load_device_conf()
publish_period = 1000

# create ubidots iot device instance, connect to mqtt broker, set variable update callback and start mqtt reception loop
device = iot.Device(device_conf['device_label'], device_conf['user_type'], device_conf['api_token'])
print('connecting to mqtt broker...')
device.mqtt.connect()

device.on_variable_update(device_conf['device_label'], 'publish_period', period_callback, json=False)
device.mqtt.loop()
#################### SETTING 1 <END> ####################


#################### SETTING 2 <BEGIN> ####################
## Example: environmental_data, for SW03 weather sensor
## This is an example for SW03 ambient temperature, altitude and pressure sensor.

#import streams
from xinabox.sw03 import sw03

#streams.serial()

# SW03 instance
SW03 = sw03.SW03(I2C0)

# configure SW03
SW03.init()
#################### SETTING 2 <END> ####################


a=0

while True:
    ###### SW03 weather sensor <BEGIN> ######
    temp = SW03.getTempC()      # return temp in degree celcius
    alt = SW03.getAltitude()    # return alitude in meters
    pres = SW03.getPressure()   # return pressure in pascals
    ###### SW03 weather sensor <END> ######
    sleep(1)
    
    ###### Publish data to Ubidots Cloud <BEGIN> ######
    a=a+1
    print('#', a)
    
    print('Temperature: ', temp, ' C')
    device.publish({ 'value': temp}, variable='temperature')
    sleep(1000)
    print('Altitude   : ', alt, ' m')
    device.publish({ 'value': alt}, variable='altitude')
    sleep(1000)
    print('Pressure   : ', pres, ' Pa')
    device.publish({ 'value': pres}, variable='pressure')
    
    print(".\n\n\n")
    sleep(publish_period)
    ###### Publish data to Ubidots Cloud <END> ######

Remarque : vous devez changer le SSID, PSW dans le fichier main.py et changer device_label et api_token dans device.conf.json.

Résultat :

Screenshot_2019-08-21_at_17.22_.47_1_099c79831d1b9f839f2cf8a4421c6d4c3aec90db.png

Screenshot_2019-08-21_at_17.43_.30_1_5f662f20b4e9e9492eb245d95c136ae5d50ac4fd.png

 

A student studying electronic and information technology and keen to learn new skills.