Raspberry Pi Zero 2を使ってみる その3(1.3inch LCD HAT、至近距離での撮影)

はじめに

 今回は要望がありまして、Raspberry Piで利用できるWaveshareの1.3inch LCD HATにカメラの映像を映してみました。

 至近距離で撮影するとのことだったので試してみたのですが、レンズと対象がぎりぎり接触しないぐらいの距離でも映っていました。また、1.3inchという小さいディスプレイでも表示されていました。

▼以前の記事はこちら

Raspberry Pi Zeroの筐体を設計する(3Dプリンター)

はじめに  今回はRaspberry Pi Zeroの筐体を、3Dプリンターで作ってみました。  冬になって部屋が寒くなってきた影響か、ABSフィラメントで出力するとプレートから剥が…

Raspberry Pi Zero 2を使ってみる その1(Xfce、Vivaldi、Node-RED)

はじめに  今回はRaspberry Pi Zero 2を使ってみました。Maker Faire Tokyo 2023にて会場で販売されていたので購入してみました。  一度Raspberry Pi OSのデスクトップ…

使用する部品

 SSH接続でコマンドを実行できるので、外付けディスプレイやキーボード、マウスが無くてもセットアップできました。もちろん、ディスプレイに接続してGUIで操作することもできます。

▼SSH接続については、以下の記事をご覧ください。

有線キーボード無しでRaspberry Pi Zeroのセットアップをする(SSH接続、Raspberry Pi Imager)

はじめに  今回は手元に有線キーボードが無かったので、SSH接続でRaspberry Pi Zeroのセットアップをしてみました。  ネット上にあったやり方だと少しずつ異なっていた…

 Raspberry Pi Zero 2 Wを使用するのですが、まだ在庫が少ない印象です。

▼この記事を執筆している10月頃の時点では、Raspberry Pi Shopに在庫があるようでした。

https://akizukidenshi.com/catalog/g/g117398

https://raspberry-pi.ksyic.com/main/index/pdp.id/849,850,851/pdp.open/849

▼Amazonは少し高額ですが、在庫はあります。

▼OSを書き込むためのSDカードも必要です。

 Zero 2 Wは結構熱を持つので、動作が不安定になるようであれば冷却する必要があります。

▼普段はこちらのヒートシンクをつけています。

▼カメラは以前使用したことがあるものを使用しました。

https://www.digikey.jp/ja/products/detail/seeed-technology-co-ltd/114992264/12396940

▼こちらと同じようなタイプです。

▼こちらの記事でも使用しています。

Raspberry Pi Zero 2を使ってみる その2(カメラ、Thonny、Node-RED)

はじめに  今回はRaspberry Pi Zero 2にカメラを取り付けてみました。  少し古い書籍を読みながら試していたときは、コマンドを入力してもエラーが出て撮影できないこと…

 今回のメインはWaveshareの1.3inch LCD HATを使用することです。

▼こちらのディスプレイです。

 HATは積み重ねるようにして取り付けるので、ヒートシンクを取り付ける際は注意が必要です。

▼ピンソケット+ピンヘッダでちょうどいいぐらいの高さでした。

 なお、今回は以前使っていたものとは別のRaspberry Pi Zero 2 Wを使っています。

▼必要なピンだけはんだ付けしておきました。

OSのバージョンに関する問題

 今回はディスプレイとカメラのセットアップを行うのに、3つのOSを試しました。

 OSのバージョンや、32-bitか64-bitで、使用できる機能が異なっていました。どのバージョンにも対応できるというわけではないようです。

 1.3inchの ディスプレイにデスクトップ画面を表示したいのであれば、この時点でBullseyeの32-bitを選択してください。

▼Bookwormの64-bitと32-bit、Bullseyeの32-bitを試しました。

▼デバイスはRaspberry Pi Zero 2 Wです。

 デスクトップ画面を表示しないのであれば、Bookwormでも使えました。ソフトウェア側で対応していない部分があるようです。

▼以下のページを参考にディスプレイのセットアップを行ったのですが、OSのバージョンに関する記述がいくつかありました。

https://www.waveshare.com/wiki/1.3inch_LCD_HAT

https://www.waveshare.com/wiki/1.3inch_LCD_HAT

▼ディスプレイ用のドライバのREADMEにも、現状では32-bitのみで動作すると書かれていました。

https://github.com/juj/fbcp-ili9341?tab=readme-ov-file#raspbian--32-bit-only

▼64-bitでの問題について、以下のページで報告されていました。

https://github.com/juj/fbcp-ili9341/issues/43

1.3inch LCD HATのセットアップ

SPIの有効化

 Waveshareのページを参考に、設定を行いました。

▼こちらのページです。

https://www.waveshare.com/wiki/1.3inch_LCD_HAT

 raspi-configでSPIを有効にしておきます。

sudo raspi-config

▼Interface Optionsを選択します。

▼SPIの選択肢を選んで、有効化します。

 sudo rebootで再起動してから、この後のコマンドを実行していきます。

Bookwormの場合

 ライブラリをインストールするのですが、Bookwormだとlgpioだけ利用できます。

▼フォルダを作成して、そこにインストールしました。

cd ~
mkdir lgpio
cd lgpio
wget https://github.com/joan2937/lg/archive/master.zip
unzip master.zip
cd lg-master
sudo make install 

 サンプルをダウンロードするのですが、7z x 1.3inch_LCD_HAT_code.7z -r -o./1.3inch_LCD_HAT_codeだと実行できなかったので変更しています。

cd ~
mkdir waveshare
cd waveshare
wget https://files.waveshare.com/upload/b/bd/1.3inch_LCD_HAT_code.7z
7z x 1.3inch_LCD_HAT_code.7z
sudo chmod 777 -R 1.3inch_LCD_HAT_code
cd 1.3inch_LCD_HAT_code

 Pythonのデモプログラムを実行してみました。

cd python
python main.py
python key_demo.py

▼main.pyを実行すると、文字や図形が表示されました。

▼少し時間が経って、画像が表示されました。小さいディスプレイですが、ここまできれいに表示されるんですね。

▼key_demo.pyを実行すると、ジョイスティックとボタンの入力に対応するものが表示されました。

▼ジョイスティックやボタンを入力すると、対応したものが出力されました。

Bullseyeの場合

 Bullseyeでは利用できるライブラリが多いので、インストールするものも増えています。

 waveshareフォルダを作成して、必要なものはそこにダウンロードしました。

cd ~
mkdir waveshare
cd waveshare

 BCM2835をインストールします。

wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz
tar zxvf bcm2835-1.71.tar.gz 
cd bcm2835-1.71/
sudo ./configure && sudo make && sudo make check && sudo make install

 WiringPiをインストールします。最後のgpio -vを実行すると、バージョンが表示されていました。

cd ~/waveshare
git clone https://github.com/WiringPi/WiringPi
cd WiringPi
./build
gpio -v

 lgpioをインストールします。

cd ~/waveshare
mkdir lgpio
cd lgpio
wget https://github.com/joan2937/lg/archive/master.zip
unzip master.zip
cd lg-master
sudo make install 

 Pythonとパッケージをインストールします。

sudo apt-get update
sudo apt-get install python3-pip
sudo apt-get install python3-pil
sudo apt-get install python3-numpy
sudo pip3 install spidev

 サンプルをダウンロードするのですが、Bookwormのときと同様に、7z x 1.3inch_LCD_HAT_code.7z -r -o./1.3inch_LCD_HAT_codeだと実行できなかったので変更しています。

cd ~/waveshare
wget https://files.waveshare.com/upload/b/bd/1.3inch_LCD_HAT_code.7z
7z x 1.3inch_LCD_HAT_code.7z
sudo chmod 777 -R 1.3inch_LCD_HAT_code
cd 1.3inch_LCD_HAT_code

 この時点で以下のコマンドを実行し、Pythonのデモプログラムを実行できることを確認しました。

cd python
sudo python main.py
sudo python key_demo.py

 ここからはデスクトップ画面をディスプレイに表示するための設定を行います。

 まずはFBCPドライバをインストールします。

cd ~/waveshare
sudo apt-get install cmake -y
sudo apt-get install p7zip-full -y
wget https://files.waveshare.com/upload/f/f9/Waveshare_fbcp.7z
7z x Waveshare_fbcp.7z
mkdir build
cd build

 1.3inch_LCD_HATに対応したコマンドを実行しました。

cmake -DSPI_BUS_CLOCK_DIVISOR=20 -DWAVESHARE_1INCH3_LCD_HAT=ON -DBACKLIGHT_CONTROL=ON -DSTATISTICS=0 ..

 他にも必要なものはaptでインストールして、コマンドを実行しました。

sudo apt install libraspberrypi-dev raspberrypi-kernel-headers
make -j
sudo ./fbcp

▼実行後、ターミナルにいろいろ表示されました。

▼ディスプレイも表示されました。このままだとさすがに文字やアイコンが小さいです。

 ここからはRaspberry Piが起動したときに画面が表示されるようにしたり、ディスプレイの設定を行ったりします。

 以下のコマンドを実行し、/etc/rc.localファイルのexit 0の前にfbcp&を追加しました。

sudo cp ~/waveshare/build/fbcp /usr/local/bin/fbcp
sudo nano /etc/rc.local

 次にドキュメントだと /boot/config.txtを編集するように書かれていたのですが、OSによっては場所が変わっているようです。その場合、ファイルにアクセスすると/boot/firmware/config.txtに移動していると書かれていました。

 Bullseyeでは以下のコマンドで/boot/config.txtを編集しました。

sudo nano /boot/config.txt

 以下の5行を追加しました。

hdmi_force_hotplug=1
hdmi_cvt=300 300 60 1 0 0 0
hdmi_group=2
hdmi_mode=87
display_rotate=0

 その後、再起動してみました。

sudo reboot

▼起動時にディスプレイが表示されました!アイコンのサイズもいい感じです。モバイルモニターにも画面が表示されました。

 起動時にアナログスティックをマウスのカーソルとして利用するには、以下のコマンドでlocal.desktopファイルを作成する必要があります。必要なものをダウンロードして実行しました。

cd ~/waveshare
sudo apt-get install python3-xlib
sudo pip3 install PyMouse
sudo pip3 install unix
sudo pip3 install PyUserInput
wget http://www.waveshare.net/w/upload/d/d3/Mouse.7z
7z x Mouse.7z
sudo python3 mouse.py
cd ~/.config
mkdir autostart
cd autostart/
sudo nano local.desktop

 以下の3行を書き込みました。

[Desktop Entry]
Type=Application
Exec=python3 /home/pi/waveshare/mouse.py

▼起動時にマウスのカーソルを操作することができました!

カメラの映像をディスプレイに映してみる

 カメラの映像をディスプレイに表示してみました。今回はレンズを近接撮影用に調整しています。レンズを回すと調整できます。

▼暗視用の赤外線投光器を取り付けた状態での撮影の様子。意外とレンズが近くても撮影できていました。

 カメラのフラットケーブルを映したときは、レンズがフラットケーブルに反射して映っているようでした。

▼基板のパターンがはっきりと映っていました。

▼暗視用の赤外線投光器を取り外した状態での撮影の様子。さすがに暗いとほとんど映りません。

最後に

 至近距離でも意外とはっきり撮影することができました。ちょっとした拡大鏡みたいな感じでしょうか。

 この後撮影した画像を確認すると、画像が歪んでいることが分かりました。今まで歪みについて意識したことが無かったのですが、至近距離だとその影響が現れやすいのかもしれません。なお、歪んでいた画像はPythonのOpenCVで補正することはできました。

 画像さえ表示できれば、ディスプレイが小さいのでデスクトップ画面を表示する必要はあまりないのかな?と思います。後は開発しやすいかどうかですね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です