小型ディスプレイ
Raspberry pi 3 用の小型ディスプレイを amazon で探してみると、以下のディスプレイが良さそうなので購入してみました。
Quimat 3.5インチ タッチスクリーン HDMIモニタTFT LCDディスプレイ
Raspberry Pi 3 2 Model B Rpi B B+ A A+
GPIOブレークアウト拡張ボード 保護ケースキット QC35C
解像度:480x320~1920x1080;物理解像度:480x320
3.5mmのステレオ音声出力
購入のポイントは、HDMI の直接接続なので、特別なドライバを通さずに、Raspberry pi の出力がそのまま表示されることでした。
また、ディスプレイを装着してもGPIO 端子が使え、ケース付きも選べます。
組み立てて、立ち上げれば、そのままディスプレイとして利用できます。
Raspberry pi の電源が十分であれば、ディスプレイ用の電源も必要なく、本体からの供給で利用できます。
ディスプレイの設定
デフォルトの設定では、解像度が高く設定されています。
3.5インチのディスプレイで、物理解像度が 480x320 しかなく、そのままでは利用しづらいので、設定を変更しました。
まず、ディスプレイの解像度を物理解像度に合わせて 480x320 に設定し、音声出力を HDMI にします。
ディスプレイの解像度の設定は、/boot/config.txt ファイルの以下の部分を変更しました。
$ sudo vi /boot/config.txt
framebuffer_width=480
framebuffer_height=320
hdmi_group=2
hdmi_mode=87
hdmi_cvt=480 320 60 1 0 0 0
hdmi_drive=2
/boot/config.txt の設定の詳細は、以下をご覧ください。
https://www.raspberrypi.org/documentation/configuration/config-txt/
以下は、設定変更したところの抜粋です。
キーワード | 内容 |
---|---|
framebuffer_width | フレームバッファの横幅(ピクセル) |
framebuffer_height | フレームバッファの高さ(ピクセル) |
hdmi_group | 0=自動検出 1=CEA テレビなど 2=DMT パソコンなど |
hdmi_mode | HDMIモード(1~86は予約済み) |
hdmi_cvt | width ディスプレイ幅(ピクセル) height ディスプレイ高さ(ピクセル) framerate フレームレート(Hz) aspect 1=4:3,2=14:9,3=16:9,4=5:4,5=16:10,6=15:9 margins 0=マージン無効 1=マージン有効 interlace 0=プログレッシブ 1=インタレース ReducedBlank 0=通常 1=ブランク削除 |
hdmi_drive | 音の出力先を指定 1:DVI 2:HDMI |
ディスプレイはテキストコンソールを主として利用したいので、CPU コア数によって表示されるラズベリーのロゴが邪魔になるため、消します。
/boot/cmdline.txt を編集して、logo.nologo を追加します。
$ sudo vi /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait logo.nologo consoleblank=0
更に、デフォルトのフォントでは、小さく見づらいので、フォントのサイズを、以下のように、8×16 や 12×24 などに変更します。
$ sudo vi /etc/default/console-setup
FONTFACE="Terminus"
FONTSIZE="12x24"
再起動してみます。
これで、見やすくはなりました。
立ち上げ後の画面や、/boot/cmdline.txt の設定を見ると、このコンソールは tty1 に割り当てられているようです。
そこで、利用しているユーザを tty のグループに入れて、
$ sudo vi /etc/group
tty:x:5:pi
/dev/tty1 に何かテキストを送ってみます。
$ echo test > /dev/tty1
すると、コンソールにログインしていなくても、ディスプレイに文字を表示することができます。
このコンソールは、ESC シーケンスが効くようなので以下のように出力すると文字に色をつけることもできます。
$ echo -e "\e[31mRed\e[m" > /dev/tty1
$ echo -e "\e[32mGreen\e[m" > /dev/tty1
$ echo -e "\e[33mYellow\e[m" > /dev/tty1
$ echo -e "\e[34mBlue\e[m" > /dev/tty1
$ echo -e "\e[35mMagenta\e[m" > /dev/tty1
$ echo -e "\e[36mCyan\e[m" > /dev/tty1
タッチパネル設定
このディスプレイには、タッチパネルも付いているようなので、タッチパネルの設定もしてみます。
まず、以下のように、SPI を ON にして、タッチパネルを有効にします。
$ sudo vi /boot/config.txt
dtparam=spi=on
dtoverlay=ads7846,penirq=25,speed=10000,penirq_pull=2,xohms=150
/usr/share/X11/xorg.conf.d/40-libinput.conf に、タッチパネルの座標変換を追加します。
ファイルの Identifier が “libinput touchscreen catchall” のところに、以下の行を追加します。
Option "TransformationMatrix" "0 -1 1 -1 0 1 0 0 1"
$ sudo vi /usr/share/X11/xorg.conf.d/40-libinput.conf
Section "InputClass"
Identifier "libinput touchscreen catchall"
MatchIsTouchscreen "on"
MatchDevicePath "/dev/input/event*"
Driver "libinput"
Option "TransformationMatrix" "0 -1 1 -1 0 1 0 0 1"
EndSection
再起動後、タッチパネルのキャリブレーションを行います。
キャリブレーションを行うソフトをインストールし、
$ sudo apt install xinput-calibrator
X-Window が立ち上がってないなら、ログインして GUI モードに変更し、
$ startx
ターミナルからキャリブレーションのソフトを起動します。
$ xinput_calibrator
付属のタッチペンなどで、赤の十字の中心を順に4箇所タッチします。
すると、キャリブレーションの結果が表示されるので、その結果を、/usr/share/X11/xorg.conf.d/99-calibration.conf に記述します。
$ sudo vi /usr/share/X11/xorg.conf.d/99-calibration.conf
(内容はサンプルです)
Section "InputClass"
Identifier "calibration"
MatchProduct "ADS7846 Touchscreen"
Option "MinX" "1775"
Option "MaxX" "61849"
Option "MinY" "3243"
Option "MaxY" "63316"
Option "SwapXY" "0" # unless it was already set to 1
Option "InvertX" "0" # unless it was already set
Option "InvertY" "0" # unless it was already set
EndSection
実際に使ってみると、タッチパネルの精度は、あまり良くない感じがします。
サウンド関係
音の出力先を HDMI にしたので、ディスプレイの端子に、スピーカ等を接続すれば、音がでます。
まず、ボリュームを確認します。
$ amixer -M
Simple mixer control 'PCM',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined
Playback channels: Mono
Limits: Playback -10239 - 400
Mono: Playback -1775 [43%] [-17.75dB] [on]
この場合、PCM なのでボリュームの変更は、以下のように % で設定します。
$ amixer set PCM 100%
Simple mixer control 'PCM',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined
Playback channels: Mono
Limits: Playback -10239 - 400
Mono: Playback 400 [100%] [4.00dB] [on]
適当な、wav ファイルを鳴らしてみます。
※注意 これらの再生は、コンソールにログインせず、ssh で Raspberry Pi にログインして実行しても、ディスプレイに接続されたスピーカから音が出ます。
$ aplay /usr/share/sounds/alsa/Front_Center.wav
MP3 ファイルを再生するには、MP3 再生ソフトをインストールしてから鳴らします。
$ sudo apt install mpg321
$ mpg321 /usr/share/scratch/Media/Sounds/Vocals/Oooo-badada.mp3
ネットラジオを鳴らしたい場合も、再生ソフトをインストールしてから行います。
$ sudo apt install mplayer
$ mplayer -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=1656313
ネットラジオの URL は、例えば、http://shoutcast.com/ などから探します。
以下のようなファイルを用意して、実行すれば、NHK の Podcast から最新のニュースをダウンロードして再生することもできます。
#!/bin/sh
cd /run/shm
p=`wget -O - -q https://www.nhk.or.jp/r-news/podcast/nhkradionews.xml | grep enclosure | cut -d' ' -f 2 | cut -d'"' -f2 | head -1`
echo ${p}
wget -q -O news.mp3 ${p}
mpg321 news.mp3
YouTube の再生は、ブラウザでのオンラインではコマ落ちするようなので、YouTube のダウンロードツールをインストールし、一旦、ダウンロードしてから再生します。
ダウンロードしたYouTube のファイルは、omxplayer で再生します。
omxplayer は、コンソールにログインしてなくても、X-Window を立ち上げてなくても、HDMI に出力してくれるので、ssh などからリモートで再生することができます。
$ sudo apt install youtube-dl
$ youtube-dl https://www.youtube.com/YouTubeのURL
$ omxplayer ダウンロードしたファイル名
画像表示
ディスプレイに画像を表示するには、以下の fbi コマンドを利用します。
$ sudo apt install fbi
このコマンドは、管理者権限で実行する必要があります。
以下の例では、/dev/tty1 (ディスプレイ)に、全画面表示で、説明なしに、image.png を表示します。
$ sudo fbi -T 1 -a -noverbose image.png
しかしながら、管理者権限で実行するのに、sudo コマンドを毎回利用するのは不便でもあります。
そこで、管理者以外でも管理者権限で fbi コマンドを実行できるように、fbi コマンドに s フラグを付けます。
以下の様に、fbi コマンドのある場所を調べ、user に s フラグを付け、ls コマンドで確認します。
$ which fbi
$ sudo chmod u+s /usr/bin/fbi
$ ls -l /usr/bin/fbi
-rwsr-xr-x 1 root root 94432 Oct 21 2014 /usr/bin/fbi
このように設定すると、管理者以外でも、sudo コマンドなしに実行できます。
$ fbi -T 1 -a -noverbose image.png
画像表示を消すには、プロセスを kill します。
$ pkill fbi
コマンドを実行すると、/dev/tty1 の所有者、グループが変更されるので注意してください。
$ ls -l /dev/tty1
crw--w---- 1 root tty 4, 1 Nov 21 08:57 /dev/tty1
$ fbi -T 1 -a -noverbose image.png
$ ls -l /dev/tty1
crw--w---- 1 pi pi 4, 1 Nov 21 08:57 /dev/tty1