
008|ミニ正方形モニターで映像をループする| #RaspbrryPi #DIYとか工作とか #展示技術講座
こんにちは、普段は美術館などで展覧会の技術的な仕事をしている宮路です。色々な大学でちょっとした講座なんかもやってます。講座用の教材として、なおかつDIYerにも使えるちょっとした記事を書いています。
本記事を何かのワークショップや授業でお使いになりたい方はご自由に(出典、URLの共有お願いいたします)。
概要
今回もRaspberry Pi ネタになります。誰かのためのRaspberry Pi 勉強用に簡単なプロジェクトを記事にしてみまた。美術系大学で利用者の多いmacのTerminal(ターミナル)を使っていきます。Windowsからの場合はWindows TerminalやPowerShellが似てると思われますが、細かく違うところはあるかもです。
Pimoroniというイギリスのメーカーがだしている720 ×720pixelの小型モニターで映像をループさせます。こちらのモニターは色深度が6bitなので綺麗なグラデーションなどはでません。またスピーカーはありません。とにかく小さいので、ちょっとした作品やインスタレーションに映像を組み込みたい時に便利ではあります。
色深度や解像度についてわからないかたは以下の記事をご覧ください。
こちらのプロジェクトは作家さんからの作品修理依頼があったことを発端にしています。作家さんが自分で設定して納品した作品が壊れてしまったそうです。
そちらの相談を受けた際に、次に壊れた時のための再設定のマニュアルを一般に公開して良いかと聞いてみました。快く承諾を得たので、こうして記事として公開できる流れになりました。
「起動時の自動化プログラム」と「電源ブチ切り運用化」の部分は他のプロジェクトの参考にもなるはずです。まずはこのプロジェクトを真似することからRaspberry Piに慣れてみてはいかがでしょうか?
今回は全て外部PCからSSHという接続方法をつかってRaspberry Piをセッティングします。購入物も最小限で済むはずです。
コンピューターに関する基礎知識であるディレクトリとは何か?やファイルシステムの説明は省略します。なんとなく分からなくても今回は大丈夫だと思いますが、気になる人は以下の記事がオススメです。
準備物
準備物は自分の持っているケーブルなどに合わせて調整してください。
Raspberry Pi Zero 2 WH(ピンヘッダーつき)
今回はGPIOピンという黒い部分に沢山ついているピンを使います。ピンがついているものを購入するか、ピンを別で買って、自分でハンダづけする必要があります。Raspberry Pi 3~5の場合は画像のように大きくはみ出るので今回はZero 2を利用します。

Pimoroni HyperPixel 4.0 Square -PIM475 (タッチ非対応)
USB micro B to USB A メス(Zeroシリーズ用)
データを書き込むUSBメモリを接続するのに使います。Raspberry Pi Zero 2を使っていくとインターフェースがほぼ無いので必須アイテムとなります。あとで紹介するハブを買う場合は必要なくなります。
電源
micro B 2.0の端子で給電できれば何を使っても問題ないです。スイッチ付きのケーブルもあるので紹介しておきます。
1番のPHプラスが回せるドライバー
ラチェットドライバー、安くておすすめです。こちらの商品はなぜかPH1~3まで回せます。加えてヒートンも回せます。
USBメモリ
小さいので他のRaspberry Piシリーズと使う時も便利です。
micro SDカード
OSをいれます。
Pi Imager (アプリ)
以下のリンクからダウンロードできます。
https://www.raspberrypi.com/software/
WIFI環境
LANケーブルなどの購入物を減らすためにWifi環境が必要です。
映像データ
解像度720×720pixelの動画を用意してください。映像コーデックはh264を推奨します。h265は再生できません。スピーカーはないので音声なしを想定しています。mpvというプレーヤーを使うのでプレーヤーのバージョンによって流せるコーデックは違うかもしれません。720×720の解像度なのでビットレートなどは大きくならないはずです。
あると良いかも
以下のものはwifi環境が不安定でSSH接続できない時などに使えます。ただし、アップデートやアプリのインストールのためにインターネットは必要です。LANポートからインターネット接続をしながらキーボード操作することを想定しています。
LANケーブル経由でインターネットに繋ぎながらSSHもLAN経由で接続することは可能です。ただし説明しなければいけないことが多くなってしまうので、ここではこの方法は説明しません。
外部モニター
所持しているモニターならなんでも良いと思います。
一応、安めのでHDMIポートがありRaspberry Piに今後使えそうなタッチ機能のあるもののリンクを貼っておきます。
mini HDMI to HDMI
モニター側の入力ポートがフルサイズHDMIでない場合は状況にあわせて変更してください(Raspberry Pi Zero 2 wはmini HDMIです)。
USB無線キーボード
type-AのUSBレシーバーがついているところがポイントです(bluetooth接続をキーボドなしでは設定できないのです)。USB A to USB micro BケーブルついてくるのでRaspberry Piへの給電にも使えます。
micro BのUSBハブ
キーボードのレシーバーとUSBメモリを同時に差し込むのに必要です。LANケーブルでインターネットに接続します。この手の商品は他に需要がないので少なくなってきています。Amazonで「Raspberry Pi Zeroに使えた」というレビューのある商品はこちらだけでした(自分で買って使ったことはないです)。
Pimoroniがベストケーブルとして販売しているケーブル。ハブ側の形は似ているし同じ商品だと良いですね。独自のMACアドレスをもっているそうです。
LANケーブル
インターネットに接続するのに必要です。wifiルーターの場所やイーサネットコンセントの場所と作業場所の距離に合わせて適したものを購入してください。
ステップ1|OSのインストール
Pi Imagerを使って、Raspberry Pi OS Lite 64bitをSDカードに書き込みます。

Raspberry Pi OS (other)の中にあります。

Raspberry Pi OS Lite (64-bit)を選択します。
今回はSSHで操作するためグラフィカルなインターフェースのないOS Liteを利用します。GUIとCUIという言葉を覚えてみましょう。今回はCUIですね。
OSを選んで、書き出し先のSDカードを選択して「NEXT」をクリックするとOSをカスタマイズするか聞かれます。

ここで「EDIT SETTINGS」をクリックしてください。以下の情報を設定できます。
ホスト名:(任意の名前)
ユーザー名:(任意の名前)
パスワード:(任意のパスワード)
SSID:(使用するwifiの名前)
Password:(使用するwifiのパスワード)
(Raspberry Pi Zeroシリーズは2.4GHzのwifiにしか対応してないので注意してください)

今回は以下のように設定してみます。
ホスト名:pi
ユーザー名:name
パスワード:pass
つぎに、上の3つのタブのSERVICEをクリックします。

「Enable SSH」をクリックして「SAVE」をクリックします。公開鍵と秘密鍵を使う方法もあります。便利ですが少し難しくなるので今回はパスワードを使います。

カスタムしたセッティングでOSを書き出したいか?と聞かれるので「YES」を押します。

SDカードの中身消えるけど大丈夫?と聞かれますが「YES」をクリックします。
ステップ2|組み立て(物理)
HyperPixel とRaspberry Pi Zer 2 wを組み立てていきます。

箱の右側にあるものがHyperPixelの同梱品です。

六角スペーサーのネジをHyperPixelにつけます。手回しで十分です。ヘッダーピンの延長もつけます。HyperPixelが繊細で壊れやすいのでRaspberry Pi側に先につけました。

HyperPixelとRaspberry Piを接続する時はゆっくりと少しずつ押し込んでください。僕は柔らかい平面にモニターを下向きにペタッとくっつけて、上からRaspberry Piをゆっくりグリグリしながら押し込みました。モニター側を手でもつと変に曲げてしまうかもです。
完成すると、上の画像のように少しだけmicroSDカードがはみ出ます。ですが、非常に小さくていい感じです!
ステップ3|SSHで接続する
遠隔でRaspberry Piを操作するにはSSHの他にもVNCといったGUIを操作できる方法もあります。今回は説明を省略しますが、気になる人は調べてみてください。SSH接続はmacのTerminal(ターミナル)というアプリを使います。

Terminalの左側の名前やディレクトリ(居場所的な?)の部分をプロンプト、右側のメッセージをコマンドと言います。下の例でいうと「ls」はコマンドで「_miyaji@mba ~ %」はプロンプトです。
_miyaji@MBA ~ %
ユーザー名@ホスト名 ディレクトリ 権限レベル
_miyaji@MBA ~ % ls
プロンプト コマンド
OSの入ったSDカードをRaspberry Piに刺してください。カスタムセッティングで設定したwifiにmacを接続してください。macとRaspberry Piが同じwifiに接続していることが重要です。よくご確認ください。
Raspberry Piを電源にさし起動させます。この時点でHyperPixelの画面には何も映りません。1回目の起動はSSH key作成などで再起動が入ります。1~2分まって起動しきったところで、ターミナルから以下のコマンドでRaspberry PiにSSH接続します。
ssh name@pi.local
「neme」はユーザー名、「pi」はホスト名です。自分で決めた名前に変更する必要があります。接続時に色々聞かれますが「yes」を入力します。

「yes」を入力して「enterキー」を押すとpasswordを聞かれます。この時、打ち込んだキーや何文字目を打ってるかがわからないので慎重に入力してください。最後に「enterキー」を押してください。

以下のようにプロンプト(左側のname@piの部分)が変われば成功です。

mac側がSSH接続した相手を記憶しています。2台目や2回目以降のOSの書き出しはユーザー名とホスト名の両方を変えるのが望ましいです。同じ名前で複数台のraspberry piを接続すると不具合がおきます。もし不具合が起きた場合はSSH接続する前の状態でterminalで以下のコマンドを実行してください。
nano ~/.ssh/known_hosts
中にある情報を全て消してください。
ステップ4|システムのアップデート
以下のコマンドを入力して、現在システムが利用できるパッケージリストを所得します。
sudo apt update
次に、以下のコマンドを実行して、所得した全てのパッケージを最新のものに更新します。ネット環境にもよりますが数分かかります。
sudo apt upgrade -y
次に、映像再生用のプレーヤー「mpv」をインストールします。こちらも数分かかります。
sudo apt-get install mpv -y
ステップ5|ファームウェア設定の編集
/boot/firmware/config.txtを編集して、HyperPixel 4.0 Square用のディスプレイドライバを設定します。
sudo nano /boot/firmware/config.txt
実行してでてきたファイルの中に以下の一文を追加します。
dtoverlay=vc4-kms-dpi-hyperpixel4sq
追加場所に関しては以下をご覧ください。

「cntrol x」で編集を終了します。「保存しますか?」ときかれるので「y」を押します。最後にファイル名を変えずに「enterキー」を押してファームウェア設定は終了です。最後に以下のコマンドでRaspberry Piを再起動してみましょう。
sudo reboot
再起動後にHyperPixelの画面が映れば成功です。
ステップ6|映像ファイルの移動
映像データの入ったUSBメモリをRaspberry Piに差し込んでください。映像ファイルの名前は任意ですが、コマンドを作る時に正確に名前を打ち込むことが必要です。今回は「name.mp4」というファイル名で説明します。
以下のコマンドを使い、必要なディレクトリを作ります。
sudo mkdir -p /mnt/usb
mkdir -p ~/Videos
USBを認識しているか以下のコマンドで確認します。
sudo fdisk -l
コマンドを実行するとたくさんのDiskが出てきますが、/dev/sdaというのがUSBです。サイズなどから確認できると思います。抜き差しを繰り返すとsdaの部分がsdbになったりするので確認してください。

次に、以下のコマンドで/dev/sda をマウントします。sda1と1を追加した理由は1番目のパーテーションという意味です。
sudo mount /dev/sda1 /mnt/usb
マウントできたら、USBのディレクトリに移動してみましょう。なんとなく分かってきた人もいるかもしれませんが、コマンドの最初のメッセージに対して、色々な情報を後ろに足しながら実行していきます。cdはチェンジ・ディレクトリの略で/mnt/usbに移動します。
cd /mnt/usb
移動できたらプロンプトの部分が以下のように変わっているはずです。

移動できたら、そのディレクトリにあるファイルをみてみましょう。ls というリスト・セグメンツの略であるコマンドを使います。
ls
コマンドを実行すると以下のような情報がでました。name.mp4があります。/mnt/usb に/dev/sda1 がマウントされている証拠です。

lsとcdは一番基本のコマンドです。以下のコマンドでname.mp4をVideosの中にコピーします。
cp /mnt/usb/name.mp4 ~/Videos/
以下のコマンドでホームディレクトリという最初の場所に戻ります。
cd ~/
USBをアンマウントします(なんでunmountじゃないんだろう?)。
sudo umount /mnt/usb
これで、物理的にUSBを本体から抜くことができます。抜いた後にファイルが本体内に残っているか確認してみます。以下のように「cd」コマンドでホームディレクトリからVideosに移動します。「ls」で中にあるファイルをみてみると「name.mp4」がありました。成功です。

ステップ7|映像を自動再生するための設定
まずは以下のコマンドで映像が再生されるか確認してみましょう。「/home/ユーザー名/Videos/ファイル名.拡張子」の部分は例えです。自分のユーザー名ファイル名に合わせて書き換えてください。
mpv --no-osd-bar --no-audio --loop /home/name/Videos/name.mp4
name.mp4がループ再生されるはずです。データによるかもしれませんが、ループの切れ目もほとんどなく黒いフレームなども入りません。
バナナをまわしました。 pic.twitter.com/8DgONpxbra
— ミヤジ (@_miyaji) October 17, 2024
記事もだいぶ長くなってきたので、ここからは細かい説明は省略します。気になる人はそれぞれのワードで検索してみてください。
それでは、起動時に映像が自動でループ再生されるプログラムを作成します。start.shという名前でshell scriptを作ります。shell scriptは複数のコマンドをまとめて自動で実行するためのファイルです。start.shというファイル名は違う名前でも大丈夫ですが、違う名前を使用した場合は後につくるserviceファイルなどの中身も書き換える必要があります。
nano ~/start.sh
上記のコマンドを実行するとTerminalの画面が以下のようになります。

この画面はファイルの中身の編集モードですので、以下のスクリプトを書き込んでください。ここでも「/home/ユーザー名/Videos/ファイル名.拡張子」の部分は各自のプロジェクトに合わせて書き換えてください。
#!/bin/bash
mpv --no-osd-bar --no-audio --loop /home/name/Videos/name.mp4
「control x」で終了し、保存するか聞かれるので「y」を押してファイル名を変更せずに「enterキー」を押します。次に「start.sh」を実行可能にします。違う名前のファイルにした場合は書き換えてください。
chmod +x ~/start.sh
.shファイルを自動実行するために、serviceを作成します。以下のコマンドで新しいserviceファイルを作成します。ファイル名は任意ですがstart.serviceとして話を進めていきます。
sudo nano /etc/systemd/system/start.service
中身は以下の内容にして編集してください。ファイル名やユーザー名は各自のプロジェクトに合わせて書き直してください。
[Unit]
Description=Play Video on Boot
After=network.target
[Service]
ExecStart=/home/name/start.sh
User=name
Restart=always
RestartSec=60
[Install]
WantedBy=multi-user.target
ExecStart=/home/name/start.sh
User=name
ExecStart=/home/ユーザー名/ファイル名.sh
User=ユーザー名
[Service]の中の1行目と2行目の部分が必要に合わせて書き換える部分です。
きちんと保存したら、以下のコマンドでサービスをブート時に自動起動させるように有効化します。
sudo systemctl enable start.service
このあと、まだrebootしないでください。続けてステップ8を行なってください。
ステップ8|Overlay File Systemを有効化
Overlay File System を有効にするとシャットダウンせずに電源からRaspberry Piを落とすことができます。ROM化という人もいます。詳しい説明は省き、手順のみ説明します。
sudo raspi-config
上記のコマンドを実行すると以下の画面に移動します。ここからは矢印キーとエンターしかつかいません。

4番に移動して「enterキー」をおします。

1つしか選択できませんが、P2を選択して「enterキー」を押します。

overlay file systemを有効にしたいか聞かれるので「Yes」を選択して実行します。ここからの処理は数分かかります。終了すると以下の画面がでます。

ここで「Ok」すると「ブートパーティションを書き込み保護にしますか?」ときかれます。これも「Yes」を選択してください。

ここまでできたら、raspi-configを終了してrebootします。rebootした後に勝手に映像がループ再生されたら成功です。
おわりに
今回、Overlay File System がどれくらい強力かを実験してみました。Arduinoを使って10000回の電源ブチ切りテストを行いましたが、全く問題ありませんでした。その後に3日間の連続再生もできました。

静電気などで物理的にSDカードやRaspberry PiかHyperPixelが壊れる可能性もありますが、システムとしてはかなり強固と言えます。
今回のプロジェクトをまるっとマネすることで少しでもRaspberry Piに慣れてもらえれば幸いです。Raspberry Piでできることは多すぎるので、また時間ができたら記事を書きたいです。
次回はトリマーの記事でも書こうかな
いいなと思ったら応援しよう!
