フロントエンドエンジニアのまめ太です。 衝動的に大きな画面のデジタルフォトフレームが欲しくなったので、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」を選びます。

rasp configを開く 次に「A1 Expand Filesystem」を選びます。 A1 Expand Filesystem選択 流れ通りに進むと再起動するので、ちゃんと未割り当て領域が解放されたか確認します。

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

OneDriveと同期する

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

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で使うと、すべてを同期する設定(デフォルト)にした場合でも今回共有させたフォルダだけが同期されることになります。 さっそく同期してリモートから画像を取得します。※初回はログインを求められるので、サブアカウントでログインします。

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

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

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

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

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

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

-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で制御できるようにしました。

終わりに

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

あわせて読みたい記事