chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

Sensirion SCD41で室内空気質を計測する

目的:室内環境をセンサで計測してIoT PFにアップして見える化する
課題:センサからCO2等の空気質を取り込むプログラムを実装する
取り組み:Rusb用のSCD4xドライバが提供されているのでこれを使ってI2C経由でデータを取り込む。マイコンボードはSeeedStudioのXiao ESP32C3を使う
インストール操作

cargo add sensirion-i2c@0.1.1
cargo add scd4x@0.2.1

Cargo.tomlへの追記

sensirion-i2c = "0.1.1"
scd4x = "0.2.1"

上記ドライバが使えるかと思ったけど、サンプルソースを見るとUnix用に書かれていて、I2CのオブジェクトがESP32のようなマイコンと一致するのかかなり疑問・・
型不一致のエラーが発生して上記ドライバが使えない場合は、ESP32用に一部書き直すか・・・

ドライバのソースを見ると、embedded_halのblocking i2cを想定しているので、ESP32のI2Cがこれと互換だったら動きそうだが。。

use embedded_hal as hal;
use hal::blocking::delay::DelayMs;
use hal::blocking::i2c::{Read, Write, WriteRead};
/
// SCD4X sensor instance. Use related methods to take measurements.
#[derive(Debug, Default)]
pub struct Scd4x<I2C, D> {
    i2c: I2C,
    delay: D,
    is_running: bool,
}

■追記
やはり型の不一致が発生してビルドが通らなかった。
自分の理解度ではエラーを解消させてライブラリを流用するのが不可能なので、(ソフトウエア工学的にはNGアプローチだろうが)スクラッチでSCD41用ドライバを作り直した。

■参考記事
https://crates.io/crates/scd4x
https://crates.io/crates/sensirion-i2c/0.1.1
scd4x-rs/scd4x.rs at main · hauju/scd4x-rs · GitHub