GoogleHomeに買い物メモを印刷してもらう
社畜までのカウントダウンに震える今日この頃、
久々に"GoogleHome欲"が出てきたのでGoogleHomeを弄ろうと思います。
家から離れたくないでござる
作るもの
買い物に行く際に買わなきゃいけない買い物メモ、どうやって覚えてますか?
メモ帳や手のひらにペンで書いたり、今時はスマホのリマインダーに入れたりと色々やり方があると思います。
一人ならまだ当人が買うものをリストに残しておけばいいですが、家庭単位で見るとみんな欲しがってるものがバラバラで共有し難いです。
さらに、買い物に行く人も変わるので
出かけようとする家族に向かって「〇〇買ってきて!」と声をかけることも多いですよね。
そこで、全部GoogleHomeにメモを取ってもらおう!
と言うのが今回やる事です。
利用イメージとしてはこんな感じです。
各々GoogleHomeに向かって欲しいものを喋ります。
すると、プリンターで買い物メモを印刷、買い物に行く人がそのメモを持って行けば家族全員の買い物が1度に済むという訳ですね。
デモ見たい人はこちら
GIFver
作ろう
もうちょっとシステムの中身を考えましょう。
今回は普通のプリンターだとメモのたびに1枚ごとに印刷されてしまうので、レジのレシートのような印刷ができるサーマルプリンターを使います。
僕は既に持っているサーマルプリンターを使いました(↓これ)。
このタイプはシリアル通信しかできないので、USBで接続できるのが買えればそちらが楽だと思います(現在は売り切れでした)。
ではこのプリンターへメモを送ることを最終目標…つまりプリンターとシリアル接続してるラズベリーパイまでメモの文字列を遅れたらミッションクリア!
道筋はこんな感じになりました。
大抵ここを通してぶち込んでおけばなんとかなるIFTTTさんと、
僕は今回初めて使うBeebotteでラズパイまでデータを届けます。
BeebotteはラズベリーパイがIoT向けのプロトコルMQTTによってデータを購読(Subscribe)しに行くため、データのブローカーとなるらしいです。
まるで意味がわからんぞ
uniRxとかもPublish/Subscribe型のモデルを使ってましたね(確か)
だからなんだって話ですけど。
kotatu99.hateblo.jp今までだと買い物リストとかのデータはFirebaseとかGoogleスプレッドシートに入れていたので今回もそっちで行くかな〜とか思ってたんですが、Beebotteが結構簡単で良かったです。
印刷
ネットワークで色々やる前にまずサーマルプリンターのセッティングをしていきます。
ラズベリーパイへサーマルプリンターをプリンターとして認識させる部分はこちら
https://learn.adafruit.com/networked-thermal-printer-using-cups-and-raspberry-pi
Raspberry Pi 3はUSB接続じゃないとダメだよみたいなことが書いてあって(今回使用してるのはPi3)肝を冷やしましたが普通にシリアル接続でいけました。
ここまでで、英字と画像印刷はできます…が、日本語は文字列渡してはい印刷!という訳には行かず文字化けするので
文字列の画像化をしましょう。
指定のフォントファイルを使って描画した文字列を画像ファイルに保存 - 強火で進め
python3に書き換えて、フォントをNotoSansCKJPにしたものがこちら。フォントファイルはスクリプトと同階層に置いてください。
gist8e0e6fdb94d4dac4732c5d4ef32c2276
日本語が無事印刷できたら後はGoogleHomeがIFTTTでBeebotteに送信したメモを読みに行くだけです。
メモの送信・取得
GoogleHomeからBeebotteへのメモの送信はこんな感じ。
これで
OK Google, 買い物メモ じゃがいも!
と言えば
買い物メモにじゃがいもを登録しました。
とGoogleHomeが返してくれます。
ではBeebotteとラズベリーパイの通信を組み合わせましょう。
MQTTの部分はこちら参考にしました。
gist6f93333441ab569076f8b96c5eac79d4
完成!
話しかけると…
印刷完了!
これで買い物に行けばバッチリだぜ!
GoogleAssistantを経由してるので、スマホのAssistantアプリからでも買い物メモが印刷可能です。
という訳で、スマートハウスとかに比べハイテクではないですが、身近に役立つんじゃないかなあと思うGoogleHome活用法でした。
サーマルプリンターが身近じゃない?知らんな…
最近はスマートスピーカーブーム?も落ち着いて来た気がしますが、まだまだGoogleHomeで遊んでいきたいと思います!
それでは!