SensorTag에서 측정한 온도, 습도 등을 Raspberry Pi3를 통해 Ambient로 보내 그래프화
14772 단어 RaspberryPiAmbient파이썬BLESensorTag
2017/6/1 추가. "SensorTag는 광고 상태에서 2분간 방치해두면 슬립 모드로 들어가 통신할 수 없게 되므로 장기간 측정하는 단말로는 사용하기 어렵다"고 썼습니다만, 접속한 채로 하면 슬립 모드에는 들어가지 않는다 그래서 장기간 측정하는 단말기로서도 문제없이 사용할 수 있는 것을 알았습니다. 자세한 내용은 "SensorTag에서 온도, 습도 등을 측정하고 Raspberry Pi3 경유로 Ambient에 보내 그래프화한다"을 참조하십시오.
SensorTag
SensorTag에는 통신 모듈이 다른 세 가지 유형의 장치가 있습니다. 이번에 사용한 것은 「멀티 스탠다드 SensorTag」라고 하는 것으로, BLE로 통신합니다. 센서로는 주변 및 표면 온도 센서, 습도 센서, 기압 센서, 주변 광 센서, 가속도 센서, 자이로스코프, 나침반, 자기 센서가 탑재되어 있습니다.
SensorTag는 3분 동안 놓으면 슬립 모드로 들어갑니다. 전력 절약 설계입니다만, 다시 전원 버튼을 누르지 않으면 통신할 수 없게 되므로, 어딘가에 설치해 장기간 기온 등을 측정하는 단말로서는 사용하기 어려운 사양입니다.
이번에는 이 사용하기 어려운 사양에는 눈을 감고, SensorTag에서 RPi3를 경유해 Ambient에 데이터를 보내는 테스트를 실시했습니다.
Raspberry Pi3 (RPi3)의 Python으로 Ambient로 중계
"멀티 스탠다드 SensorTag"는 BLE로 통신합니다. 거기서 게이트웨이로서 Raspberry Pi3(RPi3)를 사용해, RPi3로부터 BLE로 SensorTag의 데이터를 취득해, Ambient에 보냈습니다.
프로그램은 파이썬으로 작성되었습니다. 라이브러리로 블루피을 사용했습니다. 먼저 bluepy를 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
그런 다음 Ambient의 Python 라이브러리도 설치합니다.
pi$ sudo pip install git+https://github.com/TakehikoShimojima/ambient-python-lib.git
SensorTag에서 데이터를 검색하는 Python 프로그램은 대략 다음과 같은 흐름입니다.
"멀티 스탠다드 SensorTag"는 BLE로 통신합니다. 거기서 게이트웨이로서 Raspberry Pi3(RPi3)를 사용해, RPi3로부터 BLE로 SensorTag의 데이터를 취득해, Ambient에 보냈습니다.
프로그램은 파이썬으로 작성되었습니다. 라이브러리로 블루피을 사용했습니다. 먼저 bluepy를 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
그런 다음 Ambient의 Python 라이브러리도 설치합니다.
pi$ sudo pip install git+https://github.com/TakehikoShimojima/ambient-python-lib.git
SensorTag에서 데이터를 검색하는 Python 프로그램은 대략 다음과 같은 흐름입니다.
(SensorTag는 로컬 이름이 'CC2650 SensorTag'입니다)
(SensorTag 클래스의 인스턴스를 만들면 연결됩니다.)
이 프로그램을 실행하면 SensorTag 데이터가 Ambient로 전송되어 그래프로 표시되는 것을 확인할 수 있었습니다.
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
Ambient 화면에서 다음과 같이 표시됩니다.
프로그램을 마지막으로 게시합니다. 이번에는 SensorTag에서 RPi3을 통해 Ambient로 데이터를 보내는 테스트로 SensorTag가 절전 모드로 들어가면 수동으로 전원 버튼을 눌러 다시 시작해야하며 Python 프로그램에는 여러 SensorTag가 있습니다. 경우를 고려하지 않습니다. 이것들은 다음 과제입니다.
# -*- coding: utf-8 -*-
# while True:
# SensorTagをスキャンし、見つけたデバイスに接続し、
# 温度、湿度、気圧、照度、バッテリーレベルを取得し、Ambientに送信
#
import bluepy
import time
import sys
import argparse
import ambient
def main():
channelId = チャネルID
writeKey = 'ライトキー'
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をスキャンする
for d in devices:
for (sdid, desc, val) in d.getScanData():
if sdid == 9 and val == 'CC2650 SensorTag': # ローカルネームが'CC2650 SensorTag'のものを探す
dev = d
print('found SensorTag, addr = %s' % dev.addr)
sys.stdout.flush()
if dev is not None:
tag = bluepy.sensortag.SensorTag(dev.addr) # 見つけたデバイスに接続する
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()
Reference
이 문제에 관하여(SensorTag에서 측정한 온도, 습도 등을 Raspberry Pi3를 통해 Ambient로 보내 그래프화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/AmbientData/items/9b74bc8627c79aeecb0a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)