やったこと
我が家に赤ちゃんがあと少しでやってくる予定です。これまでで、最低限の機能は実装できていました。今回はラズパイに接続した気温センサ値をブラウザ上に表示できる機能を追加しました。初めてNode.jsを使ったのですが、全然わからず四苦八苦しました。5時間くらいやった気がします。さらに起動時にNode.jsを実行する実装にも3時間くらいかかってます。。Webプログラミング慣れてなさすぎです。
システム構成
システム構成図(ver2)
ハードウェア
名前 | 用途 | 価格 |
---|---|---|
ラズパイ環境(Raspberry Pi 3 Model b+) | ストリーミングの配信。定期撮影データの保存。 | 8,800円 |
Raspberry Pi Official Camera V2 | ラズパイに装着して、撮影を行う。 | 4,580円 |
スマートフォン | ストリーミング配信視聴端末。日常利用していない古いものを利用。Simカードなし。 | 0円 |
お菓子の箱 | ラズパイ収納ケースとして利用。 | 0円 |
WiFi無線ルータ | 家庭内ネットワークの構築。 | 4,480円 |
温度センサ adt7410 | 室温の取得。 | 500円 |
ソフトウェア
名前 | 用途 |
---|---|
MJPG-streamser | ストリーミング配信 |
cron | 定期撮影、定期温度取得の実行 |
systemd | ラズパイ起動時にアプリケーションを実行開始する |
Node.js | 取得した温度値をブラウザに表示するサーバープログラミング環境 |
Google フォト | 定期撮影したデータをAPIで自動でアップロードする(未実装) |
$ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 9.9 (stretch) Release: 9.9 Codename: stretch $ uname -a Linux raspberrypi 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l GNU/Linux $ nodejs -v v8.11.1 $ npm -v 1.4.21
機能
室温表示
ラズパイに接続した温度センサ値で室温を取得し、それをブラウザに表示します!これだけの機能です!室温は10分に一回更新されます。小数点以下は切り捨てです。
室温表示のしくみ
温度センサ周りはpythonで実装しており、読み取ったデータを一旦テキストファイルに出力します。そして、Node.jsがそのテキストファイルを読み取り、室温をhtmlへ渡します。Node.jsから温度センサを制御する方法もあるのですが、それはそれでいろいろ調査実装が必要そうだったのでパスしました。pythonを用いた温度センサ制御であれば、「Raspberry Piで学ぶ電子工作」を参考にすぐできたので、テキストファイル経由のほうが簡単そうという想定でした。Node.jsでテキストファイルを読み込む実装であっても時間かかりましたが。。できてよかったです。
一応、10分ごとに取得した気温データはすべてログとして残すようにしています。これもグラフ表示できるようにしたいですね。いつかは!
今後実装したい機能
- 定期撮影した画像をGoogle フォトへ自動アップロード
- 気温によるエアコン制御
- 撮影画像による表情分類
参考サイト
【Node.js】 htmlファイルを読み込んで画面を表示しよう。 – web.lab
https://www.tech-tech.xyz/nodejs-readfile-readfilesync.html
node.js、express、ejsでHello Worldするコード - Qiita
Node.jsで定期実行メモ - Qiita
systemdを使ってnodejsサーバー起動する | 69log
systemdでユーザーの環境変数を読み込むようにする - bacchi.me
おわりに
ひとまずこれで運用をしていこうと思います。温度センサ読み取ってブラウザに表示するなんてすぐにできるだろうと思ったら、Webプログラミング知らなさすぎて苦労しました*1。普段は組み込み系のプログラミングしていることが多いので、Webプログラミング周りは新鮮でもあり面白かった部分もあります。Webプログラミング界隈はネットに玉石混交でめちゃくちゃ情報が多い*2ので、検索閲覧での情報取捨選択の試行錯誤が大変でした。
今回実装した、Node.js+ラズパイ+温度センサ制御、Node.js+ラズパイ+起動時実行に関しては備忘録的にも別途記事化しておきたいなぁと思います。まだまだわかっていない部分もあるので、記事化するときに勉強できたら良いかなと。
今後はというか夏休みくらいにGoogle フォトへ自動アップロード機能を実装できればなぁと思います。