最近、多くの場所でデジタルサイネージをよく見かけるようになった。
大きな駅などの交通の要所でももちろんのこと。
小さなお菓子屋でもサイネージを見かけるようになった。
電子広告としてもデジタルサイネージはかなり身近になっていて、広告したいコンテンツを変えるのがものすごく楽なんだと思う。駅の中の広告がすべて紙ならば、それを張り替える労力は大変なものになるだろうしとても良いものに思える。
#Raspberry Piを使ってサイネージしてみた。
omxplayerで動画を描画させ無限ループで表示するオプションがあったので簡単なサイネージを作ることに成功した。
しかし、データを送るのがめんどくさく、表示したいコンテンツを変えるときはラズパイに入って直接色々さわるのがめんどくさかった。
とにかく、めんどくさい。つかいずら~。。。
動画などのコンテンツを送ることを楽にしたい。
表示するコンテンツを変更するのを楽にしたい。
#enebularを使ってみた。
enebularというIoTシステムを作るツールがあってそれを利用した。
どうゆうものかというと、PC環境からクラウド上にコンテンツのデータをあげたり、デバイス側の処理をnode-redベースで構築してそのプログラムをクラウド経由でRaspberry Piに配信することができる。
これを使ったら、もっと楽にサイネージ作れそうってなった。
#つまり
・色々設定して
・enebularに動画をあげる
・ラズパイに動画をあげる
・ラズパイにnode-redベースのプログラムを投げる。
これでデジタルサイネージとして十分に動く。
そして、IoTプラットホームを使っているのでセンサーデータを使ってインタラクティブな処理ができるので光センサを使って明るさの値をとって描画される動画が変わる機能をつけちゃいました。
話が長くなっちゃいましたが実際の手順をざっくり説明していきます。
#実際の手順
- 必要な物
- PC
- ディスプレイ
- Raspberry Pi 3-model B+
- grove
- 光センサ
enebularの登録
https://www.enebular.com/ja/index.html
登録が終わったら、右上のDocsに全体の使い方について書かれてる。今回は、サイネージをするだけなのでfirebaseなどは特に使わずflowとfileをdeployできるようになればよい。
ラズパイにenebularを簡単にインストールする方法
https://docs.enebular.com/ja/EnebularAgent/Installation.html
ラズパイ自体のuserと他に新しくenebularというユーザが追加される。(2019/06/21現在)
このenebularのユーザーをスーパーユーザーにする必要がある。
そして、enebualrとラズパイを連携しなければならないので、
https://qiita.com/TakedaHiromasa/items/b6828e4ac434bf99325d
を参考にして紐づけして下さい。
#動かすために
ラズパイにflowとfileをデプロイできるようにする。
初めに、出力したい動画をファイルデプロイする。
次にラズパイを動かすフローをデプロイする。
どんなフローを動かすかというと
このような感じになっており、データを一定の間隔でセンサデータを取得してswich-nodeで分岐してどちらの動画を描画するか選べるようになっている。
動画はomxplayerというRaspberry Pi専用のすごい動画再生ソフトがありそれをexec-nodeで再生している。使用するときは、最後のファイル名.mp4を自身がアップロードするファイル名に変更して使用する。
上記のフローはここにあります。
https://enebular.com/discover/flow/75633e0e-f0c2-40e8-b0c3-03526ca20f0e
[{"id":"58d35db6.513a44","type":"tab","label":"フロー 1","disabled":false,"info":""},
{"id":"4c44dbe7.ae7e04","type":"exec","z":"58d35db6.513a44","command":"sudo omxplayer
/home/enebular/enebular-runtime-agent/ports/awsiot/assets/video.mp4","addpay":true,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":1340,"y":460,"wires":[[],[],[]]},{"id":"ac3beb1a.cf08e8","type":"exec","z":"58d35db6.513a44","command":"sudo omxplayer /home/enebular/enebular-runtime-agent/ports/awsiot/assets/movie2.mp4","addpay":true,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":1350,"y":600,"wires":[[],[],[]]},{"id":"348e4bce.03ce94","type":"inject","z":"58d35db6.513a44","name":"データをキック","topic":"","payload":"","payloadType":"date","repeat":"8","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":540,"wires":[["ff23ab8c.942258"]]},{"id":"ff23ab8c.942258","type":"http request","z":"58d35db6.513a44","name":"光センサー","method":"GET","ret":"txt","url":"http://localhost:3000/sensor?ids=ADC2","tls":"","x":430,"y":540,"wires":[["56c2ab46.fa18c4"]]},{"id":"ac91783.be5b388","type":"switch","z":"58d35db6.513a44","name":"分岐","property":"payload.ADC2","propertyType":"msg","rules":[{"t":"gt","v":"700","vt":"num"},{"t":"lt","v":"600","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":870,"y":540,"wires":[["4c44dbe7.ae7e04"],["ac3beb1a.cf08e8"]]},{"id":"56c2ab46.fa18c4","type":"json","z":"58d35db6.513a44","name":"","property":"payload","action":"","pretty":false,"x":670,"y":540,"wires":[["ac91783.be5b388"]]}]
#実際に動かしてみた
Digital signage pic.twitter.com/g6XEbvMbSM
— datsu (@datsu055) 2019年6月24日
#最後に
上記のflowは何をしているかというと、動画が終わるタイミングごとにkickしてその時のセンサの値によってどっちの動画を描画するのかを選んでいる。こんなシンプルなものになっています。
私の技術不足で、自動で立ち上げられたのはいいものの、立ち上がっているomxplayerのpidをkillする方法がわからなく動画の長さをすべて同じ時間にしなければならないという仕様になっております。。。
もし同じ長さの動画を使わないとバグっちゃいます。