Temperatur, Luftfeuchtigkeit, Druck, Beleuchtungsstärke und Batteriestand gemessen mit TI SensorTag mit Bluetooth Low Energy (BLE) Ich habe es an Raspberry Pi3 (RPi3) gesendet und von RPi3 an IoT-Datenvisualisierungsdienst "Ambient" gesendet, um die Daten grafisch darzustellen.
Hinzugefügt am 06.06.2017. Ich schrieb, dass "Sensor Tag als Terminal für Langzeitmessungen schwierig zu verwenden ist, da es in den Schlafmodus wechselt und Sie nicht kommunizieren können, wenn Sie es für 2 Minuten im angekündigten Zustand belassen", aber wenn Sie es verbunden lassen, wechselt es nicht in den Schlafmodus. Daher habe ich festgestellt, dass es problemlos als Terminal für Langzeitmessungen verwendet werden kann. Weitere Informationen finden Sie unter "Messen von Temperatur, Luftfeuchtigkeit usw. mit SensorTag und Senden an Ambient über Raspberry Pi 3 zur grafischen Darstellung".
SensorTag
SensorTag verfügt über drei Arten von Geräten mit unterschiedlichen Kommunikationsmodulen. Diesmal habe ich einen "Multi-Standard SensorTag" verwendet, der mit BLE kommuniziert. Zu den Sensoren gehören Umgebungs- und Oberflächentemperatursensoren, Feuchtigkeitssensoren, Luftdrucksensoren, Umgebungslichtsensoren, Beschleunigungssensoren, Gyroskope, Kompasse und Magnetsensoren.
Wenn Sie den SensorTag 3 Minuten lang verlassen, wechselt er in den Ruhemodus. Obwohl es so konzipiert ist, dass Strom gespart wird, ist die Kommunikation nur möglich, wenn der Netzschalter erneut gedrückt wird. Daher ist es schwierig, es als Terminal zu verwenden, das irgendwo installiert ist und die Temperatur über einen langen Zeitraum misst.
Dieses Mal konzentrierte ich mich auf diese schwer zu verwendende Spezifikation und führte einen Test durch, um Daten von SensorTag über RPi3 an Ambient zu senden.
"Multi-Standard SensorTag" kommuniziert mit BLE. Daher habe ich Raspberry Pi3 (RPi3) als Gateway verwendet, SensorTag-Daten von RPi3 mit BLE erfasst und an Ambient gesendet. Das Programm wurde in Python geschrieben. Ich habe bluepy als Bibliothek verwendet. Installieren Sie zuerst bluepy auf RPi.
pi$ sudo apt-get install python-pip libglib2.0-dev
pi$ git clone https://github.com/IanHarvey/bluepy.git
pi$ cd bluepy
pi$ python3 setup.py build
pi$ sudo python3 setup.py install
Installieren Sie dann auch die Python-Bibliothek von Ambient.
pi$ sudo pip install git+https://github.com/TakehikoShimojima/ambient-python-lib.git
Der allgemeine Ablauf eines Python-Programms, das Daten von einem SensorTag abruft, ist wie folgt.
Als ich dieses Programm ausführte, konnte ich bestätigen, dass die SensorTag-Daten an Ambient gesendet und grafisch dargestellt wurden.
pi$ sudo python3 st2ambient.py
scanning tag
found SensorTag, addr = 24:71:89:bc:63:84
{'d4': 81, 'd5': 336.32, 'd2': 45.806884765625, 'd1': 25.1875, 'd3': 1016.45}
200
Folgendes wird auf dem Umgebungsbildschirm angezeigt.
Das Programm wird am Ende veröffentlicht. Diesmal ist es ein Test, Daten von SensorTag über RPi3 an Ambient zu senden. Wenn SensorTag in den Ruhemodus wechselt, müssen Sie zum Neustart manuell den Netzschalter drücken, und Python-Programme verfügen über mehrere SensorTags. Berücksichtigt den Fall nicht. Dies sind die nächsten Herausforderungen.
# -*- coding: utf-8 -*-
# while True:
#Scannen Sie den SensorTag, stellen Sie eine Verbindung zu dem Gerät her, das Sie finden.
#Holen Sie sich Temperatur, Luftfeuchtigkeit, Druck, Beleuchtungsstärke, Batteriestand und senden Sie an Ambient
#
import bluepy
import time
import sys
import argparse
import ambient
def main():
channelId =Kanal ID
writeKey = 'Lichtschlüssel'
parser = argparse.ArgumentParser()
parser.add_argument('-i',action='store',type=float, default=120.0, help='scan interval')
parser.add_argument('-t',action='store',type=float, default=5.0, help='scan time out')
arg = parser.parse_args(sys.argv[1:])
scanner = bluepy.btle.Scanner(0)
am = ambient.Ambient(channelId, writeKey)
while True:
dev = None
print('scanning tag...')
devices = scanner.scan(arg.t) #BLE scannen
for d in devices:
for (sdid, desc, val) in d.getScanData():
if sdid == 9 and val == 'CC2650 SensorTag': #Der lokale Name ist'CC2650 SensorTag'Einen finden
dev = d
print('found SensorTag, addr = %s' % dev.addr)
sys.stdout.flush()
if dev is not None:
tag = bluepy.sensortag.SensorTag(dev.addr) #Stellen Sie eine Verbindung zu dem Gerät her, das Sie finden
tag.IRtemperature.enable()
tag.humidity.enable()
tag.barometer.enable()
tag.battery.enable()
tag.lightmeter.enable()
# Some sensors (e.g., temperature, accelerometer) need some time for initialization.
# Not waiting here after enabling a sensor, the first read value might be empty or incorrect.
time.sleep(1.0)
data = {}
data['d1'] = tag.IRtemperature.read()[0] # set ambient temperature to d1
data['d2'] = tag.humidity.read()[1] # set humidity to d2
data['d3'] = tag.barometer.read()[1] # set barometer to d3
data['d5'] = tag.lightmeter.read() # set light to d5
data['d4'] = tag.battery.read() # set battery level to d4
tag.IRtemperature.disable()
tag.humidity.disable()
tag.barometer.disable()
tag.battery.disable()
tag.lightmeter.disable()
print(data)
r = am.send(data)
print(r.status_code)
sys.stdout.flush()
time.sleep(arg.i)
# tag.waitForNotifications(arg.t)
tag.disconnect()
del tag
if __name__ == "__main__":
main()
Recommended Posts