この電子工作を開発した 2016 年頃は、デジタル接続の センサはポピュラーではなかったように思います (私が知らなかっただけかもしれません)。 2025 年現在、ラズパイに I2C 接続できる多種多様なセンサが 販売されています。 温度、湿度、照度はデジタル接続のセンサから取得する方が 校正が不要なので簡単かもしれません。
デジタルセンサー版の回路図を以下に示します。温度、湿度、照度を I2C 接続 のセンサから取得します。Arduino は自作していますが、製品版を シリアル、あるいは USB で接続しても、もちろんかまいません。
赤外線信号送信だけを Arduino に任せ、それ以外は 全てラズパイに I2C 接続されたセンサを使って行います。
I2C を使うために以下のものをインストールしてください。
# apt install i2c-tools # pip install smbus2
Web サーバとして apache2 を使います。 apache2 は www-data というユーザの権限で動作します。 www-data の権限で CGI が動作するよう以下のようにします。
$ sudo visudo ファイルの末尾に以下の 1 行を追加 www-data ALL=(ALL) NOPASSWD: ALL
デフォルトでユーザ pi は I2C にアクセスできますが、 www-data はできません。 www-data が起動したプログラムが I2C にアクセスするには、 www-data をグループ I2C のメンバーとして登録することが 必要です。以下の 2 つの作業が必要です。
I2C に 2 個のセンサを接続した場合、Raspberry Pi 2 では ボーレートを落とさないと I/O エラーが発生しました。 /boot/config.txt に以下の 1 行を追加してボーレートを 100 kbps に 落とします(デフォルトは 400 kbps)。
dtparam=i2c_baudrate=100000
サンプルファイルを以下に示します。