Drahtlose Kommunikation Mit phyWave-Modulen ins IoT

Wie wird ein IoT-Projekt erfolgreich?
phyWave-Module für das IoT

Daten von Sensoren im Netz oder zu Aktoren aus dem Netz verfügbar zu machen ist die Aufgabe von peripherienahen, meist drahtlos kommunizierenden IoT-Geräten. Mit den phyWave-Modulen stellt Phytec solche IoT-Module her, die in eigene Anwendungen integriert werden können. Wir zeigen, wie es geht.

Die sogenannten IoT-Enablement-Kits, die ein phyWave-Modul mit einem phyNode-Sensor-Board kombinieren, ermöglichen ein schrittweises Herantasten an diese Technologie. phyNodes können mit Batterien bestückt werden, um den Einsatz unter realen Bedingungen im Feld zu testen.

Phytecs IoT-Enablement-Kit 2 verfolgt den Ansatz, dass die gewünschten Sensordaten eines phyNode Sensor-Boards ohne Umwege abgefragt und verarbeitet werden können. Der auf dem phyNode Sensor-Board eingesetzte Controller ist ein phyWave-2650 und ist mit dem namensgebenden Chip CC2650 von Texas Instruments bestückt.

Mit einem im Lieferumfang enthaltenen BLE-USB-Stick kann von einem normalen Linux-PC auf die Daten zugegriffen werden. Alternativ kann ein Embedded-Linux-Device mit BLE-Support, wie ein Raspberry Pi 3, BeagleBone Blue, NanoPi oder anderer für die Kommunikation zum phyWave-CC2650 eingesetzt werden.

Mit ihrer geringen Stromaufnahme und dem Powermanagement auf dem Modul eignen sich die phyWave-Module optimal für batteriebetriebene IoT- oder Energy-Harvesting-Anwendungen. Alle Mo-dule sind auf CE-Konformität überprüft und erleichtern damit die abschließende Konformitätserklärung für ein Endprodukt beim Kunden.

phyWave-CC2560 und phyNode Sensor-Board 

Das phyWave-CC2650 ist eins der insgesamt drei von Phytec angebotenen phyWave-Modulen (Tabelle 1). Das phyWave-CC2650 bietet die meisten Features und ist deshalb auch Bestandteil des IoT-Enablement-Kits 2.

Das kompakte 19 mm × 28 mm mes-sende phyWave-CC2650 Board weist neben der On-Board-Antenne auch noch eine U.FL-Buchse zum Anschluss einer externen Antenne auf. Gerade beim Einbau in ein Gehäuse kann eine externe Antenne sich günstig auf die Reichweite auswirken. Bild 1 zeigt die Komponenten des Boards in einem Blockschema.

Das SoC TI CC2650 enthält einen 32-Bit-arm-Cortex-M3-Prozessor, der als Hauptprozessor mit 48 MHz betrieben wird. Der Sensor-Controller ist ideal für die Anbindung externer Sensoren und für die autonome Erfassung von analogen und digitalen Daten, während sich der Rest des Systems im Schlafmodus befinden kann. Der BLE-Controller und der IEEE 802.15.4 MAC sind in ROM eingebettet und laufen teilweise auf einem separaten arm-Cortex-M0-Prozessor.

phyWave ModuleCPUFunk
phyWave-KW41ZNXP Kinetis KW41Z, ARM Cortex-M0+, 48 MHz2,4 GHz IEEE 802.15.4, Bluetooth Low Energy 4.2 (simultan)
phyWave-KW2xDNXP ARM Cortex-M4, 48 MHz2,4 GHz IEEE 802.15.4 Funktransceiver
phyWave-CC26xxarm-Cortex-M3 und Cortex- M0 (HF-Core)2,4 GHz IEEE 802.15.4, ZigBee, RF4CE, Bluetooth Low Energy

 

Tabelle 1: phyWave Module.

Diese Architektur verbessert die Gesamtsystemleistung und die Stromaufnahme und stellt den Flash-Speicher für die Anwendung frei. Bluetooth- und ZigBee-Stacks sind kostenlos von TI erhältlich. Die technischen Daten des phyWave-CC2650 sind in Tabelle 2 zusammengestellt. Die peripheren Anschlussmöglichkeiten sind recht vielfältig, wodurch der Anschluss umfangreicher Sensorik/Aktorik möglich wird. Außerdem ist ein achtkanaliger 12-bit-A-D-Wandler vorhanden.

Das phyNode-Sensor-Board stellt die Peripherie für den Betrieb des phyWave-CC2650 bereit. Am Rande des Boards sind eine Reihe von Sensoren angeordnet. Tabelle 3 listet alle auf dem phyNode-Sensor-Board installierten peripheren Komponenten auf. Arduino-kompatible Buchsenleisten ermöglichen die Installation von Arduino-Shields, um zusätzliche Erweiterungen installieren zu können.

IoT-Enablement-Kit 2 Software

Im Auslieferungszustand des IoT-Enablement-Kits 2 ist auf dem phyNode bereits die Firmware eines Demoprojektes vorinstalliert, die alle Sensordaten abfragt und auf den BLE-Stack legt. Zur Inbetriebnahme des Boards ist dem Quickstart Dokument [1] zu folgen, was vor allem das Setzen der Jumper anbelangt.

Wie eingangs bereits erwähnt, soll hier ein Raspberry Pi 3 als BLE-Client dienen, der aber zuvor noch mit der entsprechenden Software ausgestattet werden muss. Auch hierzu bietet das Quickstart-Dokument [1] die notwendige Hilfe.

Die Installation der BLE-Komponenten auf dem Raspberry Pi 3 unter Raspbian erfolgt durch Eingabe der folgenden Kommandos:

 $ sudo apt-get install bluez $ sudo apt-get install bluez-hcidump

Nach Installation von Git, Python und weiteren Software-Komponenten kann das die phyWave-Firmware und die Demosoftware enthaltende Repository ble-cc26xx von Phytec heruntergeladen werden. Anschließend ist mit make die Testumgebung zu bilden.

 $ sudo apt-get install git python build-essential libglib2.0-dev libdbus-1-dev

$ git clone git://git.phytec.de/ble-cc26xx

$ cd ble-cc26xx/ble_host_sw/bluepy/bluepy

$ make

Für den Zugriff auf die Sensordaten gibt es verschiedene Möglichkeiten. Zum einen bietet sich die Verwendung des zum Demoprojekt gehörenden Python Scripts an, zum anderen kann der Zugriff auch direkt über das gatttool von Linux erfolgen.

Mit dem Zugriff über Python will ich mich in der Folge befassen. Detailinformation ist im Application Guide von Phytec [2] zu finden. Für den Zugriff mit Hilfe des gatttools sei auf [2] und [3] verwiesen.

Eigenschaft 
CPUTexas Instruments arm-Cortex-M3 und Cortex-M0 (HF-Core)
Speicher128 KB Flash + 8 KB Cache, 20 KB RAM
Receiver2,4 GHz IEEE 802.15.4, ZigBee, RF4CE, Bluetooth Low Energy
RX/TX-Stromaufnahme5,9 / 6,1 mA
AntennePCB-Antenne oder konfigurierbar
SchnittstellenUART, 2 × SPI, Ultra-Low-Power-SPI, I2C, I2S, RTC, AES 10-31 GPIOs
VerschlüsselungCryptography Acceleration Unit (CAU), AES encryption
A-D-Wandler12-bBit, 200 kS/s, 8 Kanäle
Timer4 Universal-Timer-Modul (8 × 16-Bit- oder 32-Bit-4x-Timer)
HF-AusgangsleistungProgrammierbar -21 bis +5 dBm
Empfindlichkeit6LoWPAN -100 dBm, BLE -96 dBm
BetriebssystemTI-RTOS
ZertifizierungCE
Versorgungsspannung1,8 V bis 3,8 V
Abmessungen19 mm × 28 mm

 

Tabelle 2: Technische Daten phyWave-CC2650.

Abfrage der Sensordaten

Mit der Installation der Software-Komponenten auf dem als BLE-Client dienenden Raspberry Pi 3 sind alle Voraussetzungen für die Abfrage der Sensordaten gegeben. BLE hat die Möglichkeit, Daten in zwei verschiedenen Modi auszutauschen. Es werden der Advertising Mode und der Connected Mode unterschieden.

Nach einem Reset des phyWave-Sensor-Boards befindet sich dieses im Advertising Mode und gibt seine MAC-Adresse aus. BLE-Devices weisen eine einzigartige 6-Byte-BLE- oder MAC-Adresse auf, die mit Hilfe des Kommandos

sudo hcitool lescan

abgefragt werden kann. Nach erfolgter Abfrage der MAC-Adresse kann das zur Demo gehörende Python Script phyWaveBLE.py aufgerufen werden, um alle Sensordaten auszugeben. In Bild 3 sind die erforderlichen Schritte dargestellt.

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.

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