以前この記事の内容を手元のメモに残したと思ったのですが、外部公開してなかったからか紛失してしまいました。
以下のように近いことは公開していたのですが、実際に一番普段使うパターンを書いて無くて、半年ぶりくらいに動かす必要出てきた時に無駄な時間使ってしまいました。未来の自分のために残しておきます。
利用している機器
温湿度センサー XY-MD02
温湿度センサーの XY-MD02
は色々な所から出ているので、Amazonなどで XY-MD02
と検索してしまって適当に購入してください。今検索しても大量に検索結果出てきました。現時点ではだいたい1000円台半ば程度で購入できます。
USB to RS485コンバーター
この記事ではこちらを使っているのですが、もっと安いものでも問題無く動きます。
配線
シンプルなので写真だけ。
pymodbus.consoleをインストール
Pythonで書くことが多いのでpymodbusを使います。
pymodbus
には pymodbus.console
という機能があり、以下のようなインタラクティブなシェルを使うことが可能です。
ちょっとした確認用途の場合はとても便利な機能になります。
pymodbus.console
を利用するには、pymodbus
以外にもいくつかパッケージのインストールが必要になります。
pip install pymodbus click pygments prompt_toolkit
pymodbus.consoleでの通信確認
デバイス認識の確認
USBにデバイスを指して、どこに認識されたか確認します。
/dev/ttyUSB*
にマップされるのでudevadmコマンドで確認します。このアダプタは cp210x
で認識されるので、以下のように /dev/ttyUSB0
でアクセスできるようです。
$ udevadm info -q property -n /dev/ttyUSB* DEVPATH=/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.1/1-1.1:1.0/ttyUSB0/tty/ttyUSB0 DEVNAME=/dev/ttyUSB0 MAJOR=188 MINOR=0 SUBSYSTEM=tty USEC_INITIALIZED=5886309 ID_BUS=usb ID_VENDOR_ID=10c4 ID_MODEL_ID=ea60 ID_PCI_CLASS_FROM_DATABASE=Serial bus controller ID_PCI_SUBCLASS_FROM_DATABASE=USB controller ID_PCI_INTERFACE_FROM_DATABASE=XHCI ID_VENDOR_FROM_DATABASE=Cygnal Integrated Products, Inc. ID_MODEL_FROM_DATABASE=CP2102/CP2109 UART Bridge Controller [CP210x family] ID_VENDOR=Silicon_Labs ID_VENDOR_ENC=Silicon\x20Labs ID_MODEL=CP2102_USB_to_UART_Bridge_Controller ID_MODEL_ENC=CP2102\x20USB\x20to\x20UART\x20Bridge\x20Con
pymodbus.consoleでセンサーの値を取得
pymodbus.console serial --method rtu --port /dev/ttyUSB0 --baudrate 9600
インタラクティブにコマンドが打てるので、以下の通り打つと温度が返ってきます。
> client.read_input_registers address=1 count=1 unit=1
10分の一にするので24.9度ですね。
次に湿度です。address
を2にします。
> client.read_input_registers address=2 count=1 unit=1
10分の一にするので30.5%ですね。
最後に手元の温湿度計と確認して値に大きな差が無いこと確認して終わりです。