なんかいろいろしてみます

Jul 19, 2023 - 2 minute read - RaspberryPi

Raspberry Pi zero でデジタルフォトフレーム作ってみる

概要

  • Raspberry Pi zeroを使ってデジタルフォトフレームを作成
  • USBメモリ保存された動画、画像データを再生
  • Raspberry Pi zeroはOSを読み込み専用で起動し、自動ログインと自動アプリ起動を行う
  • 環境設定時にはUSB接続でのSSH接続を行う
  • 画面は1920x1080を縦画面にしたディスプレイを利用

デバイス構成

  • Raspberry Pi zero (wも可)
  • micro SDカード (OS用)
  • モバイルモニター
  • USBメモリ(メディアデータ保存用)
  • micro USB OTG 変換ケーブル
  • mini HDMI 変換ケーブル

OS設定

  • OS用SDカード作成
    • Raspberry Pi ImagerからRaspberry Pi OS Lite (Legacy)を選択
    • 詳細設定から「ホスト名」、「SSHを有効化する」、「ユーザー名とパスワードを設定する」を設定する
  • USBによるssh接続設定(OS側)
    • sdカードにOS書き込み後、差しなおして再認識
    • config.txtを開いて最後に「dtoverlay=dwc2」を追加
    • cmdline.txtを開いて「modules-load=dwc2,g_ether」を「rootwait」直後に追加
    • 空の「ssh」ファイルを作成
  • USBによるssh接続設定(Windows側)
    • 以下のサイトからドライバー「Acer Incorporated. - Other hardware - USB Ethernet/RNDIS Gadget Windows 7, Windows 8, Windows 8.1 and later drivers」をダウンロード
    • ダウンロードしたファイルの中身をすべて展開しておく
    • Raspberry Pi zeroをwindowsに接続しデバイスマネージャーを開く
    • デバイスマネージャーに追加されたCOMポートを選択しドライバーの更新を実行
    • 展開したドライバーをインストールするとデバイスマネージャーのネットワークアダプターに「USB Ethernet/RNDIS Gadget」が追加される
  • インターネット設定(Windows側)
    • 設定 → ネットワークとインターネット → ネットワークの詳細設定 → ネットワークアダプターオプションの詳細
    • インターネット接続済みのアイコンのプロパティの共有を選択
    • インターネット接続の共有の「ネットワークのほかの…」のチェックを入れてRaspberry Piのネットワーク名を選択
    • PCの再起動
  • 画面設定
    • sudo vim /boot/config.txt
    • FullHD設定
      • disable_overscan=1
      • hdmi_force_hotplug=1
      • hdmi_group=1
      • hdmi_mode=16
    • 画面回転(縦画面)
      • HDMI_modeの下にdisplay_hdmi_rotate=1
      • dtoverlay=vc4-kms-v3dをコメント化
  • 画像表示
    • sudo apt install fbi
    • sudo fbi -T 1 -d /dev/fb0 -noverbose -a <画像ファイル>
    • 停止(qコマンドを送信) : sudo perl -e '$chr="q"; require "sys/ioctl.ph";open($hTTY, ">", "/dev/tty1");ioctl($hTTY, TIOCSTI(), $chr)'
  • 画面スリープ停止
    • sudo raspi-config
    • 2 Display Options
    • D4 Screen Blanking
    • No
  • mp4再生
    • sudo apt install omxplayer
    • omxplayer -o
  • 自動ログイン
    • sudo raspi-config
    • 1 System Options
    • S5 Boot / Auto Login
    • B2 Console Autologin
    • sudo reboot
  • USB自動マウント
    • mkdir usb
    • sudo vim ~/.profile
    • 以下を最後尾に追加
      • sudo mount /dev/sda1 /home/akihiro/usb
  • 起動時実行

    • sudo vim ~/.profile
    • 以下を最後尾に追加
      • bash /home/akihiro/run.sh
    • USBメモリにrun.shファイルを作成して以下を記述

      files="/home/akihiro/usb/*"
              
      while true
      do
          for filepath in $files; do
              extname="${filepath##*.}"
              if [ $extname = "jpg" ] || [ $extname = "png" ]; then
                  sudo fbi -T 1 -d /dev/fb0 -noverbose -a $filepath
                  sleep 30
                  dd if=/dev/zero of=/dev/fb0 > /dev/null 2>&1
                  sudo kill -9 $(ps aux | grep -v grep | grep fbi | awk '{print $2}')
              elif [ $extname = "mp4" ]; then
                  sudo omxplayer -o hdmi $filepath
              fi
          done
      done
    • USBメモリに画像、動画データ保存

  • sdカードの読み込み専用化

    • ROM有効化
      • sudo raspi-config nonint enable_overlayfs
      • sudo systemctl reboot
    • ROM無効化
      • sudo raspi-config nonint disable_overlayfs
      • sudo systemctl reboot