アクアリウム用の水温ロガー。計測とグラフ表示を行う。
- Raspberry Pi
- DS18B20
- Electron + React + Sqlite
- ローカルデータベース
1-Wire インターフェイスの DS18B20 が手軽に精度良く使え、水中用途に加工されたものが安価に入手できるのでおすすめ。
センサーとラズパイは次のように接続する。センサー側コードの色は要確認のこと。複数のセンサーがある場合は並列に接続していく。DQ にはプルアップ抵抗 4.7[kΩ]を接続する。
センサー | ラズパイ |
---|---|
VDD(赤) | 3V3 or 5V power |
DQ (黄) | GPIO 4 |
GND(黒) | Ground |
Raspberry Pi OS with desktop をセットアップする. ここでは 'pi' ユーザーであるものとして進めていく。
Github のリポジトリをローカルにコピーする。
git clone https://github.com/seotaro/rpi-aquarium-thermometer.git
cd rpi-aquarium-thermometer
Node.js をセットアップする。
make setup-node
1-Wire インターフェイスを有効にする。
make enable-1-wire
リブートして、1-Wire デバイスを確認する。
名称が28-xxxxxxxxxxxx
形式のフォルダーが接続されたデバイスで、デバイスの数だけある。
ls /sys/bus/w1/devices/
コマンドはデスクトップモードで実行する.
cd {'rpi-aquarium-thermometer'}
yarn
yarn start
データベースファイル
/home/pi/.config/rpi-aquarium-thermometer/database.db
設定ファイル
/home/pi/.config/rpi-aquarium-thermometer/config.json
{
"READ_SENSOR_INTERVAL": 10000, // センサーの読み取り間隔 [ms]
"DELETE_DATABASE_INTERVAL": 3600000, // データベースを削除する間隔 [ms]
"DS18B20": "on", // DS18B20 を有効にする
// センサー名称の定義例)
"DEVICES": {
"id": "name",
"28-xxxxxxxxxxxx": "90cm tank",
"28-yyyyyyyyyyyy": "45cm tank-1",
"28-zzzzzzzzzzzz": "45cm tank-2"
}
}
ビルドする。
cd {'rpi-aquarium-thermometer'}
yarn
yarn build
mv dist/rpi-aquarium-thermometer-0.1.0-armv7l.AppImage /home/pi
ラズパイ起動時に自動で実行されるよう設定する。
ログは/home/pi/.cache/lxsession/LXDE-pi/run.log
に出力される。
make enable-autostart
リブートする。
自動で実行しないようにするには下記を実行する。
make disable-autostart
メモリが少ないモデル(Raspberry Pi 3A+ など)はメモリ不足でビルドができないことがある。スペックの高いラズパイでビルドして使用することができる。Electron なので Mac や Windows でクロスビルドできるはずなのだが、うまくいっていない。
Node.js のセットアップは不要であるが、1-Wire インターフェイスはあらかじめ有効にしておくこと。 ビルドした AppImage を実行するラズパイに保存して、下記のようにデスクトップモードで実行する。
chmod +x rpi-aquarium-thermometer-0.1.0-armv7l.AppImage
./rpi-aquarium-thermometer-0.1.0-armv7l.AppImage