Posts mit dem Label bluetooth low energy werden angezeigt. Alle Posts anzeigen
Posts mit dem Label bluetooth low energy werden angezeigt. Alle Posts anzeigen

03.09.2015

Bluetooth-Wetterstation mit dem TI Sensortag

Neue Version der Wetterstations-Software

Vor einiger Zeit wurde hier eine Anleitung zum Bau einer Wetterstation mit dem TI-Sensortag gepostet.

Nachdem man  nicht mehr einfach einen kostenlosen TempoDB-Account bekommen kann, ist es Zeit, für eine zweite Version der Wetterstationssoftware für das Texas-Instruments-Sensortag. Sie nutzt  nun den Service von thingspeak.com zum Speichern und Visualisieren der Messdaten. Zusätzlich wird eine neue verbesserte Firmware für das Sensortag eingesetzt.

Beispiel: Livedaten im iFrame via Thingspeak.com



Sensortag von Texas-Instruments

Wichtig: diese Anleitung ist für die alte Version des TI-Sensortag, nicht die neue Version (Simplelink Sensortag)

Die Hardware bleibt gleich, wir verwenden auch das alte Wetterhäuschen aus der alten Anleitung.

Das TI-Sensortag (Version 1) enthält jede Menge Sensoren, die eigentlich schon eine komplette Wetterstation sind. Neben dem Thermometer gibt es einen Luftdrucksensor, einen Luftfeuchtigkeitssensor und (hier weniger relevante) Magnetfeld und Beschleunigungssensoren.

Problematische Firmware

Das Sensortag hat zwei Probleme
  • der Stromverbrauch ist relativ hoch, d.h. die eingebaute Knopfzelle hält nur wenige Wochen
  • Es baut den Kontakt zur Basisstation nicht von selbst aus: man muss einen Knopf auf dem Sensortag drücken, wenn der Kontakt verlorengeht. Das ist sehr schade wenn man den Kontaktverlust nicht bemerkt, dann werden keine Werte mehr gemessen.

Schritt 1: Neue Firmware aufspielen

Beide Probleme werden durch die myWeasthercenter-Firmware gelöst, die man per App auf das Sensortag aufspielt.

Externe Batterie

Zusätzlich habe ich die Knopfzelle des Sensortag durch zwei hintereinandergeschaltete Monozellen ersetzt, die haben eine etwa 100 Mal so große Kapazität (20000 mAh), wie die Knopfzelle. Mal sehen, wie lang das hält..

Schritt 2: Bluetooth-Low-Energy-Untertützung am Raspberry Pi

Das TI-Sensortag liefert seine Daten über Bluetooth-Low-Energy. Die Daten sendet es bei meinem Stup an einen Raspberry Pi, für den man einen USB-Bluetooth-Low-Energy-Dongle braucht. Ich habe das Plugable usb-bt4le-Dongle verwendet.

Hier muß man eine neuere Version des Bluez-Bluetooth-Stacks für Linux selbst kompilieren, um BLE-Support zu erhalten. Wie das geht, hat Michael Saunby beschrieben.

Schritt 3: BluePy-Library kompilieren

Um von Python-Scripten auf BLE-Funktionen zugreifen zu können, barucht man die BluePy-Library, die man selbst kompilieren muß.

Schritt 4: API-Key auf thingspeak.com besorgen

Dieses Projekt nutzt thingspeak.com, um die Daten zu speichern und zu visualisieren. Dazu muß man sich dort einen kostenlosen Account beantragen und kann dann sogenannte Channels anlegen. Für den Channel bekommt man einen API-Key. Einzige Einschränkung eines kostenlosen Accounts ist, daß man max. alle 15 Sekunden Werte auf thingspeak.com speichern kann, was für unsere Zwecke locker ausreicht.

Schritt 5: Script installieren

Auf GitHub gibt es ein fertiges Python-Script (sensortag-thingspeak-cron.py zur Einbindung in Shell-Script) von mir. dazu müssen noch folgende Konfigurationswerte im Script eingetragen werden:
  • THINGSPEAK_APIKEY: API-Key aus Schritt 4
  • TAG_ID: Bluetooth-Adresse des Sensor Tag, kann mit "hcitool lescan" ermittelt werden
  • HEIGHT: Höhe des Standorts in Metern über Meereshöhe (wird zur Berechnung des Luftrucks benötigt)
Es ist noch ein Shell-Script beigelegt, das beim Aufruf eine evtl. laufendes Helper-Script beendet, bevor es das Python-Script startet. 

Ergebnis

Die Daten werden auf Thingspeak.com gespeichert, dort kann man sie sich  in einer konfigurierbaren Chart ansehen. Die Charts können per iFrame ingebunden werden. Wem das nicht reicht, kann sich die Daten von thingspeak.com auch via Webservice holen und selbst Diagramme bauen.

Luftdruck live im iFrame

 

 Luftfeuchte live im iFrame

 

Links





18.01.2014

Internet of things, Sensordata in the cloud: eine Bluetooth-Low-Energy-Wetterstation mit dem Raspberry Pi

Mal ein Wochenendprojekt ohne Löten

In den letzten Jahren gibt es interessante Entwicklungen im Bereich Sensoren (MEMS-Sensoren), Computer (Raspberry Pi!), Services (Cloudservices) und Datenübertragung per Funk (Bluetooth Low Energy).

Mit einem Raspberry Pi, einem Sensorträger von Texas Instruments und etwas Code kann man das ganz einfach selbst mal anwenden! Und zwar ganz ohne löten.

Code:

https://github.com/hermann-kurz/weatherstation-sensortag

Sensoren! Texas Instruments Sensor Tag

Bei Texas Instruments gibt es für 25$, das sind keine 20 € (inklusive extrem schnellem Versand!) das TI Sensor Tag, das gleich sechs Sensoren für folgende Meßgrößen enthält:
  • Luftfeuchtigkeit
  • Luftdruck
  • Magnetfeld
  • Gyroskop
  • Beschleunigung
  • diverse Thermometer
  • kontaktloses Infrarot-Thermometer
Die Sensoren hängen an einem I2C-Bus, der von einem CC2541-System-on-Chip gesteuert wird. Der CC2541 hat Bluetooth-Low-Energy an Bord, über das das Sensortag angesprochen werden kann. Die Firmware kann über Bluetooth upgedated werden, das Sensor Tag ist eine Demo-Anwendung für TIs Bluetooth-Technologie.


Bluetooth Low Energy

Bluetooth Low Energy (BLE) ist auf geringen Energieverbrauch getrimmt, ein Ziel ist der jahrelange Betrieb von Sensoren mit einer Knopfzelle. Das TI Sensor Tag schafft das zwar nicht ganz, ist aber dennoch ziemlich beeindruckend.

BLE ist noch nicht besonders weit verbreitet. Neuere iPhones/iPads und einige wenige Android-Geräte beherrschen es aber schon. Dafür gibt es von Texas Instruments Apps, die direkt mit dem Sensor Tag kommunizieren können. Quellcode ist ebenfalls verfügbar.

Auslesen der Daten mit dem Raspberry Pi

Um die Daten mit einem Raspberry Pi auszulesen, braucht man ein BLE-fähiges USB-Dongle. Ich bin nach der Anleitung von Michael Saunby vorgegangen und habe das Plugable usb-bt4le verwendet. Dazu muß man eine neuere Version des Bluez-Bluetooth-Stacks für Linux compilieren um BLE-Support zu erhalten.

Ian Harvey hat darauf basierend eine Python-Library geschrieben, die er auf GitHub zum Download bereitstellt. Wenn man die Library gebaut hat (etwas Fummelei nötig) kann man das TI Sensor Tag direkt von Python aus ansprechen und die Messwerte auslesen!

Wetterhäuschen

Zählt man man die Sensoren so durch, sieht man, daß das Sensor Tag eigentlich eine verkleidete Wetterstation ist - drahtlose Anbindung inklusive!

Da der Sensor im Freien hängen soll, aber nicht direkt der Witterung ausgesetzt sein darf, haben meine Tochter und ich (danke Johanna!) ein Wetterhäuschen ganz grob nach dieser Anleitung gebaut.

Das Wetterhäuschen haben wir aus ein paar Holzleisten und Lamellenelementen aus dem Baumarkt zusammengeschraubt und geleimt. Dann mit wetterfestem weissem Lack angemalt.


Sieht total professionell aus. Den Deckel kann man aufklappen, dort ist ein Metallwinkel verschraubt, an dem das Sensortag per Kabelbinder befestigt ist, so daß es ziemlich mittig im Wetterhäuschen hängt.

Tempo-DB: Daten in der Cloud

Nächster Schritt ist das Speichern der Daten. Normalerweise stopft man die  in eine Datenbank und kann dann später schöne Graphen damit zeichnen. Das geht auch wunderbar auf dem Raspberry Pi, ist aber langweilig (kann ja jeder). Viel interessanter ist es, das mal einem darauf spezialisierten Anbieter zu überlassen.

Tempo-DB ist ein solcher Anbieter. Dessen Datenbank ist für Sensordaten optimiert, die pro Messung eine Timestamp/Messwert-Paar umfassen. Dafür sind es extrem viele Daten, die mit der Zeit anfallen können. Tempo-DB sorgt für Verfügbarkeit, Backups, Betriebssicherheit. Das lässt sich Tempo-DB normalerweise bezahlen, aber es gibt einen kostenlosen Plan, mit dem man bis zu 5 Millionen Datensätze speichern darf. Wenn jede Minute ein Datensatz anfällt, reicht das für knapp zehn Jahre, ist also für eine einzelne Wetterstation erstmal OK.

Einzige Voraussetzung ist ein Internetanschluss. Tempo-DB hat ein nettes REST-API, das man über Libraries benutzen kann, die in verschiedenen Script-Sprachen vorliegen.

Ich benutze in diesem Fall Python, da die Sensoren ja ebenfalls mit Python ausgelesen werden. Dazu habe ich Ian Harveys Beispiel-Script ein bischen angepasst, es steht auf Github zum Download bereit. Das Script rechnet auch noch gleich den gemessenen lokalen Luftdruck in den äquivalenten Luftdruck auf Meereshöhe um (mit der barometrischen Höhenformel, YEAH SCIENCE!!).

Tempo-DB hat ein schönes Backoffice, in dem man sich die erfassten Daten anschauen kann. Das sieht dann so aus:



Probleme, To-Dos, Workarounds

Batterielaufzeit

Mit einer CR2032-Knopfzelle habe ich bis jetzt leider nur eine Laufzeit von etwa zehn Tagen erreicht, obwohl die Sensoren nur alle fünf Minuten eingeschaltet und abgefragt werden. Eine CR2032-Zelle hat etwa 220 mAh, d.h. das Tag braucht etwa 1 mA - das ist zu viel. Mir ist noch nicht klar, warum.

Als Workaround werde ich zwei Monozellen als Energiequelle nehmen, dort passen 22 Ah rein, also etwa hundert mal soviel

Reichweite

Die Bluetooth-Reichweite beträgt nur wenige Meter, durch eine Holzwand nach draussen ging erstmal nichts. Ich musste mit dem Bluetooth-Adapter am USB-Kabel rumhantieren, jetzt komme ich auf fünf Meter.

Code

Der Code ist nicht sehr schön :-)
https://github.com/hermann-kurz/weatherstation-sensortag

Start

Bevor das Python-Script Kontakt zum Sensor aufnimmt, muß das Sensor-Tag erst mit einem

hcitool lescan

erkannt worden sien.


TI Sensor Tag
User Guide auf dem Sensortag-Wiki
Plugable usb-bt4le
Bluez-Bluetooth-Stack
https://github.com/IanHarvey/bluepy