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.
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].
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
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.
Peripherie | Komponente | Hersteller |
---|---|---|
Licht | TCS3772 Farblicht-zu-Digital-Umsetzer | |
Druck | MPL3115A2 I2C Drucksensor | AMS |
Drei-Achsen-Beschleunigungsmesser | MMA8652FC 3-Achsen, 12 bit, Digital- Beschleunigungsmesser | NXP |
Drei-Achsen-Magnetometer | MAG3110FCR1 Xtrinsic MAG3110 3-Achsen, Digitalmagnetometer | NXP |
IR-Thermosäulen-Sensor | TMP006 Infrarotsensor in Chip-Scale-Gehäuse | NXP |
Feuchtigkeitssensor | HDC1000 Digital-Feuchtigkeitssensor mit Temperatursensor | TI |
RGB-LED | nicht vorhanden | TI |
Kapazitiver Touch-Knopf | Sensitiver Bereich auf dem Bord | |
User-Knopf | Standard | |
Socket-Verbindung | Arduinokompatibel |
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