Memo/Raspberry_Pi/co2

https://dexlab.net:443/pukiwiki/index.php?Memo/Raspberry_Pi/co2
 

CO2(二酸化炭素)濃度計測

  • Amazonにもあるが、レビューが無い。

CJMCU-811

  • Raspberry PiがI2Cクロックストレッチに非対応。CircuitPython?, Arduino向け。
  • Python-SMBusでI2Cへの書き込みで良くエラーが出る。
  • 最初は48時間のエージング。電源ON後、20分で数値が安定するようだ。
  • CO2濃度は、400〜8199ppmまで測定可能(約0.8%)
  • CJMCU-811をi2cの4本(VCC, GND, SCL, SDA)だけ接続しても、i2cdetectで認識されず。幾つか抵抗が入っているが回路図が見つからない。
    • SCL, SDA:プルアップが必要だが、RPi側でプルアップされるため不要。
    • WAK(WAKE): GNDへ接続。
    • INT: 割り込み信号用。未接続。
    • RST(RESET): VDDへ接続。9.8kΩで接続済みだった。
    • ADD(ADDR): i2cアドレスの0x5A, 0x5Bの選択。VCCへ接続すると0x5B。
  • 環境
    • RPi zero w
    • OS
      lsb_release -a
      No LSB modules are available.
      Distributor ID: Raspbian
      Description:    Raspbian GNU/Linux 8.0 (jessie)
      Release:        8.0
      Codename:       jessie
  • デフォルト転送速度の100kHzでもi2cdetectで認識、値の取得できる。pythonでI2Cの書き込みでよくエラーが出る。10kHzへ変更。再起動
    sudo bash -c "echo dtparam=i2c_baudrate=10000 >> /boot/config.txt"
    sudo reboot
  • i2cコマンドで初期化と値の取得
    # i2c-1が有効
    sudo i2cdetect -l
    i2c-1   i2c             bcm2835 I2C adapter                     I2C adapter
    
    sudo i2cdetect -y 1
    # 0x5b として認識されている
    
    # HW_ID取得
    i2cget -y 1 0x5B 0x20
    0x81
    
    # HW_VERSION取得
    i2cget -y 1 0x5B 0x21
    0x12
    
    # FW_Boot_Version取得
    i2cget -y 1 0x5B 0x23
    0x10
    
    # FW_App_Version取得
    i2cget -y 1 0x5B 0x24
    0x11
    
    # APP_START
    i2cset -y 1 0x5B 0xF4
    
    # 測定モードを1秒毎に設定
    i2cset -y 1 0x5B 0x01 0x10
    
    # データを取得。最初は48時間経過後。電源ON後、20分以上経過しないと安定しない。0x0011の場合は、APP_STARTしてない。
    # wordで読む。値はリトルエンディアン
    i2cget -y 1 0x5B 0x02 w
    0x9001
  • 内部レジスタ 0x02 から 8 バイトを連続リードしたものが測定データ
eCO2 High ByteeCO2 Low ByteTVOC High ByteTVOC Low ByteSTATUSERROR_IDRAW_DATARAW_DATA
0x02
  • adafruit/Adafruit_CircuitPython_CCS811: circuit python driver for CCS811 air quality sensor を使う例
    sudo pip3 install Adafruit_CircuitPython_CCS811
    wget https://raw.githubusercontent.com/adafruit/Adafruit_CircuitPython_CCS811/master/examples/ccs811_simpletest.py
    
    # I2Cアドレスを確認0x5A, 0x5Bがある
    i2cdetect -y 1
    
    # 0x5Bの場合、ソースを書き換え
    vim ccs811_simpletest.py
    --
    ccs811 = adafruit_ccs811.CCS811(i2c,0x5B)
    --
    
    # 実行。初回何度かエラーが出るが、値がとれるようになった。
    python3 ccs811_simpletest.py

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-11-14 (水) 03:20:28 (3d)