ラズパイで白黒フォトフレームを作る

目次

見た目と仕様

  • Micro-SDカードの「images」フォルダ内の写真を120秒ずつ表示
    (新しい写真をMicro-SDカードに入れる場合はUSB経由ではなくSFTP経由で入れます)
  • 2.7インチHATの左側のボタン(画面に反映されるのに7秒くらいかかる)
    • ボタン1:前の写真を表示する
    • ボタン2:次の写真を表示する
    • ボタン3:画面を90度回転する
    • ボタン3:ボタン説明を表示する
  • config.yamlで以下の設定を自由に変更
    • cycle:次の写真を自動で表示するか
    • inverted:標準で白と黒を逆にするか
    • orientation:初期の画面表示角度
    • updatefrequency:何秒ごとに写真を表示するか

必要なもの

1. Raspberry Pi の初期設定

Raspberry Pi に Raspberry Pi OS というラズパイ公式のOSを入れ、SSHの設定をします。

  1. Windowsパソコンで公式サイトからRaspberry Pi OS Liteをダウンロードし、ダウンロードが終わったらZipファイルを解凍します。
  1. Rufusなどの書き込みソフトを使い、解凍したファイルをMicroSDに入れます。書き込みが終わってもMicroSDは引き続きWindowsパソコンに刺したままにします。
  1. MicroSDをWindowsパソコンから取り出し、ラズパイに刺します。HDMI変換器とUSB変換器もラズパイに接続し、モニターとキーボードに接続します。USBポートは2つありますが、HDMIに近い方がキーボード用で、HDMIから遠い方が電源用です。電源用のケーブルを刺すと自動でラズパイが起動します。
  1. ラズパイを初めて起動すると勝手に初期インストールが開始されます。インストールが終わったらラズパイにログインします。初期ユーザー名は「pi」でパスワードは「raspberry」です。
  1. Wifi設定用のファイルを開きます。
cd /etc/wpa_supplicant
sudo nano wpa_supplicant.conf

Wifiの設定を追加して保存します。

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP
network={
    ssid="SSID"
    psk="password"
    key_mgmt=WPA-PSK
}
  1. 再起動します。
sudo reboot
  1. OSのパッケージを最新化します。Raspberry Pi Zero WHの処理速度は速くないので、そこそこ時間がかかります。
sudo apt update && sudo apt upgrade -y
  1. ラズパイに割り振られているIPアドレスを以下のコマンドで確認します。wlan0inetのピリオドで区切られた4つの番号がIPアドレスです(例:192.168.0.147)。
ifconfig
  1. Wifiのデフォルトゲートウェイを確認します。Windowsパソコンのコマンドプロンプトで以下のコマンドを実行したら分かります(例:192.168.0.1)。
ipconfig /all
  1. ズパイでIPアドレスを固定するためのファイルを開きます。
sudo nano /etc/dhcpcd.conf

一番下に以下の行を追加します。Ctrl+O、Enter、Ctrl+Xを順番に押して編集画面を閉じます。

interface wlan0
static ip_address=192.168.0.95/24
static routers=192.168.0.1
static domain_name_servers=8.8.8.8

SSHを起動します。

sudo systemctl start ssh
sudo systemctl enable ssh
sudo systemctl status ssh
  1. Windowsパソコンのコマンドプロンプトで以下のコードを実行し、piのパスワードを入力します。pi@raspberrypiと表示されたらSSH接続が正常にできています。(ラズパイが個人情報などの大切な情報を含んでる場合はログインのセキュリティを上げた方がいいですが今回は必要ないです)
ssh pi@192.168.0.95 -p 22

2. e-Paperの初期設定

  1. 以下のコマンドでラズパイの電源を切り、MicroSDカード以外の接続されているケーブルを全部抜きます。
sudo shutdown -h now
  1. e-Paper HATをGPIO(40本のピン)でラズパイに接続し、電源ケーブルを再度差し込みます。SSHでWindowsパソコンから遠隔操作するので、HDMIとキーボードはラズパイに今後繋ぐ必要ないです。電源を付けてもまだe-Paper HATに何も表示されないので安心してください。
  1. ラズパイの設定画面を開きます。十字キーとエンターで「Interface Options」>「SPI」>「Yes」を選択します。SPIが有効化されたら「Finish」で設定画面を閉じます。(ここからの手順は公式サイトのガイドを参考にしています)
sudo raspi-config
  1. ラズパイを再起動します。
sudo reboot
  1. ライブラリ「BCM2835」をインストールします。
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.60.tar.gz
tar zxvf bcm2835-1.60.tar.gz 
cd bcm2835-1.60/
sudo ./configure
sudo make
sudo make check
sudo make install
#For more details, please refer to http://www.airspayce.com/mikem/bcm2835/
  1. ライブラリ「wiringPi」をインストールします。
sudo apt-get install wiringpi
  1. ライブラリ「Python」をインストールします。
#python2
#sudo apt-get update
#sudo apt-get install python-pip python-pil python-numpy -y
#sudo pip install RPi.GPIO spidev

#python3
sudo apt-get update
sudo apt-get install python3-pip python3-pil python3-numpy -y
sudo pip3 install RPi.GPIO spidev
  1. モジュール「waveshare_epd」をインストールします。
cd ~
sudo apt-get install git -y
sudo git clone https://github.com/waveshare/e-Paper
cd e-Paper/RaspberryPi_JetsonNano/python
sudo python3 setup.py install

3. 価格表示用のソースコードを設定する

  1. 必要なライブラリをインストールします。
sudo apt-get install libopenjp2-7 libqt5gui5 python-scipy -y
sudo apt install libatlas-base-dev -y
  1. ソースコードのリポジトリをクローンします。
cd ~
git clone https://github.com/guregu321/photo_e-paper.git
  1. クローンしたソースコードのディレクトリに移動し、必要なモジュールをインストールする。
cd photo_e-paper
python3 -m pip install -r requirements.txt
  1. モジュールのPATHを通す。
export PYTHONPATH="${PYTHONPATH}:/home/pi/.local/bin"

4. 価格表示のスクリプトを実行してみる

  1. WindowsパソコンのコマンドプロンプトからSSHでラズパイに接続する。
ssh pi@192.168.0.95 -p 22
  1. 価格表示のスクリプトを実行する。(停止する場合はCtrl+C)
cd ~/photo_e-paper
python3 photo.py

※もしModuleNotFoundError: No module named 'yaml'というエラーが出た場合は、yamlをインストールしてください。

sudo python3 -m pip install pyyaml
  1. ラズパイの電源を切るときはいきなり電源ケーブルを抜くよりもシャットダウンを先にした方が安全。
sudo shutdown -h now

5. 電源コードを繋ぐだけで勝手にスクリプトを実行されるようにする

  1. 自動実行用のスクリプトファイルを作成する。
cd ~
sudo nano autorun.sh
  1. スクリプトの中身を書き、Ctrl+O、Enter、Ctrl+Xを順番に押して編集画面を閉じる。
#!/bin/bash

# "photo"という単語を含むプロセスが何個実行されているかカウントする
count=`/usr/bin/ps ax | /usr/bin/grep -v "grep" | /usr/bin/grep -c "photo"`

# もしカウント=0ならphoto.pyを起動する
if [ $count = 0 ]; then
  /usr/bin/python3 /home/pi/photo_e-paper/photo.py
fi
  1. Cronの編集画面を開く。
crontab -e
  1. 以下の行を最後に追加して1分毎に作成したスクリプトが実行されるようにする。Ctrl+O、Enter、Ctrl+Xを順番に押して編集画面を閉じる。
* * * * * /usr/bin/bash /home/pi/autorun.sh
  1. 試しに電源ケーブルを差し直し、5分以内に価格表示が更新されるか確認する。

6. 画像フォルダをSFTPで編集する。

ラズパイのMicro-SDカードをWindowsパソコンに繋げても画像フォルダを認識することができません。なので、画像一覧はSFTP経由で編集します。

  1. Windowsのどこかに「images」フォルダを作り、フォルダ中にラズパイにアップロードしたい画像を保存しておく。
  1. SFTPでラズパイに接続する前にコマンドプロンプトのカレントディレクトリを「images」があるフォルダにする。(C:\Users\guregu321\imagesであればC:\Users\guregu321をカレントディレクトリにする)
  1. SFTPでラズパイに接続する。
sftp -P 22 pi@192.168.0.95
  1. ラズパイの「images」をカレントディレクトリにする。(~/photo_e-paper/imagesであれば~/photo_e-paper/imagesをカレントディレクトリにする)
cd photo_e-paper/images
  1. 既存の画像を削除し、ローカルの「images」フォルダ内の画像をコピーする。
rm *
put -r images
  1. SFTPを切断する。
exit