Raspberry Pi 3で17.3インチのデジタルフォトフレームを作った!

Raspberry Pi 3で17.3インチのデジタルフォトフレームを作った!

  • このエントリーをはてなブックマークに追加

フロントエンドエンジニアのまめ太です。

衝動的に大きな画面のデジタルフォトフレームが欲しくなったので、Raspberry Pi 3で作ってみました。
今回は額縁に入れたモニタを壁掛けして、OneDriveに配置した画像をスライドショーで表示するところまでやってみました。

目次

デジタルフォトフレーム自作で用意したもの

  1. Raspberry Pi 3 Model B
  2. microSD 128GB
  3. 額縁用端材
  4. 12V2A ACアダプタ
  5. HDMIケーブル
  6. 17.3インチLCD(LVDS 40ピン接続)
    LCD
  7. LCDのコントローラボード
    LCDのコントローラボード

Raspberry Piは室内でWiFi運用とし、定期的にOneDriveの1つのフォルダから画像を同期します。そしてRaspberry PiにHDMI接続されたLCDにスライドショーを常時表示するというのがゴールになります。

microSDの換装

スライドショーに使用する画像は枚数が多いため、今回は念のため128GBのmicroSDを購入しました。

我が家のRaspberry Piは既に常時稼働しており、初期セットアップは済んでいます。そのため、まず最初に16GBのmicroSDのデータを128GBのmicroSDにコピーする作業を行いました。

3ステップの作業です。※ここでの作業はWindows10 1809で行いました。

  1. 新しいmicroSDのフォーマット
  2. 古いmicroSDのデータを新しいmicroSDにコピー
  3. 未割り当て領域の解放

市販の32GB以上のmicroSDはexFATでフォーマットされており、Raspberry Piで使うためにはFAT16かFAT32でフォーマットしなおす必要があります。
今回はDisk Formatterを使って128GBのmicro SDをFAT32にフォーマットしました。
https://www.buffalo.jp/support/download/detail/?dl_contents_id=60879#1
Disk Formatter

データのコピーには、Win32 Disk Imagerを使いました。
https://ja.osdn.net/projects/sfnet_win32diskimager/
16GBの方のデータをイメージファイルとしてバックアップし(Read)、128GBの方に書き込みます(Write)。
Win32 Disk Imager

これで128GBの方でもバックアップした時の状態でRaspbianを起動できますが、16GBの時の記憶領域が維持され、128GBのmicroSDとして使うことができません。この未割り当て領域を解放するには、Raspbianの設定ツールであるraspi-configを使います。

Raspberry Piのターミナルからrasp-configを開き、「7 Advanced Options」を選びます。

sudo raspi-config

rasp configを開く

次に「A1 Expand Filesystem」を選びます。
A1 Expand Filesystem選択

流れ通りに進むと再起動するので、ちゃんと未割り当て領域が解放されたか確認します。

df- h

ここまででmicroSDの換装は完了です。

OneDriveと同期する

スライドショー用の画像はOneDrive上に配置しているので、Raspberry Piで同期できるようにします。
OneDriveとの同期には、OneDrive Free ClientというLinux環境でOneDriveと接続し同期を取れるオープンソースのクライアントソフトウェアを使用しました。
https://github.com/abraunegg/onedrive
インストールはREADME.mdのRaspbian用のものに従って行います。

cd ~
sudo apt-get update
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libsqlite3-dev
wget https://github.com/ldc-developers/ldc/releases/download/v1.11.0/ldc2-1.11.0-linux-armhf.tar.xz
tar -xvf ldc2-1.11.0-linux-armhf.tar.xz
git clone https://github.com/abraunegg/onedrive.git
cd onedrive
make DC=~/ldc2-1.11.0-linux-armhf/bin/ldmd2
sudo make install

OneDriveとの同期の方針ですが、シンプルな同期体制を取りたかったため、今回は以下のようにして同期を行いました。

  • マイクロソフトアカウントを2つ用意
  • サブアカウントのOneDriveは空
  • メインアカウントの同期させたいフォルダをサブアカウントに共有
  • OneDrive Free Clientではサブアカウントを接続する
  • 同期されるのは常に共有したフォルダのみ

Officeのサポートページの下記リンク「共有フォルダをOneDriveに追加して同期する」の解説通りに、同期させたいメインアカウントのフォルダをサブアカウントに共有し、サブアカウントのOneDriveに追加します。
https://support.office.com/ja-jp/article/共有フォルダーを-onedrive-に追加して同期する-8a63cd47-1526-4cd8-bd09-ee3f9bfc1504

これでサブアカウントをOneDrive Free Clientで使うと、すべてを同期する設定(デフォルト)にした場合でも今回共有させたフォルダだけが同期されることになります。

さっそく同期してリモートから画像を取得します。※初回はログインを求められるので、サブアカウントでログインします。

onedrive --synchronize --verbose --download-only

Raspberry Pi側の変更は反映する必要がないため、リモートの変更だけ同期しています。

最後に、定期的に同期をとって新着ファイルをダウンロードするために、cronに設定を追記します。12時間おきにリモートの変更を反映するようにしました。

00 4,16 * * * /usr/local/bin/onedrive --synchronize --verbose --download-only

スライドショーを表示する

スライドショーの表示には、Fehという画像ビューアを使います。
https://feh.finalrewind.org

今回同期対象としたフォルダは、直下に子フォルダが複数あり、その中にそれぞれ画像が格納されているというフォルダ構成です。
Fehは、再帰的に画像を検索でき、スライドショー再生中に規定のインターバルでリストを更新する機能があるため、今回の要件にはぴったりでした。

sudo apt-get install feh

manで必要なオプションを確認します

man feh

僕の場合は以下のようなオプション付きで起動すると要件通りに起動できました。

feh -Y -x -q -D 10 -R 43200 -F -Z -r -z ~/OneDrive/[対象フォルダ名]

指定したオプションの解説です。

-Y、 –hide-pointer 
ポインタを隠します。

-x、 –borderless 
ボーダレスウィンドウを作成します。

-q、 –quiet 
画像のロードに失敗してもエラーを出しません。

-D、 –slideshow-delay float
スライドショーの画像切替のインターバルをfloat秒で行います。

-R、 –reload int
int秒後にファイルリストと現在の画像をリロードします。ファイルリストのリロード機能はまだ実験段階です。

-F、 –fullscreen 
ウィンドウをフルスクリーンにします。このモードでは、大きな画像は常に画面に合わせて縮小されます。

-Z、 –auto-zoom
フルスクリーン/固定ジオメトリモードで、写真を画面サイズにズームします。

-r、 –recursive 
コマンドライン引数内のディレクトリの最下層を含めたディレクトリの内容まで再帰的に展開します。

-z、 –randomize 
スライドショーで複数のファイルを表示するときは、表示する前にファイルリストをランダムします。スライドショーが繰り返されるたびに(つまり、最後の画像から最初の画像に遷移すると)、リストは再度ランダムされます。 

モニタを使ってスライドショーの動作確認をします。※スクリーンセイバーは切っておく必要があります。
既存のモニタを使用する場合はここまででフォトフレームは完成です。

額縁の組み立て

Raspberry Pi側の準備はできたので、あとはモニタ入りの額縁になります。
今回はDIYの得意な友人が協力してくれました。

端材をカットし、ガンタッカーで枠を作るところから始めました。
ガンタッカーで額縁作成

その後釘を打ったりして格闘した後、スプレーで黒に塗装し、LCDとコントローラボードをはめ込んだ完成品がこちらになります。
デジタルフォトフレームの額縁完成

バックライトを隠しつつLCDを固定するために配置した背部の板にコントローラボードをネジ止めしています。
コントローラボードを取り付け

強度やサイズ的に木では少々厳しかったので、次はプラスチックや金属でトライしたいとのことでした(友人談)。

設置

壁に固定したフックに紐を引っ掛けて、額縁を吊り下げました。
デジタルフォトフレームを壁に掛ける

PCデスクの横に置いているので、いつでも見られて幸せな気分になれます。
デジタルフォトフレームの完成

ちなみにコマンドでモニタへの信号供給の制御、スライドショーの開始・停止ができるので、スライドショーのスケジューリングなどができます。僕は少し手を加えてGoogle Homeで制御できるようにしました。

# 起動
vcgencmd display_power 1
export DISPLAY=:0 && feh -Y -x -q -D 10 -R 43200 -F -Z -r -z ~/OneDrive/[対象フォルダ名] &
# 停止
pgrep feh | xargs kill -9
vcgencmd display_power 0

終わりに

今回は「Raspberry Pi + 額縁付きモニタ」でデジタルフォトフレームを作りました。
期待以上のクオリティに大満足です。みなさんも是非挑戦してみてください!

  • このエントリーをはてなブックマークに追加

記事作成者の紹介

まめ太(フロントエンドエンジニア)

フロントエンドエンジニアです。縮小する某ゲーム業界を憂いています

関連するSONICMOOVのサービス

フロントエンドエンジニア募集中!

×

SNSでも情報配信中!ぜひご登録ください。

×

SNSでも
情報配信中!
SONICMOOV Facebookページ SONICMOOV Twitter
フロントエンドエンジニア募集中!

新着の記事

mautic is open source marketing automation