Hey! Sie scheinen aus United States zu kommen, möchten Sie auf die Englisch Webseite wechseln?
Switch to Englisch site
Skip to main content

XinaBox-Wetterstation mit ubidots-Cloud

Zerynth, XinaBox und die ubidots-Cloud sind praktische Tools für die IoT-Prototypenerstellung. Dieser Artikel hilft Ihnen, XinaBox für die Erfassung der Wetterdaten von einem SW03-Sensor und die Herstellung einer Verbindung zur ubidots-Cloud zu progr

Parts list

Qty Produkt Part number
1 174-3746
1 XinaBox xCHIP Wi-Fi & Bluetooth Core Module CW02 174-3702
1 XinaBox, USB Programming Interface Module for FT232R - IP01 174-3703
1 Zerynth Studio
1 ubidots

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

Was ist XinaBox?

IMG_7176_copy_70b5fce003868c0421b4735c75e4265e9a1196ed.jpg

XinaBox ist modulare Elektronik mit verschiedenen Kern- und Sensormodulen. Kenntnisse über Kabel, Löten, Steckplatinen oder Hardware sind nicht erforderlich, sodass sich in kurzer Zeit Prototypen erstellen lassen. Bei diesem Projekt kommen das Kernmodul CW02 und das Sensormodul SW03 zum Einsatz. Das CW02 ist ein Kernmodul mit dem WLAN-Chip ESP8266/ESP-12F. Das SW03 ist ein Wettersensormodul zur Erfassung von Umgebungsdaten.

Weitere Informationen zu XinaBox finden Sie unter https://xinabox.cc/pages/overview.

Was ist Zerynth?

Laut Eigenaussage ist Zerynth „ein Software-Toolkit zur Programmierung der beliebtesten 32-Bit-Mikrocontroller in Python oder gemischtem C/Python“. Daher können Sie mit Zerynth 32-Bit-Mikrocontroller wie XinaBox ohne C-Code programmieren, wodurch sich die Komplexität verringert. Welche Geräte von Zerynth unterstützt werden, erfahren Sie unter Unterstützung durch Zerynth.

Weitere Informationen zu Zerynth finden Sie unter https://www.zerynth.com/.

Was ist ubidots?

Ubidots ist die Cloud-Plattform des Internets der Dinge. Zu ihren Hauptfunktionen gehören die Erfassung von Daten, die Visualisierung von Analysen und die Verwaltung von Regeln. Die Oberfläche von ubidots ist einfach und benutzerfreundlich. Sie können ein eigenes Dashboard zur Anzeige der eingehenden Daten erstellen. Mit den APIs in ubidots können Sie Ihre Geräte anschließen, Sensordaten erfassen und Ihre Daten in nur wenigen Schritten visualisieren. Vor allem: Es ist kostenlos.

Weitere Informationen zu ubidots finden Sie unter https://ubidots.com/.

Der erste Schritt: Hardware zusammenbauen

Schließen Sie das Modul wie unten gezeigt an:

  • XinaBox CW02 an das USB-Programmierschnittstellenmodul IP01 anschließen.
  • Den Wettersensor SW03 an das CW02 anschließen.

IMG_08303_a6550cd1b9e7b96f4cd543158e3465570bf9f848.jpg

Wenn Sie sich für die Hardware interessieren, können Sie unter Technische Daten der XinaBox CW02 oder Dokumentation von Zerynth mehr erfahren.

Der zweite Schritt: Zerynth Studio einrichten

Zerynth Studio ist eine IDE, die das Schreiben von eingebetteter Hardware in Python unterstützt. Sie ist kostenlos und plattformübergreifend und unterstützt Windows 64-Bit, Linux 64-Bit und Mac OS X. Über den folgenden Link können Sie die Installationsdatei für Ihr PC-Betriebssystem herunterladen.

Zerynth Studio herunterladen: https://www.zerynth.com/zerynth-studio/

Es handelt sich um eine einfache Installation in nur wenigen Schritten. Über den folgenden Link gelangen Sie zur Installationsanleitung.

Installationsanleitung für Zerynth Studio:

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

Der dritte Schritt: XinaBox CW02 programmieren

Das Gerät in Zerynth Studio einrichten

Nach der Installation starten Sie Zerynth Studio. 

Befolgen Sie die Anweisungen in der Dokumentation von Zerynth,

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

  1. Erstellen Sie ein Benutzerkonto für den Zugriff auf Zerynth.
  2. Schließen Sie die XinaBox an Ihren PC an.
  3. Wählen Sie in der Symbolleiste für die Geräteverwaltung in Zerynth Studio die XinaBox CW02 (ESP32) aus (falls die XinaBox CW02 nicht angezeigt wird: Verbindung trennen und anschließend wiederherstellen, außerdem darauf achten, dass der Treiber installiert ist). Screenshot_2019-08-19_at_13.38_.04_2_2_4e48b6459967077c38061837cc3e5c35bead4422.png
  4. Registrieren Sie das Gerät, indem Sie in Zerynth Studio auf die Schaltfläche „Z“ klicken.
  5. Erstellen Sie durch einen erneuten Klick auf „Z“ eine virtuelle Maschine für das Gerät.
  6. Virtualisieren Sie das Gerät durch einen dritten Klick auf die Schaltfläche „Z“.

Die Schritte werden im Video gezeigt (sind identisch mit CW02).

Danach können Sie die XinaBox programmieren.

Daten vom Wettersensor SW03 erfassen

Wenn in diesem Abschnitt Probleme auftreten, finden Sie weitere Informationen im Einführungshandbuch.

Den Programmcode finden Sie in Zerynth Studio. Es ist ganz einfach: Sie navigieren in Zerynth Studio zu „Examples“ („Beispiele“), suchen nach „SW03“, klonen das Projekt „data environment“ („Datenumgebung“) und laden das Programm in XinaBox hoch. Die Datenausgabe des Programmcodes kann in der Konsole angezeigt werden.

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

Konsole:

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

Der vierte Schritt: ubidots einrichten

Ein Konto in ubidots erstellen

Registrieren Sie Ihr Konto mit Ihrer E-Mail-Adresse und einem von Ihnen ausgewählten Benutzernamen und Passwort unter https://app.ubidots.com/accounts/signin/. Nach der Anmeldung sehen Sie eine ähnliche Seite wie die folgende.

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

Das Gerät anschließen

Sie müssen zuerst ein neues „Device“ („Gerät") und „Variables“ („Variablen“) erstellen, um die vom Gerät bereitgestellten Daten zu empfangen. Klicken Sie auf „Devices“ („Geräte“) → „Add Device“ („Gerät hinzufügen“) und geben Sie den gewünschten Namen ein (z. B. xinabox). Wenn Sie das Gerät anklicken, das Sie gerade erstellt haben, sehen Sie in etwa Folgendes.

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

Erstellen Sie als Nächstes eine neue Variable, damit ubidots von dem Gerät gesendete Inhalte empfangen kann. Klicken Sie auf „Add Variable“ („Variable hinzufügen") → „Default“ („Standard“) und geben Sie als Namen der Variable wie unten gezeigt „temperature“ („Temperatur") ein.

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

Der fünfte Schritt: Zufallsdaten an ubidots senden

Starten Sie Zerynth Studio und suchen Sie unter „Examples“ („Beispiele") nach „Ubidots“ → „IOT“ → „Controlled publish period“ („Kontrollierter Veröffentlichungszeitraum") oder laden Sie den Anhang unten auf dieser Seite herunter.

Sehen Sie sich den Ordner von diesem Projekt an.

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

Code für 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)

Sehen Sie sich den Code für main.py an. Diese Funktion

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

sendet das MQTT-Paket mit den Nutzdaten { 'value': random(0,10) } an ubidots. Es handelt sich um eine Funktion, die Daten an ubidots sendet.

In main.py müssen Sie den Wert von 2 Variablen ändern: SSID und PSW in Zeile 31.

 

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

SSID und PSW (Passwort) finden Sie in Ihren WLAN-Netzwerkeinstellungen. Ich verwende mein Mobiltelefon als WLAN-Hotspot. Natürlich ist mein Mobiltelefon mit dem Internet verbunden (über ein 4G-Mobilfunknetz).

device.conf.json – Speichert die Konfiguration des Geräts. Wir müssen den Wert von „device_label“ und „api_token“ ändern.

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

„my_dev“ und „api-token“ sind die eindeutigen Informationen zur Authentifizierung von Geräten in der Cloud. Sie können die eindeutigen device_label und api_token in ubidots abrufen.

Gehen Sie zurück zu Ihrem Browser. Klicken Sie auf dem von Ihnen erstellten Gerät auf die Schaltfläche, auf die der Pfeil zeigt, um den Anzeigemodus zu ändern. Suchen Sie auf der linken Seite nach dem device_label „xinabox“ (Groß-/Kleinschreibung beachten). Klicken Sie auf den Namen in der oberen rechten Ecke und dann auf „API Credentials“ („API-Anmeldedaten“), um den Inhalt des „Default token“ („Standardtoken“) in das api_token zu kopieren.

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

Nach der Änderung lautet device.conf.json wie folgt:

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

Nachdem Sie die Datei main.py in Zerynth Studio überprüft haben, können Sie sie auf die XinaBox hochladen. Das Ergebnis ist folgendes:

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

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

Der sechste Schritt: Ein Online-Dashboard erstellen

In ubidots können Sie festlegen, welche Daten auf welche Weise im Dashboard angezeigt werden sollen.

In diesem Video erfahren Sie, wie Sie ein einfaches Dashboard erstellen.

Der siebte Schritt: Die Daten des SW03-Sensors an ubidots weiterleiten

Wir müssen den oben genannten Code nur integrieren, um die SW03-Daten an die ubidots-Cloud zu senden. Die Übertragung der Sensordaten kann im Dashboard von ubidots angezeigt werden.

Dies ist der Code für die zusammengeführte main.py (kann auch aus dem Anhang heruntergeladen werden):

# 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> ######

Hinweis: Sie müssen SSID und PSW in main.py und device_label und api_token in device.conf.json ändern.

Ergebnis:

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

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

My articles

1. Building a Hill Fire Detection IoT with LoRa 

Part 1: Introduction

Part 2: Details of the system

2. Connecting XinaBox IoT with Zerynth to Cloud

Part 1: Introduction and Simple Example

Part 2: Uploading Data to OKdo Cloud and Visualising Data

3. XinaBox Weather Station with ubidots Cloud

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