二酸化炭素濃度(CO2)センサー VSON WP6003(安心宝)のデータをBLEで読み出す(2)
換気チェックのために購入した二酸化炭素濃度(CO2)センサー VSON WP6003(安心宝)のデータをBLEで読み出す記事の続きです。
使っている機器の説明や、いままでに解析した部分については前回記事を参照ください。
- 二酸化炭素濃度(CO2)センサーを2種類買ってみた | ず@沖縄
- 二酸化炭素濃度(CO2)センサー VSON WP6003(安心宝)のデータをBLEで読み出す | ず@沖縄
- 二酸化炭素濃度(CO2)センサー VSON WP6003(安心宝)のデータをBLEで読み出す(3) – ESP32(M5atom)編 | ず@沖縄
BLE経由で読み出してみた(続き)
WP6003のフリをするBLEデバイスをM5StickCで作成し、プロトコルを解析しました。
スマホアプリからの設定は CUSTOM SERVICE(UUID:0000FFF1-0000-1000-8000-00805F9B34FB)のCUSTOM CHARACTERISTIC(UUID:0000FFF1-0000-1000-8000-00805F9B34FB)に書き込まれます。最初の1バイトがコマンドのようです。
アプリ接続後、下記のデータが来ます。
ee
aa 14 0c 14 00 25 13
ae 02
ab
(以下、1秒毎にab)
ee: リセット?
用途不明。
aa: 日時設定
BLE connect直後に1度だけ送られます。コマンド aa に続いて年月日時分秒が送られます。
例: aa 14 0c 14 00 19 12
0x14(20年)、0x0c(12月)、0x14(20日)、0x00(0時)、0x19(25分)、0x12(18秒)
ae: 読み出し間隔の設定?
読み出し間隔再設定時に送られます。
データは3バイトで、ae,01,xx です。xx は分単位で設定します。5分なら ae,01,05、 30分なら ae,01,1e です。
開始直後は ae, 02 が来るのですが、用途不明。測定開始か?
追記: ae02 はセンサ内部に保持されている読み出し間隔をリクエストしているようです。ae03に続いて分単位の間隔が返ります。 thanks to saso5.
-> Value: ae02
<- Value: ae0305
ab: notify request
データを要求します。WP6003はこのコマンドを受け取ると 即座にnotify を返します。
(通常は notify は ae コマンドで指定された間隔で送られます)。
ad: キャリブレーション
1バイトで 0xad が送られます。
WP6003のフリをするコード
#include <BLEDevice.h> #include <BLEUtils.h> #include <BLEServer.h> #include <ble2902.h> #include <M5StickC.h> #define SERVICE_UUID "0000FFF0-0000-1000-8000-00805F9B34FB" #define CHARACTERISTIC_UUID_1 "0000FFF1-0000-1000-8000-00805F9B34FB" #define CHARACTERISTIC_UUID_4 "0000FFF4-0000-1000-8000-00805F9B34FB" boolean connected = false; class MyServerCallbacks: public BLEServerCallbacks { void onConnect(BLEServer* pServer) { connected = true; M5.Lcd.println("connect"); }; void onDisconnect(BLEServer* pServer) { connected = false; M5.Lcd.println("disconnect"); } }; class MyCallbacks_fff1: public BLECharacteristicCallbacks { void onWrite(BLECharacteristic *pCharacteristic) { std::string rxValue = pCharacteristic->getValue(); // M5.Lcd.fillScreen(BLACK); if (rxValue.length() > 0) { for (int i = 0; i < rxValue.length(); i++) { M5.lcd.printf("%02x ", rxValue[i]); } if(rxValue[0]!=0xab) M5.lcd.println(); } } }; BLEService *pService; BLECharacteristic *pCharacteristic_fff1; BLECharacteristic *pCharacteristic_fff4; void setup() { M5.begin(); M5.Lcd.setRotation(0); M5.Lcd.setTextSize(1); BLEDevice::init("6003#XXXXXXXXXXXXX"); BLEServer *pServer = BLEDevice::createServer(); pServer->setCallbacks(new MyServerCallbacks()); pService = pServer->createService(SERVICE_UUID); pCharacteristic_fff1 = pService->createCharacteristic( CHARACTERISTIC_UUID_1, BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_WRITE_NR ); pCharacteristic_fff1->setCallbacks(new MyCallbacks_fff1()); pCharacteristic_fff4 = pService->createCharacteristic( CHARACTERISTIC_UUID_4, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY ); pCharacteristic_fff4->addDescriptor(new BLE2902()); pService->start(); BLEAdvertising *pAdvertising = BLEDevice::getAdvertising(); pAdvertising->addServiceUUID(SERVICE_UUID); pAdvertising->setScanResponse(true); pAdvertising->setMinPreferred(0x06); pAdvertising->setMinPreferred(0x12); BLEDevice::startAdvertising(); M5.Lcd.println("start"); } int n = 0; uint8_t notify_data[] = { 0x0a, 0x14, 0x0c, 0x13, 0x14, 0x23, 0x00, 0xbb, 0x58, 0x02, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x02, 0x19 }; void loop() { delay(5000); if (connected) { pCharacteristic_fff4->setValue(notify_data, sizeof(notify_data)); pCharacteristic_fff4->notify(); M5.lcd.print("* "); } }
ToDo
- センサーのエラー?によりデータがおかしくなることがある。どうすれば治るのか?
“TVOC: 9.999 mg/㎥ HCHO: 1.999 mg/㎥ CO2 : 2000 ppm” になる。これスマホアプリでも発生するんだよな。安心宝の電源をON/OFFしないと治らない?
続き: 二酸化炭素濃度(CO2)センサー VSON WP6003(安心宝)のデータをBLEで読み出す(3) – ESP32(M5atom)編 | ず@沖縄
リンク
- 二酸化炭素濃度(CO2)センサーを2種類買ってみた | ず@沖縄
- 二酸化炭素濃度(CO2)センサー VSON WP6003(安心宝)のデータをBLEで読み出す(1) | ず@沖縄
- 二酸化炭素濃度(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測定器)
- 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などの開発記録
- 拆解安心宝 WP6003 智能空气盒子 – 拆机乐园 数码之家
- Air Box WP6003 – Share your Projects! / Custom Components – Home Assistant Community
ディスカッション
コメント一覧
まだ、コメントがありません