🖼

電子ペーパーを使って"やさしい"IoTサイネージを作った!

2023/12/21に公開

本記事はSORACOM Advent Calendar 2023の21日目の記事です。

今年作ったのはタイトルにもあるとおり「"やさしい"IoTサイネージ」です🎉

電子ペーパーサイネージの写真

背景

私が所属する株式会社Fusicでは、Fusic Tech Live を始めとする技術イベントを定期開催しています。
イベントの開催はSlackで社内にも共有されるのですが、Slackには様々な通知が来るので埋もれがちで、記憶にも残りにくいと感じています。

そこで、もっと視覚的に訴えかけることができ印象に残る通知方法として、IoTサイネージを制作することにしました。

別アングルの電子ペーパーサイネージ

ソリューション

まずイベントの情報をどこから取得してくるかを検討しました。

開催されるイベントの多くはconnpassで告知しますが、一部connpassで募集していないイベントもあります。
社内向けにはOutlookカレンダーに予定が登録されているので、ここから予定を取得して表示するという方法が考えられます。

Outlook予定表に登録されたイベント

ただし、Outlook予定表の中にはIoTサイネージに投影できないものもあるため、今回は決められたプレフィックス(画像の例だと [DEMO])が付与されている予定のみを投影する仕様としています。

取得したイベントの予定はMQTTでデバイスに送信します。今回はWi-Fi通信がある場所にサイネージを設置しましたが、今後Wi-Fi通信がない場所に設置する可能性もゼロではないため、LTE通信に切り替える余地も残したいです。

そこで、今回はSORACOM Arcを使ってSORACOM Beam経由でAWSと接続することにしました。

システム構成図

製作

デバイス

ハードウェア

サイネージとして使えるサイズの電子ペーパーとなると、その時点で候補がかなり絞られます。
4インチの7色電子ペーパーである*Inky Impression 4"*が、Web上での製作事例も多く、Raspberry Piと直接接続して使えるのでこちらを使用しました。

https://www.switch-science.com/products/8135

この時点でデバイスの制御はRaspberry Piを使用することが確定します。たまたま手元に3が1台余っていたのでこれを使用します。
3でも問題なく動作していますし、今となっては5も登場しているのですが、現時点で最も入手しやすいものでいうと4かもしれません。

https://www.switch-science.com/products/5680

市販のフォトフレームにプラ板をはめ込んで、電子ペーパー付きのRaspberry Piを裏側から貼り付ければ無事完成です。

ビニールテープで強引に固定しているので、正直あまり見せたくない状態ではあります😅

ソフトウェア

Inky Impression 4"はPythonで書かれたサンプルプログラムがGitHubに公開されています。

https://github.com/pimoroni/inky/blob/main/examples/7color/image.py

画像ファイルをライブラリに入力することで描画できるようになっているので、Fusicのロゴが入った画像ファイルを用意しておき、そこにMQTT経由で受信したイベントの情報を文字として埋め込み、その画像を出力しています。

用意した画像はこういったものです。

文字埋め込み前の画像

この画像の中に以下のプログラムで文字を埋め込んでいます。

https://github.com/yuuu/iot-epd-signage/blob/main/device/event.py

クラウドとの通信は soratun をsystemdで起動して、仮想SIMが接続された状態で行います。

プログラム起動時に iot-epd-signage/started へメッセージをPublishし、iot-epd-signage/schedule をSubscribeすることで、イベント情報を受信します。プログラムだとこのあたりです。

https://github.com/yuuu/iot-epd-signage/blob/main/device/message.py

クラウド

システム構成図

クラウド側はAWS SAMで構築しています。テンプレートやソースコードは以下リポジトリを参照ください。

https://github.com/yuuu/iot-epd-signage/tree/main

Lambda関数にてMicrosoft GraphのAPIを利用して、Outlook予定表を読み出しています。
Outlook予定表を読み出す方法は別の記事にまとめていますのでこちらを参照ください。

https://zenn.dev/fusic/articles/9371cee158c236

Lambda関数は「日付が日付が変わったタイミング」と「デバイスから特定のトピックへメッセージがPublishされたとき」という2種類のトリガを設定しています。これにより、起動直後のデバイスにもイベントを投影しつつ、日付が変わった際に表示内容を自動更新しています。

https://github.com/yuuu/iot-epd-signage/blob/main/template.yaml

"やさしい"とは

タイトルに含めた"やさしい"は、電子ペーパーを使うことで得られた2つのメリットを表現しています。

  1. 通常のディスプレイのように発光しないので「目にやさしい」です。紙に書かれた文字のように自然に読むことができます。
  2. 電子ペーパーは一度描画すると通電し続ける必要がなく省電力です。つまり「環境にもやさしい」です。

逆にデメリットとしては「表現できる色に限界がある点」と「書き換えに時間がかかる点」です。
描画の開始から終了までにおよそ30秒を要します。

https://twitter.com/Y_uuu/status/1737753860322812345

まとめ

電子ペーパーは今回はじめて使ったのですが、テキストメインで情報を伝達する際に適していると感じました。例えば、会議室に設置してその会議室の利用予定を表示しておく、といった使い方が考えられそうです。

SORACOM ArcはこれまでもオフィスにIoTデバイスを置く際に使っており、重宝しています。今後も活用し続けたいサービスの一つです。

GitHubで編集を提案
Fusic 技術ブログ

Discussion