ラベル D202 の投稿を表示しています。 すべての投稿を表示
ラベル D202 の投稿を表示しています。 すべての投稿を表示

2025年1月2日木曜日

リコーの環境センサーD202のbluetoothプロトコルの解析(完了)

8月にリコーの環境センサーD202のbluetoothプロトコルを途中まで解析したが、良くわからんなぁと困り、素直に仕様を公開してくれと問い合わせ窓口に連絡したらNDAなしで仕様書を公開してくれた。

12/1(日)にWebの問い合わせ窓口に問い合わせ、担当の方とメールのやり取りをしたら12/3(火)に資料が届いた。公開ありがとうございます。

前回の下記の数字をもとに仕様書に基づいて計算する。

LENTYPEVALUE
20x010x04
50x090x(センサに貼られているシールに記載の識別名4文字がASCIIで格納)
210xFF0x5F069122D3880100DF0D00004AB00000326B89E4

これが下記になる。

番号0001020304050607080910111213141516171819
5F069122D388010DF0D000004AB00000326B89E4
意味※1※2※3気圧気温湿度電圧照度
※1: 企業識別子
※2:モデル識別子
※3:送信カウンタ

  1. 企業識別子
    Bluetoothの団体が管理している企業識別子が入っている。
    RicohだとPDFから「0x065F」がアサインされていることが分かる。
    なので、このセンサーの場合は固定値となる
  2. モデル識別子
    旧製品     : 0x01
    D201/D202 : 0x91
    とのこと。
  3. 送信カウンタ
    インクリメントされる数字を見て途絶を判断するために存在する模様。
  4. 気圧
    8月の解析どおり、0x0D0188D3(=100563)と読んで、100分の1の値にすればよい。
    この場合は1005.63hPaとなる
  5. 気温
    8月の解析どおり、0x0000D0F0(=3551)と読んで、100分の1の値にすればよい。
    この場合は35.51度(セ氏)となる。負数については符号付32bit整数で格納。
  6. 湿度
    8月の解析が少し間違っており、0x0000B04A(=45130)と解釈したのち、1000ではなく、1024で割る。仕様書が無いと分からんかった。よって44.07%になる。
    (なんでここだけ除数が1024何だろう。搭載されているセンサの仕様なのかな)
  7. 電圧
    アドバタイズされた値から0x6B32(=27442)を取得。仮にXとすると式が
    電圧(V)= X * (2.03 / 65535) * 3
    になるとのこと。
    今回の値だと 2.55V(=27442 * (2.03 / 65535) *3 )になる。
    全然、式の意味が分からない。
  8. 照度
    すごく複雑。
    まず、センサーが仮に出力している値を算出する。
    ・番号18の上位4bitが指数部
    ・番号18の下位4bitと番号19の8bitをつなげた12bitで仮数部
    (気圧などと違い、ひっくり返さないことに注意)
    今回だと
    指数部: 番号18が0x89なので上位4bitから8になる。
    仮数部: 番号18の下位4bitと番号19を合わせた0x9E4(=2532)になる。
    これを下記の式に入れる。
    センサーの値 = (2 ^ 指数部) * 0.01 * 仮数部
    今回だと
    センサーの値 = 6481.92
    これがBluetoothでバラまかれている値だが、さらにアプリ側で補正が必要(*)で
    センサーの値が350未満の場合: 2.1242 * センサーの値 + 0
    センサーの値が350以上の場合: 1.0692 * センサーの値 + 388.24
    とする。
    *)センサーの上にシートをかぶせている補正とのこと。
    よって、今回の値は350以上なので、
    7318.71lx (= 1.0692 * 6481.92 + 388.24)になる。
このセンサーはアプリ側でも補正を入れているのでbluetoothの値だけ見ても分からなかっただろうな。

2024年8月25日日曜日

リコーの環境センサーD202のbluetoothプロトコルの解析

 チップワンストップ(URL)でリコーの環境センサーD202(URL)を買ってみた。初回割引1,000円で税込み22,055円。
注文して日通さんの手違いか日通サイトでは8/14納品予定と書かれていたのに結局8/19に届く。

センサーは軽くて使いやすそう。

BLE Scanner(URL)でbluetoothの値を見ると下記の模様。

LENTYPEVALUE
20x010x04
50x090x(センサに貼られているシールに記載の識別名4文字がASCIIで格納)
210xFF0x5F069122D3880100DF0D00004AB00000326B89E4

センサーの値を解析しているが現在の所の考察は下記。
番号0001020304050607080910111213141516171819
5F069122D3880100DF0D00004AB00000326B89E4
意味固定??気圧気温湿度電圧?照度?

〇判明分
気圧: 上記の場合,0x000188D3(10進数: 100563)に気圧の100倍している値が格納されている。変換して 1005.63hPaの模様。リトルエンディアンと言えば良いのかな。
気温: 上記の場合,気圧と同様で0x00000DDF(10進数: 3551)に100倍しているセ氏が格納されているので変換して35.51度。マイナスは2の歩数表現で格納。
湿度: 上記の場合、気圧と同じで0x0000B04A(10進数: 45130)で1,000倍している湿度が入っているので変換して45.130%。

〇不明分
電圧: 標準のツールで値を見ていると,2.55v, 2.56v, 2.57vしかまだ表示されたことがない。番号17は0X6A、0x6B、0x6Cしか見たことないので、「電圧値 = 1.50 + 番号17」が仮説1。
番号16は様々な値をとるが同じような時間帯は大きく値が変わらない。
番号16も含めた可能性もあり 0x6B32(10進数: 27442)と解釈して、電圧値が10,000倍してと仮定して 2.7442 として「電圧値 = 測定値 - 0.2」だと表示の値となるのが仮説2。
どちらもマジックナンバーがあるので、まだはっきりわからず。

照度: 0 lxの時、番号18,19の値がともに0x00になる。1.9 lxぐらいの時は番号18(0x00),番号19(0x57)、2991.3 lxぐらいの時は 番号18(0x77),番号19(0x6A)。
照度をゼロにすると値がゼロなので番号18,19は照度に関係あると思うが気圧などと違いビックエンディアンで格納されているように思える。製品仕様として照度は0~10000 lx(0.1 lx単位)なので16bitでは表現として足りないと思われる。番号16,番号17は隣接しているが電圧と関係しているので関係ないように思える。番号03も様々な値をとるが番号16と同じように同じ時間では大きな変動がないようにも見える。照度を0 lxにしても特にゼロにはならない。番号18,19(0x89E4), 番号18,19,03(0x89E422)と解釈してもうまくいかない。
なおサンプルに挙げているときの照度は 7318 lxぐらいの時の値。

番号01,02,03: 固定値のように見える。少なくともセンサを野外に持ち出し照度の高い状態や冷凍庫の中などに入れても変動しない。