Raspberry Piでデジタルサイネージを作る

# HDMI液晶に映すサイネージをつくる

- HDMIで出力
- 24時間365日動作
- GPIOと連動

# ナゼ Rasbperry Pi か

- iPadとか使ってみる
-- 知らない間に止まる！
- DVDプレーヤーでいいんじゃない？
-- GPIOでトリガーかけたい
- PCでマルチ画面だと？
-- 既存システムはコストが高い。
-- 安定性が・・・

# クラスタシステム


- Rasbperry Pi 10台以上


![IMG_20141107_033752.jpg](https://qiita-image-store.s3.amazonaws.com/0/139524/aba0c010-fe8f-0808-687c-0cbcbc95660c.jpeg)


# 液晶を用意
液晶は中華から密輸

- 資料
- 約1万円でHDMI入力付10.1インチWUXGA(1920×1200)液晶モニタを自作してみた
- http://karinto.in/2014/06/19/lcdmake/

# 液晶形式
- 資料によると、MIPIとLVDSがあるらしい。
- でも2017年2月時点では、ほとんどEDPだった
- EDPは30ピン
- EDPは何チャンネルか、何ボルトなどのバリエーションもある。

# HDMIコントローラ
- 液晶にあわせて密輸します。
- プロファイルを書き込んでから出荷してもらう
- 注文時に、どのモデルを使うよ、と連絡
- LEDバックライトコントローラならば調光出来る

# 安定性のために

電源回路基板をつける

![IMG_20141104_091147.jpg](https://qiita-image-store.s3.amazonaws.com/0/139524/bb2cb269-97a1-da71-1dae-f35211d11eed.jpeg)

# 処理を軽く

- RaspberryPiはH.264動画支援再生がある
- ハードウェア動画再生支援機能を使う

# Xを使わない

- コンソール画面で
- フレームバッファモード
- vlcとかもフレームバッファモードがある

# コマンドで再生
/opt/vc/src/hello_pi/hello_video/hello_video.bin

がh.264再生


# スクリプトでGPIO連動
```
#!/usr/bin/env python3
import wiringpi2 as w
import time
import os
w.wiringPiSetup()
w.pinMode(0, 0)
w.pullUpDnControl(0, 2) 
while 1:
  state = w.digitalRead(2)  
  print (state) 
  time.sleep(0.1)
  if ( 0 == state ):
#    os.system("omxplayer /home/pi/hxtree/contents.mp4 -o local")
    os.system("/opt/vc/src/hello_pi/hello_video/hello_video.bin /home/pi/hxtree/contents.h264")
    time.sleep(30)
```

# 無限ループ

用途に応じて書き換えて無限ループするようにもした


```
/opt/vc/src/hello_pi/hello_video/hello_video_sheemless.bin /home/pi/hxtree/contents.h264
```

# コンテンツ

結構相性がある

avidemuxを使ってH.264を使う

フリーのトランスコーディングソフトとしてavidemuxを

Ubuntu 16.04にインストールして使う。

```
# apt install avidemux
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
パッケージ avidemux は、以下によって提供される仮想パッケージです:
  avidemux2.6-qt 1:2.6.16-1~getdeb1
  avidemux2.6-cli 1:2.6.16-1~getdeb1
インストールするには、明示的にいずれかを選択する必要があります。

E: パッケージ 'avidemux' にはインストール候補がありません
```
ということで、

```
apt install avidemux2.6-qt
```


としてインストールした

# 映像を作る

avidemuxの変換パラメータ

```

1. Video Output → Mpeg4 AVC (x264)
2. Video Output → Configure → General  → Encoding Mode → Constant Quantiser (Single Pass)  → Quantizer → 5に設定  → OK
3. Output Format → Video Only
```

# オーディオ

音声は映像とは別個に再生した。
alsamixerで音量を制御。
amixer cset numid=3 2 でhdmiの指定
だが出なかったので
amixer cset numid=3 1 で内蔵。

# 音声テスト

aplay /usr/share/sounds/alsa/Rear_Right.wav 
でテスト。
ln -s /media/usb/contents.wav contents.wav
としてリンクを作り、

```
#!/bin/sh
amixer master 100:100 &
amixer pcm 100:100 &
amixer cset numid=3 1 &
while [ 1 ]
do
aplay /home/pi/hxtree/contents.wav
done
```

```
# chmod 777 loopaudio.
```

# 元VIDEOを加工

ブランクを追加したい

```
ffmpeg -r 0.1 -i black.jpg   video.avi
```

とすると、10秒が出来たがブランク部分1コマしか無い。

```
ffmpeg -loop 1 -r 29.98 -i black.jpg -t 10.000 -vcodec libx264  black.avi
```

でできた。

# 連結

avidemuxだとうまく連結できなかったので、ffmpegで連結。
これは音声を抜いて連結する方法。

```
ffmpeg -i 03-003.mp4 -i black.avi -filter_complex "concat=n=2:v=1:a=0" -an output.mp4
```

一旦コレで作っておいて、avidemuxでh.264に。

# 細かい設定

# 起動メッセージが出ないようにする。

```

# cat /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait logo.nologo
```


# HDMIでフルスクリーン

```
hdmi_force_hotplug=1

disable_overscan=1

#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16

framebuffer_width=1280
framebuffer_height=800


hdmi_group=2
hdmi_mode=28
```

# USBにコンテンツを置く

```
ln -s /media/usb/contents.wav contents.wav
```

としてリンクを作り、
```

touch loopaudio.sh
chmod 777 loopaudio.sh
vim loopaudio.sh
```
として中身を以下のようにする。
```
#!/bin/sh
amixer master 100:100 &
amixer pcm 100:100 &
amixer cset numid=3 1 &
while [ 1 ]
do
aplay /home/pi/hxtree/contents.wav
done
```

更に
```
sudo bash
vim /etc/rc.local
```
として、最後に
```
/home/pi/hxtree/loopaudio.sh &
```
を追加

更に
```
# vim /boot/config.txt
```
として、フレームバッファサイズを

```
framebuffer_width=1920
framebuffer_height=1080
```

に変更したよ。

```
hdmi_group=2
hdmi_mode=28
```

もコメントアウト。

```
/etc/kbd/config 
```

として

```
BLANK_TIME=30
POWERDOWN_TIME=30
```

をそれぞれ0にして、画面が消えるのを防ぐ。

# 巨大クリスマスツリーができました

<img width="768" alt="IMG_20141107_042622.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/139524/d80a062b-d6bf-c895-7773-ab50f6dda3a9.jpeg">