二酸化炭素濃度(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などの開発記録
読み出しテストコード
[code lang="python"]
# -*- 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)
[/code]
実行例
$ 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測定器)
ディスカッション
コメント一覧
まだ、コメントがありません