cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

オムロンの環境センサ2JCIE-BU01の公式サンプルにちょっと足して、シリアルナンバーを取得できるようにする

オムロンの環境センサ2JCIE-BU01は1万円ぐらいの価格で、USBドングルぐらいの大きさで、一杯データの取れる優秀な奴です。Bluetoothも内蔵していますので、有線でも無線でも使えます。
問題点があるとすれば、名前が覚えにくいことぐらいですね。ずっと使っていますが、いまだにうろ覚えです。

pythonの公式サンプルコードが公開されていて、自前のプログラムからすぐに呼び出して使うことができます[1]。
ただ複数台使おうとすると、このサンプルだとシリアル番号を取ることができないので、個体特定が面倒くさいです。ちょっと書き足してシリアルを取ればいいだけなので、やってしまいましょう。
最初からシリアルも取れるサンプルプログラムを公開されている方もいらっしゃる[2]ので、そちらを使われてもいいかもしれません。

データの書式は公式ユーザーマニュアルの70-73ページあたりのcommon frame formatとpayload frame formatに書かれています。(マニュアルの最初に書いてほしい・・・)
https://components.omron.com/jp-ja/ds_related_pdf/CDSC-016.pdf

前略

def now_utc_str():
    """
    Get now utc.
    """
    return datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")

def print_info(info):
    """
    print device information.
    """
    model_number = info[7:17].decode()
    serial_number = info[17:27].decode()
    firmware_revision = info[27:32].decode()
    hardware_revision = info[32:37].decode()
    manufacture_name = info[37:42].decode()
    print("")
    print("Model number:" + model_number)
    print("Serial Number:" + serial_number)
    print("Firmware Revision:" + firmware_revision)
    print("Hardware Revision:" + hardware_revision)
    print("Manufacturer Name:" + manufacture_name)

if __name__ == '__main__':

    # Serial.
    ser = serial.Serial("COM3", 115200, serial.EIGHTBITS, serial.PARITY_NONE)

    # Get Device Information 0x180A

    # common frame format is Header(0x52, 0x42: 2bytes) + Length(Payload-CRC-16: 2bytes) + Payload(n bytes) +CRC-16(2bytes) by little endian
    # payload frame format is Command(0x01:Read, 0x02:Write, 1byte) + Address(2bytes) + Data(n bytes)
    command = bytearray([0x52, 0x42, 0x05, 0x00, 0x01, 0x0a, 0x18])
    command = command + calc_crc(command, len(command))
    tmp = ser.write(command)
    time.sleep(0.1)
    info = ser.read(ser.inWaiting())
    # common frame format is Header(0x52, 0x42: 2bytes) + Length(Payload-CRC-16: 2bytes) + Payload(n bytes) +CRC-16(2bytes) by little endian
    # payload frame format is Command(0x01:Read, 0x02:Write, 1byte) + Address(2bytes) + Data(n bytes)
    print_info(info)
    time.sleep(1)

    try:
        # LED On. Color of Green.

後略

[1] omron-devhub/2jciebu-usb-raspberrypi
github.com
[2] nobrin/omron-2jcie-bu01
github.com

今日の本文

Whisperで僕の英語をどうしてもうまく認識してくれないので、良いマイクを買いました。でも結果は変わりませんでした。ソニーのマイクさんごめんなさい。

追記

3台つなげて、抜いてもさしても簡単には落ちないようにして、ZMQでOSC形式のMessageをひたすら送り続けるやつ。