二酸化炭素濃度(CO2)センサー VSON WP6003(安心宝)のデータをBLEで読み出す(1)
換気チェックのために購入した二酸化炭素濃度(CO2)センサー VSON WP6003(安心宝)のデータをBLE経由で読み出してみました。まだ解析できていないところもありますが、メモ残しておきます。
- 二酸化炭素濃度(CO2)センサーを2種類買ってみた | ず@沖縄
- 二酸化炭素濃度(CO2)センサー VSON WP6003(安心宝)のデータをBLEで読み出す(2) | ず@沖縄
- 二酸化炭素濃度(CO2)センサー VSON WP6003(安心宝)のデータをBLEで読み出す(3) – ESP32(M5atom)編 | ず@沖縄
Carbon Dioxide CO2 Detector Air Quality Tester Formaldehyde Detector High Sensitive Detector Indoor Formaldehyde Testing Machine(VSON WP6003)
購入した格安空気センサーです。Aliexpressから送料込み1000円程度で買えます。
CO2の他、TVOC、HCHO、気温が測れます。スマホアプリでデータ読み出せますが、このアプリがお行儀がよろしくないのでBLE経由で読んでみました。
下準備
AndroidのBLE Scannerで叩いてみます。6003#なんちゃら という名前でアクセスできるようです。
データはNotifyで上がってきます。
データは全部で18バイトあり、下記のフォーマットのようです(一部不明)。TVOCとHCHOは逆かもしれません。
- 6バイト: タイムスタンプ 0x0a(?),年(2桁),月日時分をおのおの1バイトで表す
- 2バイト: 気温(0.1℃単位)
- 2バイト: 不明
- 2バイト: TVOC(0.001mg/㎥)
- 2バイト: HCHO(0.001mg/㎥)
- 2バイト: 不明(0100)
- 2バイト: CO2濃度(ppm)
BLE経由で読み出してみた
下記サイトの記事を参考に、MacOS上でAdafruit_Python_BluefruitLEを使って読んでみました。
- adafruit/Adafruit_Python_BluefruitLE: Python library to simplify access to Bluetooth low energy devices and services on Linux (using bluez) and Mac OSX.
- BLE で Blueninja のデータを Pythonで受信する。 | TOMMY NOTES
- ubuntuでpythonのbluetooth開発環境を構築3 – ロボット、電子工作、IoT、AIなどの開発記録
読み出しテストコード
# -*- coding: utf-8 -*- import Adafruit_BluefruitLE, uuid from Adafruit_BluefruitLE.services import UART, DeviceInformation import struct import atexit import time import datetime DEVICE = '6003#XXXXXXXXXXXXX' # デバイス名 SERVICE = uuid.UUID('0000FFF0-0000-1000-8000-00805F9B34FB') SENSOR = uuid.UUID('0000FFF4-0000-1000-8000-00805F9B34FB') provider = Adafruit_BluefruitLE.get_provider() provider.initialize() def main(): adapter = provider.get_default_adapter() adapter.power_on() print('adapter:', adapter.name) try: print('adapter.start_scan()') adapter.start_scan() atexit.register(adapter.stop_scan) known_uarts = set() isnotFound = True while(isnotFound): found = set(provider.find_devices()) new = found - known_uarts for device in new: print('Found device: {0} [{1}]'.format(device.name, device.id)) if(device.name == DEVICE): print('connecting...') device.connect() print('connected.') isnotFound = False adapter.stop_scan() known_uarts.update(new) time.sleep(0.5) if device is None: raise RuntimeError('Failed to find UART device!') finally: adapter.stop_scan() print(device.name) device.discover([SERVICE],[SENSOR]) service = device.find_service(SERVICE) print('got service',SERVICE) sensor = service.find_characteristic(SENSOR) print('got characteristic',SENSOR) def received(data): dt_now = datetime.datetime.now() print('Notify:',dt_now,' ',data.hex()) print('Time: 20',data[1],'年',data[2],'月',data[3],'日', data[4],':',data[5]) print('Temp:',(data[6]*256+data[7])/10,'℃') print('TVOC:',(data[10]*256+data[11])/1000,'mg/㎥') print('HCHO:',(data[12]*256+data[13])/1000,'mg/㎥') print('CO2 :',(data[16]*256+data[17]),'ppm') sensor.start_notify(received) print('start notifications.') while (True): time.sleep(5) provider.run_mainloop_with(main)
実行例
$ python3 test.py
adapter: Default Adapter
adapter.start_scan()
Found device: 6003#XXXXXXXXXXXXX [xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]
connecting…
connected.
6003#XXXXXXXXXXXXX
got service 0000fff0-0000-1000-8000-00805f9b34fb
got characteristic 0000fff4-0000-1000-8000-00805f9b34fb
start notifications.
Notify: 2020-12-19 10:46:42.541015 0a140c130a2300b958020003000201000222
Time: 20 20 年 12 月 19 日 10 : 35
Temp: 18.5 ℃
TVOC: 0.003 mg/㎥
HCHO: 0.002 mg/㎥
CO2 : 546 ppm
ToDo
Notity間隔を設定できるはずだけど、どこを叩けばいいか不明。要調査。Done.時刻設定もできるはずだがDone.- センサーのエラー?によりデータがおかしくなることがある。“TVOC: 9.999 mg/㎥ HCHO: 1.999 mg/㎥ CO2 : 2000 ppm” になる。これスマホアプリでも発生するんだよな。安心宝の電源をON/OFFしないと治らない?
続き: 二酸化炭素濃度(CO2)センサー VSON WP6003(安心宝)のデータをBLEで読み出す(2) | ず@沖縄
リンク
- 二酸化炭素濃度(CO2)センサーを2種類買ってみた | ず@沖縄
- 二酸化炭素濃度(CO2)センサー VSON WP6003(安心宝)のデータをBLEで読み出す(2) | ず@沖縄
- 二酸化炭素濃度(CO2)センサー VSON WP6003(安心宝)のデータをBLEで読み出す(3) – ESP32(M5atom)編 | ず@沖縄
- Carbon Dioxide CO2 Detector Air Quality Tester Formaldehyde Detector High Sensitive Detector Indoor Formaldehyde Testing Machine(今回Hackしたもの)
- Multifunctional Digital CO CO2 HCHO TVOC Gas Detector High Accuracy Air Quality Monitor Gas Analyzer(Amazon:KKmoom CO2測定器)
ディスカッション
コメント一覧
まだ、コメントがありません