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の値だけ見ても分からなかっただろうな。

0 件のコメント:

コメントを投稿