Température, humidité, pression, éclairement et niveau de batterie mesurés avec TI SensorTag avec Bluetooth Low Energy (BLE) Je l'ai envoyé à Raspberry Pi3 (RPi3) et l'ai envoyé du RPi3 au service de visualisation de données IoT "Ambient" pour représenter graphiquement les données.
Ajouté le 2017/6/1. J'ai écrit que "Sensor Tag est difficile à utiliser comme terminal pour la mesure à long terme car si vous le laissez dans l'état annoncé pendant 2 minutes, il passera en mode veille et vous ne pourrez pas communiquer", mais si vous le laissez connecté, il ne passera pas en mode veille. Par conséquent, j'ai trouvé qu'il peut être utilisé comme terminal pour des mesures à long terme sans aucun problème. Pour plus de détails, voir "Mesurer la température, l'humidité, etc. avec SensorTag et envoyer à Ambient via Raspberry Pi 3 pour la représentation graphique".
SensorTag
SensorTag dispose de trois types d'appareils avec différents modules de communication. Cette fois, j'ai utilisé un "SensorTag multi-standard" qui communique avec BLE. Les capteurs comprennent des capteurs de température ambiante et de surface, des capteurs d'humidité, des capteurs de pression de pression, des capteurs de lumière ambiante, des capteurs d'accélération, des gyroscopes, des boussoles et des capteurs magnétiques.
Si vous laissez le SensorTag pendant 3 minutes, il passera en mode veille. Bien qu'il soit conçu pour économiser de l'énergie, la communication n'est possible que si le bouton d'alimentation est à nouveau enfoncé, il est donc difficile de l'utiliser comme un terminal installé quelque part et qui mesure la température pendant une longue période.
Cette fois, je me suis concentré sur cette spécification difficile à utiliser et j'ai effectué un test pour envoyer des données de SensorTag vers Ambient via RPi3.
"Multi-standard SensorTag" communique avec BLE. Par conséquent, j'ai utilisé Raspberry Pi3 (RPi3) comme passerelle, acquis les données SensorTag de RPi3 avec BLE et les ai envoyées à Ambient. Le programme a été écrit en Python. J'ai utilisé bluepy comme bibliothèque. Tout d'abord, installez bluepy sur 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
Ensuite, installez également la bibliothèque Python d'Ambient.
pi$ sudo pip install git+https://github.com/TakehikoShimojima/ambient-python-lib.git
Le flux général d'un programme Python qui récupère les données d'un SensorTag est le suivant.
Lorsque j'ai exécuté ce programme, j'ai pu confirmer que les données SensorTag ont été envoyées à Ambient et représentées sous forme de graphique.
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
Les éléments suivants sont affichés sur l'écran Ambiant.
Le programme sera affiché à la fin. Cette fois, il s'agit d'un test pour envoyer des données de SensorTag à Ambient via RPi3, donc si SensorTag passe en mode veille, vous devez appuyer manuellement sur le bouton d'alimentation pour redémarrer, et les programmes Python ont plusieurs SensorTags. Ne considère pas le cas. Ce sont les prochains défis.
# -*- coding: utf-8 -*-
# while True:
#Scannez le SensorTag, connectez-vous à l'appareil que vous trouvez,
#Obtenez la température, l'humidité, la pression, l'éclairement, le niveau de la batterie et envoyez à Ambient
#
import bluepy
import time
import sys
import argparse
import ambient
def main():
channelId =Identifiant de la chaine
writeKey = 'Touche lumière'
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) #Scan BLE
for d in devices:
for (sdid, desc, val) in d.getScanData():
if sdid == 9 and val == 'CC2650 SensorTag': #Le nom local est'CC2650 SensorTag'Trouvez-en un
dev = d
print('found SensorTag, addr = %s' % dev.addr)
sys.stdout.flush()
if dev is not None:
tag = bluepy.sensortag.SensorTag(dev.addr) #Connectez-vous à l'appareil que vous trouvez
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