Raspberry Pi 3 + 公式7インチタッチスクリーンでフォトフレーム制作

Image credit: Tomokatsu Yukishita

はじめに

以前、Raspberry Pi でフォトフレームを作りました。 今回は Raspberry Pi 3 と 7インチタッチスクリーンが余っていたので、こちらでもフォトフレームを作ってみようと思います。

用意するもの

Raspberry Pi 3

Raspberry Pi 3 Model B シングルボードコンピュータ
thumbnail
Raspberry Pi(ラズベリー パイ) 3 Model B。

Raspberry Pi 3 Model Bは、Raspberry Pi Foundation(ラズベリーパイ財団)のシングルボードコンピュータです。 本バージョンでは、1.2GHz、64ビットのクアッドコアARMプロセッサにアップグレードし、802.11nのワイヤレスLAN、Bluetooth 4.1、Bluetooth Low Energyに対応させています。

公式タッチスクリーン

Raspberry Pi 公式 7" タッチスクリーン LCD Element14
thumbnail
・マルチタッチ静電容量型 - 最大で指10本のタッチをサポート
・7インチディスプレイ
・800 x 480ピクセルの解像度 @ 60 フレーム/秒(fps)
・24ビットRGBカラー
・GPIOジャンパ - 付属のジャンパワイヤを使用してPiからディスプレイボードに電力を供給

https://www.amazon.co.jp/Raspberry-Pi-タッチスクリーン-LCD-Element14/dp/B01LC7U4XW?crid=H9B54FE4LVXV&keywords=raspberry+pi+7-inch+touch+screen+display&qid=1652495973&sprefix=raspberry+pi+touch+screen,aps,179&sr=8-5&linkCode=sl1&tag=snowunderco07-22&linkId=1ae04ad79661bfdd07526bcfb6b7673a&language=ja_JP&ref_=as_li_ss_tl

公式タッチスクリーン用ケース

Raspberry Pi & 7インチ LCDタッチスクリーン 拡張ボードケース ABS樹脂 (RSコンポーネンツ製) (黒)
thumbnail
RS Proのタッチスクリーンケースは、Raspberry PiボードとRaspberry Pi 7インチLCDタッチスクリーンを収納するように設計されています。 ボードとディスプレイを保護するこのケースには、黒色、白色、クリアのタイプが用意されています。 Raspberry Pi 3 Model B、Pi 2 Model B、B+を取り付けることが可能です。また、このケースはRaspberry Pi本体を後部に収納できるので、持ち運ぶ用途にピッタリです。
https://www.amazon.co.jp/Raspberry-Pi-7インチ-LCDタッチスクリーン-拡張ボードケース-ABS樹脂-(RSコンポーネンツ製)-黒/dp/B01N6786IE?__mk_ja_JP=カタカナ&crid=3UTDPBKHDO9B7&keywords=raspberry%2Bpi%2B7インチタッチスクリーン用ケース%2Bブラック&qid=1652496058&sprefix=raspberry%2Bpi%2Bscreen%2Bencrosue,aps,553&sr=8-11&th=1&linkCode=sl1&tag=snowunderco07-22&linkId=ab44bb9aa59af576356d1a13b71285a5&language=ja_JP&ref_=as_li_ss_tl

ディスプレイの接続

公式のマニュアルを参考にして組み立てます。

Raspberry Pi Touch Display
thumbnail
The Raspberry Pi Touch Display is an LCD display that connects to the Raspberry Pi using the DSI connector. You can use both the Touch Display and an HDMI display output at the same time.
https://www.raspberrypi.com/documentation/accessories/display.html

リボンケーブルと電源をGPIOに接続します。

The following image shows how to attach the Raspberry Pi to the back of the Touch Display (if required), and how to connect both the data (ribbon cable) and power (red/black wires) from the Raspberry Pi to the display. If you are not attaching the Raspberry Pi to the back of the display, take extra care when attaching the ribbon cable to ensure it is the correct way round. The black and red power wires should be attached to the GND and 5v pins respectively.

(Google翻訳)

次の画像は、Raspberry Piを背面ディスプレイに接続する方法(必要な場合)と、データ(リボンケーブル)と電源(赤/黒のワイヤー)の両方をRaspberryPiに接続する方法を示しています。 Raspberry Piをディスプレイの背面に取り付けていない場合は、リボンケーブルを取り付けるときに特に注意して、正しい方向に配線されていることを確認してください。黒と赤の電源線は、それぞれGNDピンと5vピンに接続する必要があります。

引用元 : https://www.raspberrypi.com/documentation/accessories/display.html

公式ディスプレイ用の設定変更

標準だと180度反転してしまっているので、これも公式のドキュメントを参考にして反転させます。

KMS/FKMSモードとレガシーモードの2通りあるようなので注意してください。 RaspberryPi4 だと KMSモードがデフォルトだそうです。

pi@raspi3-photo:~ $ sudo vi /boot/config.txt 
lcd_rotate=2

スライドショー用のPythonプログラム

これは以前製作した自作Pythonスクリプトを使います。

そのままだと眩しい

ここまで実施すればフォトフレームの出来上がり・・・なのですが、なにぶん画面が眩しい。 ここは輝度調整したいところです。

公式7インチディスプレイの輝度変更方法

公式7インチディスプレイの輝度変更方法は以下のようにすれば良いです。

root@raspi3-photo:~# echo "100" | sudo tee /sys/class/backlight/rpi_backlight/brightness

/sys/class/backlight/rpi_backlight/brightness に値を書き込んでやれば輝度変更ができます。

環境光に応じてディスプレイの輝度を変えたい

輝度変更できるようになったら、環境光に応じてディスプレイの輝度を変えたくなります。

ELEGOO 120pcs多色デュポンワイヤー、arduino用ワイヤ—ゲ—ジ28AWG オス-メス オス-オス メス –メス ブレッドボードジャンパーワイヤー
thumbnail
材質: copper-clad aluminum,PVC

長さ:約20cm / 8inch

オス端は標準0.1インチ(2.54mm)のメスソケットに挿入し、メス端は標準0.1インチ(2.54mm)のオスヘッダーに挿入するものです。

複数に接続するとき、ケーブルを分けることができます。

WINGONEER GY-30 BH1750FVIデジタル光強度センサモジュールI2Cラズベリーパイ
thumbnail
周囲の照明レベルを測定するBH1750FVIセンサー。 BH1750FVIは、キャリブレーションされたデジタル光センサーICで、入射光強度を測定し、16ビットのデジタル数に変換します。
https://www.amazon.co.jp/gp/product/B06XHKTL58?ie=UTF8&psc=1&linkCode=sl1&tag=snowunderco07-22&linkId=7b8397021a5481ccc0742ebd17a6b0f7&language=ja_JP&ref_=as_li_ss_tl

ということで購入したのが GY-30 BH1750FVI 光センサーです。 一緒にジャンパーワイヤーも購入しました。

Raspberry Pi と SPI 接続

購入した GY-30 BH1750FVI 光センサーを Raspberry Pi と SPI 接続します。 公式ドキュメントを参考に接続します。

SPI hardware
Raspberry Pi Zero, 1, 2 and 3 have three SPI controllers
https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#spi-hardware
GPIO and the 40-pin header
thumbnail
A powerful feature of the Raspberry Pi is the row of GPIO (general-purpose input/output) pins along the top edge of the board. A 40-pin GPIO header is found on all current Raspberry Pi boards, although it is unpopulated on Raspberry Pi Zero, Raspberry Pi Zero W, and Raspberry Pi Zero 2 W. The GPIO headers on all boards have a 0.1in (2.54mm) pin pitch.
https://www.raspberrypi.com/documentation/computers/os.html#gpio-and-the-40-pin-header

screen reader text
引用元: https://www.raspberrypi.com/documentation/computers/os.html#gpio-and-the-40-pin-header

接続対応表

RaspberryPiRaspberry Pi PIN番号GY-30 BH1750FV
GPIO2 (SDA)3SDA
GPIO3 (SCL)5SCL
5V Power2VCC
Ground14ADO
Ground20GND

screen reader text
接続した時の写真

光センサー(SPI)のデータ読み出し

接続した光センサーが動作するか動作確認してみます。 Pythonで書いてみます。

#!/usr/bin/python3

import smbus

Bus = smbus.SMBus(1)
Addr = 0x23
LxRead = Bus.read_i2c_block_data(Addr,0x11)
print("照度: "+str(LxRead[1]* 10)+" ルクス")
LxRead2 = Bus.read_i2c_block_data(Addr,0x10)
print("輝度: " + str((LxRead2[0] * 256 + LxRead2[1]) / 1.2))

上記プログラムは Opensourcetechブログ さんを参考にさせていただきました。

RaspberryPi/bh1750fvi.py at master · kujiraitakahiro/RaspberryPi
thumbnail
Contribute to kujiraitakahiro/RaspberryPi development by creating an account on GitHub.
https://github.com/kujiraitakahiro/RaspberryPi/blob/master/bh1750fvi.py

GitHubにも公開されています。

早速実行すると輝度が取得できました。

root@raspi3-photo:~# python br.py 
照度: 1650 ルクス
輝度: 990.8333333333334

周囲の明るさに応じてディスプレイ輝度を自動調整する

ここまで来たら、取得した明るさに応じてディスプレイ輝度を自動調整するプログラムを作ります。 輝度調整は滑らかにしたかったので、10ms周期で動く Python プログラムを作りました。

仕組みは簡単で、明るさごとにターゲットのディスプレイ輝度を定義して、取得した明るさに応じてディスプレイ輝度を1ずつインクリメント/デクリメントする、というものになっています。

SPIは早すぎると取得できない

前述の SMBus を使用したSPI通信を行いますが、ループ速度が早すぎると正しく値を取得することができません。 ですので、300ms周期で取得するようにしました。

GY-30 BH1750FVI 光センサーの設置

設置箇所は背面の出っぱったところに設置しました。 当然ですが光が当たるところに設置した方が良いかと思います。

screen reader text
照度センサー取り付け後

作成したプログラム

作成したプログラムは GitHub に公開しています。

2022/5/25 オブジェクト指向で作り直しました。

GitHub - yukishita/lcdBrightness2: GY-30 BH1750FVI 光センサー で明るさを取得して Raspberry Pi 公式7インチタッチスクリーンの輝度を調整するプログラム(オブジェクト指向版)
thumbnail
GY-30 BH1750FVI 光センサー で明るさを取得して Raspberry Pi 公式7インチタッチスクリーンの輝度を調整するプログラム(オブジェクト指向版) - yukishita/lcdBrightness2
https://github.com/yukishita/lcdBrightness2

デモンストレーション

作成したプログラムのデモ動画です。

まとめ

Raspberry Pi 3 + 公式7インチタッチスクリーンにGY-30 BH1750FVI 光センサーを追加して輝度変更対応のフォトフレームを作ることができました。

課題

特になし

関連項目