昨年度に色々揃えた物で少しづつ見せれる形になってきましたので途中経過の報告がてらチラ見せ Part2 です
今回はStickPC + 大型TVのデジタルサイネージ化について焦点を当てます。
目的
KPI値や社内情報を高頻度に更新/表示し見える化する
利用した物
- 大型TV
REGZA G9シリーズ - StickPC
Windows10搭載 Diginnos Stick (Raspberry Pi2のGPUパワーが足りなかったためこちらを選定) - USB接続型 学習リモコン
ビット・トレード・ワン様のUSB接続 赤外線リモコンキット
購入した大型TVなのですが、パワーオンタイマー機能が搭載されていなかったため
少し無理やりですが、USB接続型 学習リモコン + 電源On/Offアプリケーションを自作する事にしました。
コミュニティサイトが存在しサンプルコードもあるため非常に利用しやすかったです
実施した内容
※WindowsPCのスリープを行わず、テレビの電源はOn/OffをUSB接続型学習リモコンより実施
設置
TVの裏側にStickPCを設置
USB接続型 学習リモコンを受光部の隣に両面テープで貼り付け
ほぼ90度の角度でも添付されている拡散LEDキャップを被せる事で、十分に安定して動作する事を確認できました。
加工に多少手間どいましたがフリスクケースに格納しました!
アプリケーションの作成
コミュニティサイトよりダウンロード出来る下記を利用して作成しました。
- 送信用設定ツール (テレビリモコンの信号データ解析に利用)
- 赤外線送信ライブラリ C#サンプルコード
- 赤外線送信ライブラリ
TVの電源On/Offステータスは実装しておりません。
TVにLANケーブルを挿してPingを打つ等も検討しましたが、ややこしくなるため誰も触れない前提です。
(PowerOn/PowerOffはいずれも電源ボタンを押した際のシグナルのため、逆の動作をするケースもあるという事です。)
下記リモコンコードはTOSHIBAのREGZAで動作したコードとなります
// Power On 処理 this.Invoke((MethodInvoker)delegate() { // 入力をHDMI1に切り替え SendIR(new byte[] { 0x40, 0xBF, 0x12, 0xED }); // 電源ボタンを押下 System.Threading.Thread.Sleep(3000); SendIR(new byte[] { 0x40, 0xBF, 0x01, 0xFE }); // 1チャンネルを押下 System.Threading.Thread.Sleep(1000); SendIR(new byte[] { 0x40, 0xBF, 0x0F, 0xF0 }); // 入力切替を押下 System.Threading.Thread.Sleep(500); // ボリュームを最小にする 100回 VolumeDown for (int i = 1; i < 100; i++) { SendIR(new byte[] { 0x40, 0xBF, 0x1E, 0xE1 }); System.Threading.Thread.Sleep(300); } // ボリュームをUIから設定した設定値にする X回 VolumeUp for (int i = 0; i < Int32.Parse(GetSetting("MaxVolume")); i++) { SendIR(new byte[] { 0x40, 0xBF, 0x1A, 0xE5 }); System.Threading.Thread.Sleep(300); } }); // Power Off 処理 this.Invoke((MethodInvoker)delegate() { SendIR(new byte[] { 0x40, 0xBF, 0x12, 0xED }); }); ... private void SendIR(byte[] code) { try { int i_ret = 0; if (handle_usb_device != null) { i_ret = USBIR.writeUSBIRex(handle_usb_device, USBIR.IR_FORMAT.NEC, code, 32, 0); } } catch (Exception e) { MessageBox.Show(e.Message); } }
基本的にはサンプルコードに時間判定処理を追加しただけとなります。
表示コンテンツ
Dashingで作成した社内KPI値等複数のダッシュボードを自動巡回する形でChromeで表示しています。
こちらはまた別の機会に紹介させて頂きます。