ホワイトボードの買い物リストを外から見えるようにする

ホワイトボードの買い物リスト?

我が家では台所にホワイトボードを設置しており、そこに「買い物リスト」を書いています。

(以前はLINEのチャットボットを使い、スマートフォンで買い物リストを管理していたのですが、在宅勤務中心となったためホワイトボードに移行しました。)

買い物に行くときは、スマートフォンでパシャッと、このホワイトボードのリストを撮影します。

しかし、何かのついでにふらっとスーパーに寄ったときなど、家の買い物リストに何が書かれていたかを知ることができず、必要な買い物ができない場合があります。

また、出かけるたびにホワイトボードをスマートフォンで撮影するのも面倒です。

ということで、「出先からホワイトボードを確認するための仕組み」を作ることにしました。

外から安全にホワイトボードを見たい

安直に考えれば、ホワイトボードが映るようにカメラを設置し、Webサーバか何かを外部に公開して、家の外から見えるようにするのが簡単です。

しかし、家にWebサーバを立てて外からアクセスできるようにするのは、我が家のセキュリティを強固に保つために、できればやりたくありません。

ということで、家にWebサーバを立てる案は却下です。

材料

さて、ここからはこの手法を実現するための材料を紹介します。

Google Drive

家にWebサーバを立てないということで、今回利用したのはGoogle Driveです。

ホワイトボードを撮影するカメラが撮影した画像を定期的にGoogle Driveにアップロードします。

これにより我が家のセキュリティを強固に保ったままホワイトボードの写真を外から見ることができるようになります。

TTGO T-Camera

写真の撮影はTTGO T-Cameraを利用します。

これはESP32-WROVER-Bとカメラモジュールの付いた、WiFiカメラを作るためのモジュールです。

似たようなボードは各種ありますが、今回利用するのは技適を取得しているESP32-WROVER-Bが搭載されたボードです。

(多分これかな? 自分はAliExpressで買いました)

Raspberry Pi 3

TTGO T-Cameraで撮影した映像をRaspberry Piから取得し、Google Driveにアップロードします。

もしかしたらTTGO T-CameraだけでもGoogle Driveにアップロードできるかもしれませんが、今回は簡単のためにRaspberry Piを利用しました。

丁度、我が家には「おうちサイネージ」として動かしているRaspberry Piがあるのでこれを利用することにしました。

inajob.hatenablog.jp

調理

さて、これらの材料を組み合わせてシステムを完成させていきます。

概要

これから構築するシステムの概要です。

TTGO T-Cameraで撮影した映像をRaspberry Piで定期的に取得し、Google Driveにアップロードします。

TTGO T-Cameraのファームウェアを我が家用に変更

TTGO T-CameraをWebカメラとして動作させるためには以下のソースコードを利用しました。 (というか購入時はこのファームウェアが入っていたようです)

github.com

WiFiのAPの設定を修正し家のWiFiに接続できるように再コンパイルして書き込みます。

起動すると画面にIPアドレスが表示されるので、そこにアクセスするとカメラの映像を確認できます。

我が家のルーターと相性が悪いのか、長く起動しているとWiFiの接続が切れてしまう問題が発生しました。

以下の記事を参考にし、WiFi接続が切れた時は自動的に再接続するようにしました。

randomnerdtutorials.com

TTGO T-Cameraを固定するための台

台所の壁に設置したホワイトボードを撮影するためには、TTGO T-Cameraを良い角度で固定する必要があります。

このためのカメラの脚を3Dプリンタで自作しました。

FreeCADを使ってこのような立体を作りました。

このパーツは2つくっつけるとこのようにL字型の蝶番のようになります。

TTGO T-Cameraのケース(写真に写る紫のケース)は 以下のモデルを使いました。

www.thingiverse.com

Raspberry Piにアップロード用スクリプトを仕込む

定期的にTTGO T-Cameraから画像を取得しGoogle Driveにアップロードするスクリプトを用意します。

Google Driveへのアップロードにはrcloneを利用します。

rcloneの初期設定はCLIのウィザードで実施することができます。CLIENT_ID, CLIENT_SECRETを設定するのがちょっと面倒だったのですが、設定しなくても一応動かすことはできます。(ただし共用のIDを使うことになりすぐに制限に引っかかってしまうので、常用するのには向きません)

スクリプトは以下のような感じです。

(convertコマンドにより画像を反転したり、日付を入れたり、過去にアップロードした画像を削除したりもしています。)

#/bin/bash

cd `dirname $0`

curl http://<TTGO T-CameraのIPアドレス>/capture -o todo.jpg
convert todo.jpg -rotate 180 -fill white -pointsize 25 -font Helvetica -draw "text 20,20 '`date`'" -background white todo.jpg

for f in $(rclone lsf "google drive:/ouchi-raspberry-pi/"); do
  echo "delete $f"
  rclone delete "google drive:/ouchi-raspberry-pi/$f"
done;

rclone copyto todo.jpg "google drive:/ouchi-raspberry-pi/todo-$(date "+%Y%m%d-%H%M").jpg"

同じ名前のファイルをどんどん上書きしても良いのですが、iPhoneGoogle Driveのアプリのキャッシュの処理などにより、画像が更新されないという問題が起きたので、日時に合わせて画像ファイル名を変更するようにしました。

Google Driveの共有設定

このようにしてアップロードした写真は、Google Driveの共有機能を利用すると他人と共有することもできます。

我が家でも妻と写真を共有し、夫婦どちらでも家の買い物リストを出先から見られるようにしました。

まとめ

TTGO T-Camera, Rasperry Pi, 3DプリンターなどIoT的な装置をフルに使ってホワイトボードの画像を外から見るためのソリューションを作ることが出来ました。

これでまた生活が便利になりました! 自分の知識を使って、生活を便利にするのは楽しいので、この記事をご覧の方もぜひ挑戦してみてください!