Drahtlose Kommunikation

Mit phyWave-Modulen ins IoT

18. Oktober 2018, 8:26 Uhr | Dr.-Ing. Claus Kühnel
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 1

Von hcitool lescan werden alles BLE-Geräte der Umgebung gelistet. In meinem Fall sind das neben dem phyWave-CC2650 mit der MAC-Adresse B0:B4:48:CC:72:85 noch zwei BLE-Beacons (abeacon_FC9F, AprilBeacon_E3C6) und einige weitere, als unknown deklarierte Geräte.

Die Kenntnis der MAC-Adresse ist für den Verbindungsaufbau in den Connected Mode erforderlich, was beim Aufruf des Python Scripts phyWaveBLE.py zu sehen ist. Mit der Option –all werden alle Komponenten auf dem phyNode-Sensor-Board angesprochen.

Wie aus Bild 3 zu erkennen ist, werden nach dem Verbindungsaufbau alle Farben der RGB-LED nacheinander aktiviert bis schließlich am Ende die weiße LED eingeschaltet bleibt. Daran anschließend folgen Abfragen der einzelnen Sensoren bis hin zum Farbsensor und die Ausgabe der ermittelten Werte. Die Abfrage der Sensoren erfolgt in einer Endlosschleife.

passend zum Thema

Dr. Claus Kühnel
Bild 4: Ausgabe des Programms _phyWaveBLE.py.
© xxxxx

Visualisierung der Sensordaten

Zu Testzwecken habe ich das Programm phyWaveBLE.py leicht angepasst, um die erhobenen Temperaturmesswerte auf Thing-Speak abzuspeichern, zu visualisieren und so die Anordnung über mehrere Tage testen zu können. Bei ThingSpeak handelt es sich um eine freie und einfach zu benutzende IoT-Plattform, die gut für schnelles Prototyping geeignet ist. Für einfache Szenarien bietet ThingSpeak darüber hinaus bereits gute Visualisierungsmöglichkeiten für die abgelegten Daten, die hier vollkommen ausreichend sind [4].

Dr. Claus Kühnel
Bild 5: Auslesen der Sensorvariablen durch Shell Script read_phyNode.
© xxxxx

Um die ermittelten Messwerte einem Programm zu übergeben, das diese Werte auf den ThingSpeak Server schickt, schreibe ich die Daten der interessierenden Sensoren in entsprechende Files. Folgender Code zeigt den eingefügten Code für den Temperatursensor TMP006: 

if arg.temperature or arg.all: print(‚Temp: ‚, tag.IRtemperature.read())

f = open(‚TEMP‘,‘w‘)

f.write(str(tag.IRtemperature.read()))

f.close() 

Für die anderen interessierenden Sensoren wurde adäquat verfahren. Das auf diese Weise angepasste Python Script steht als _phyWaveBLE.py auf Github zur Verfügung [5].

Das Python Script _phyWaveBLE.py wird nun mit den Argumenten –T, –H und –P für die zu aktivierenden Sensoren gestartet und zeigt die in Bild 4 dargestellten Ausgaben.

Unter Temp: werden die beiden Tempe-raturen des Temperatursensors TMP006 ausgegeben; hinter Humidity: stehen Feuchtigkeits- und Temperaturmesswert des Feuchtigkeitssensors HDC1000 und hinter Barometer: Luftdruck und Temperatur des Drucksensors MPL3115A2.

Aufgabe des folgenden Shell Scripts read_phyNode ist es, die in den Files TEMP, HUMI und PRES abgelegten Messwerte zu extrahieren und für die Anzeige aufzubereiten. Mit Hilfe eines Curl-Kommandos können schließlich die Daten an den ThingSpeak Server verschickt werden. Hierzu ist ein ThingSpeak-Account erforderlich, der dann auch den API-Key bereitstellt.

#!/bin/bash

#Thingspeak api_key=“DN62xxxxxxx58QCUK“

echo „Read phyNode Sensor Data...“ DATE=“$(date +“%d-%m-%Y %H:%M“)“

echo $DATE

read TEMP </home/pi/ble-cc26xx/ble_host_sw/bluepy/bluepy/TEMP #echo „TEMP = $TEMP“

TEMP=“${TEMP//(/}“

TEMP=“${TEMP//)/}“

AT=$(echo $TEMP | cut -d“,“ -f1)

AT=$(echo $AT | cut -c 1-5)

echo „Ambient Temperature = $AT *C“

IR=$(echo $TEMP | cut -d“,“ -f2)

IR=$(echo $IR | cut -c 1-5 )

echo „InfraRed Temperature = = $IR *C“

read HUMI </home/pi/ble-cc26xx/ble_host_sw/bluepy/bluepy/HUMI #echo „HUMI = $HUMI“

HUMI=“${HUMI//(/}“ HUMI=“${HUMI//)/}“

HT=$(echo $HUMI | cut -d“,“ -f1) HT=$(echo $HT | cut -c 1-5)

echo „HDC1000 Temperature = $HT *C“

read PRES </home/pi/ble-cc26xx/ble_host_sw/bluepy/bluepy/PRES #echo „PRES = $PRES“

PRES=“${PRES//(/}“ PRES=“${PRES//)/}“

PT=$(echo $PRES | cut -d“,“ -f2) PT=$(echo $PT | cut -c 1-5 )

echo „MPL3115A2 Temperature = $PT *C“

curl --data \

„api_key=$api_key&field1=$AT&field2=$IR&field3=$HT&field4=$PT“ \ https://api.thingspeak.com/update > log 2>&1

Dr. Claus Kühnel
Bild 6: Drei-Tages-Profil.
© xxxxx

Das Shell Script read_phyNode, ebenfalls auf Github [5] abgelegt, wird als Cronjob alle fünf Minuten aufgerufen, um die aktuellen Daten an den ThingSpeak-Server zu übermitteln.

Zum Test kann dieses Script auch von der Kommandozeile aus aufgerufen werden und zeigt dann die in Bild 5 dargestellten Ausgaben.

Zur Anzeige der auf dem ThingSpeak-Server abgelegten Daten kann man sich direkt auf dem Server einwählen oder man nutzt mit ThingView eine Android App auf einem Smartphone oder Tablet. Mit ThingView können ThingSpeak-Channels durch Eingabe der Channel-ID auf einfache Weise visualisiert werden. Bild 6 zeigt eine grafische Darstellung eines Drei-Tages-Profils der mit dem HDC1000-Sensor erhobenen Umgebungstemperatur.

Anpassung der Firmware

TI bietet mit seinem BLE Stack eine umfangreiche Sammlung von Firmware-Beispielen für das CC2650 SoC. Die Firmware des phyWave-CC2650 basiert auf diesem Stack.

PeripherieKomponenteHersteller
LichtTCS3772 Farblicht-zu-Digital-Umsetzer 
DruckMPL3115A2 I2C DrucksensorAMS
Drei-Achsen-BeschleunigungsmesserMMA8652FC 3-Achsen, 12 bit, Digital- BeschleunigungsmesserNXP
Drei-Achsen-MagnetometerMAG3110FCR1 Xtrinsic MAG3110 3-Achsen, DigitalmagnetometerNXP
IR-Thermosäulen-SensorTMP006 Infrarotsensor in Chip-Scale-GehäuseNXP
FeuchtigkeitssensorHDC1000 Digital-Feuchtigkeitssensor mit TemperatursensorTI
RGB-LEDnicht vorhandenTI
Kapazitiver Touch-KnopfSensitiver Bereich auf dem Bord 
User-KnopfStandard 
Socket-VerbindungArduinokompatibel 

 

Tabelle 3: Peripherie auf phyNode-Sensor-Board.

Die auf dem phyNode-Sensor-Board installierte Firmware implementiert ein Gatt-Server, der eine Schnittstelle zum Abrufen der Sensorwerte auf dem phyNode-Sensor-Board bereitstellt. Es werden stets alle Sensorwerte auf den BLE-Stack gelegt und es ist Sache der Software auf dem BLE-Client, welche Daten zur weiteren Verarbeitung ausgewählt werden. Zur Anpassung dieses Verhaltens kann die Firmware verändert werden.

Die Anwendung, Treiber und das Gatt-Server-Setup sind im Quellcode in einer BSD-ähnlichen Lizenz verfügbar. Das Flashen und Debuggen der Firmware des phyWave-CC2650 kann mit dem DevPack-XDS-110-Debugger von TI in Kombination mit dem Code-Composer-Studio (CCS) erfolgen.

CCS ist eine auf der Eclipse-Plattform basierende IDE von TI. Die CCS-IDE wird zum Programmieren, Build und Debug der mit dem IoT-Enablement-Kit 2 ausgelieferten Firmware auf dem phyNode-Sensor-Board verwendet. Im Application Guide [2] sind die notwendigen Schritte zur Installation des CCS sowie zu Build und Debug der Firmware des phyWave- CC2560 beschrieben. (fr)

Dr.-Ing. Claus Kühnel

studierte und promovierte an der Technischen Universität Dresden auf dem Gebiet der Informationselektronik und bildete sich später in Biomedizintechnik weiter. Bis zu seiner Pensionierung 2016 war er bei der Qiagen Instruments AG in Hombrechtikon (CH) als Director Electronic Engineering & Embedded Systems für die Entwicklung von Elektronik-Hardware und hardwarenaher Software verantwortlich. Aktuell arbeitet er als Consultant und weiterhin als Autor. Kontakt: info@ckuehnel.ch, https://www.linkedin.com/in/ckuehnel, https://www.xing.com/profile/Claus_Kuehnel
 

Referenzen:

[1] IoT-Enablement-Kit 2 Quickstart Guide http://www.phytec.de/fileadmin/user_upload/images/content/1.Products/IoT/L-816e_1.pdf

[2] IoT-Enablement-Kit 2 Application Guide http://www.phytec.de/fileadmin/user_upload/images/content/1.Products/IoT/L-812e_1.pdf

[3] Get Started with Bluetooth Low Energy on Linux https://www.jaredwolff.com/blog/get-started-with-bluetooth-low-energy/

[4] Die IoT-Plattform ThingSpeak im Praxistest https://www.zuehlke.com/blog/die-iot-plattform-thingspeak-im-praxistest/

[5] Scripts zum Beitrag https://github.com/ckuehnel/RaspberryPi/tree/master/Phytec%20IoT

 


  1. Mit phyWave-Modulen ins IoT

Lesen Sie mehr zum Thema


Jetzt kostenfreie Newsletter bestellen!