EQQ.jp

Index


小型ディスプレイ

 

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 display front

Raspberry pi display back

 

組み立てて、立ち上げれば、そのままディスプレイとして利用できます。
Raspberry pi の電源が十分であれば、ディスプレイ用の電源も必要なく、本体からの供給で利用できます。

 

Raspberry pi display startup

 

 

ディスプレイの設定

デフォルトの設定では、解像度が高く設定されています。

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"

 

再起動してみます。

 

Raspberry pi display boot

 

これで、見やすくはなりました。

立ち上げ後の画面や、/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

 

Raspberry pi display console

 

 

タッチパネル設定

このディスプレイには、タッチパネルも付いているようなので、タッチパネルの設定もしてみます。

まず、以下のように、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

Raspberry pi display startx

 

ターミナルからキャリブレーションのソフトを起動します。

$ xinput_calibrator

Raspberry pi display 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