LoginSignup
4
3

More than 1 year has passed since last update.

各種センサ

Last updated at Posted at 2021-12-29

SwitchBot

この製品は仕様が公開されている。
https://github.com/OpenWonderLabs/python-host/blob/master/switchbot.py
https://github.com/OpenWonderLabs/python-host/wiki/Meter-BLE-open-API#New_Broadcast_Message

温度湿度計とラズパイを接続する

参考

アプリ-[温湿度計設定]-[デバイス情報]からBLU MACを確認する。
ラズパイからつぎのコマンドでBluetooth機器の一覧を確認する。

$ sudo hcitool lescan

ライブラリを取得

インストール

gitのテキストをみてインストールを行います。

実行

スクリプトが修正されているので、Meterをつけます。

$ sudo python switchbot.py  xx:xx:xx:xx:xx:xx Meter Press

しかしながら、コネクションエラーになります。

Usage: "sudo python switchbot.py [mac dev_type cmd]" or "sudo python switchbot.py"
Preparing to connect.
Connection error.

ためした事1

こちらのスクリプトを試す。
https://qiita.com/jksoft/items/5175d6c0b49928c2b214

sensor.py
import sys
import binascii
from bluepy.btle import Scanner, DefaultDelegate

macaddr = ''

class ScanDelegate( DefaultDelegate ):
  def __init__( self ):
    DefaultDelegate.__init__( self )

  def handleDiscovery( self, dev, isNewDev, isNewData ):
    if dev.addr == macaddr:
      data = dev.getScanData()
      for item in data:
        if(item[0] == 22):
          bytedata = binascii.unhexlify( item[2] )
          flag = bytedata[6] & 0x80
          temperature = ( bytedata[6] & 0x7F ) + ( bytedata[5] & 0x0F ) / 10
          if not flag:
            temperature = -temperature
          humidity = bytedata[7] & 0x7F
          print( '{ "temperature": ' + str( temperature ) + ', "humidity": ' + str( humidity ) + ' }' )
          exit()

macaddr = sys.argv[1]
scanner = Scanner().withDelegate( ScanDelegate() )
scanner.scan( 0 )

a) bluepy

$ sudo pip3 install bluepy

b) MACアドレスを小文字でかく。

引数で入ってくるdev.addrが小文字なので、入力も小文字で与える。とりあえず動いた。機材の正当性は確認できた。
  def handleDiscovery( self, dev, isNewDev, isNewData ):
    if dev.addr == macaddr:
      data = dev.getScanData()

二酸化炭素センサ

NDIR方式が値が正確なセンサ。MH-Z19シリーズが評判よさそう。co2miniもNDIR方式です。

コロナでCo2濃度を測るのがプチブームになっていて、UEDAさんの記事が大本っぽい。

参考

UEDA: https://pypi.org/project/mh-z19/
UEDA 日本語: https://qiita.com/UedaTakeyuki/items/c5226960a7328155635f
片岡氏: https://qiita.com/yukataoka/items/a3b4065e8210b8f372ff
https://qiita.com/kanamekun/items/db27968080a1fcf3ad93

co2mini(二種類あるので注意)

いろいろやったら動いた。crontabからはなぜか動かない。

公式にそって /etc/udev/rules.d/90-co2mini.rules に、次の内容を保存する。
当該スクリプトを sudo chgrp plugdev 90-co2mini.rules する


ACTION=="remove", GOTO="co2mini_end"

SUBSYSTEMS=="usb", KERNEL=="hidraw*", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="a052", GROUP="plugdev", MODE="0660", SYMLINK+="co2mini%n", GOTO="co2mini_end"

LABEL="co2mini_end"

再起動する

$ cd /dev/
$ ls -l hi*
crw------- 1 root root    245, 0 Feb 17 15:23 hidraw0
crw------- 1 root root    245, 1 Feb 17 15:23 hidraw1
crw------- 1 root root    245, 2 Feb 17 15:23 hidraw2
crw------- 1 root root    245, 3 Feb 17 15:23 hidraw3
crw-rw---- 1 root plugdev 245, 4 Feb 17 15:28 hidraw4

こうなっていたので、hidraw4に接続していると思う。
スクリプト内を hidraw4にすると動く。
この辺は名称を固定する方法について言及している記事を見た記憶あるので、できると思うが、保留にする。

from CO2Meter import *
from time import sleep
from datetime import datetime
import csv

# CO2meterが認識されているデバイスを設定
sensor = CO2Meter("/dev/hidraw0")
# ちょっと待つ
sleep(8)
# CO2濃度を取得(単位はppm)
data = sensor.get_co2()
# 現在日時と時刻を取得
time = datetime.now()
# ファイル名を作成
filename = time.strftime('/home/pi/co2/co2%y%m%d.csv')
# ファイルに結果を追記
with open(filename, 'a') as f:
    writer = csv.writer(f, lineterminator='\n')
    row = [time.strftime('%H:%M:%S'),data["co2"]]
    writer.writerow(row)
    print(row)

co2mini/vfilimono版(大文字、小文字に注意)

sudo apt install libusb-1.0-0-dev libudev-dev
udev はLINUXのデバイス管理コマンド

hidraw0

これはUSBに接続する順番で変化する。

lsusb :USBデバイスの一覧と詳細情報を表示する

image.png

---------------- オムロン環境センサ-------------------

型番:2JCIE-BU

CO2はVTOC方式(他の指標からの推測値で精度が悪い、NDIRの方が良い)、値が高めにでるようだ。
騒音、気圧、照度あたりが使えそう。

# 参考

デバイスの確認

0590 00d4 を確認する。

pi@raspberrypi:~ $ lsusb
Bus 001 Device 004: ID 1a81:1004 Holtek Semiconductor, Inc. Wireless Dongle 2.4 GHZ HT82D40REW
Bus 001 Device 006: ID 0590:00d4 Omron Corp. 2JCIE-BU01
Bus 001 Device 005: ID 0566:3029 Monterey International Corp.
Bus 001 Device 007: ID 0424:7800 Microchip Technology, Inc. (formerly SMSC)
Bus 001 Device 003: ID 0424:2514 Microchip Technology, Inc. (formerly SMSC) USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Microchip Technology, Inc. (formerly SMSC) USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

FTDIのドライバと2JCIE-BUを関連付ける

pi@raspberrypi:~ $ sudo modprobe ftdi_sio
pi@raspberrypi:~ $ sudo sh -c "echo 0590 00d4 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id"

2JCIE-BUを自動認識するように設定

/etc/udev/rules.d/に新しいルールファイルを作って自動認識させる

sudo udevadm control --reload

サンプルプログラム、MITライセンス

GITHUB:https://github.com/omron-devhub/2jciebu-usb-raspberrypi/blob/master/README_ja.md

cd ~/
git clone https://github.com/omron-devhub/2jciebu-usb-raspberrypi.git
cd 2jciebu-usb-raspberrypi/

sudo modprobe ftdi_sio
sudo chmod 777 /sys/bus/usb-serial/drivers/ftdi_sio/new_id
sudo echo 0590 00d4 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id
sudo python3 sample_2jciebu.py

項目の説明

Time measured 計測時刻
Temperature 温度 -10~60℃
Relative humidity 湿度 30~85%RH
Ambient light 照度 10~2000lx
Barometric pressure 大気圧 700~1100hPa
Sound noise 騒音 40~94dB
eTVOC 総揮発性有機化学物量相当値 0~29206ppb
eCO2 CO2 濃度相当値
Discomfort index 不快指数
Heat stroke 熱中症警戒度
Vibration information 振動
SI value スペクトル強度
PGA 最大加速度値
Seismic intensity 計測震度相当値

結果

Time measured:2022/03/06 22:56:02
Temperature:26.41
Relative humidity:35.38
Ambient light:178
Barometric pressure:1009.107
Sound noise:66.87
eTVOC:196
eCO2:1536
Discomfort index:71.88
Heat stroke:20.48
Vibration information:0
SI value:0.0
PGA:0.0
Seismic intensity:0.0
Temperature flag:0
Relative humidity flag:0
Ambient light flag:0
Barometric pressure flag:0
Sound noise flag:0
eTVOC flag:0
eCO2 flag:0
Discomfort index flag:0
Heat stroke flag:0
SI value flag:0
PGA flag:0
Seismic intensity flag:0


4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3