Raspberry pi zero 2Wを入手したので備忘録として書きます。
1. 3.2インチLCDの接続
3.2インチのLCD(SPI接続)を購入したので、Raspberry pi zeroに接続して表示させてみました。
今回購入したのは、3.2インチのLCDとブレッドボード用のジャンパワイヤです。
購入したのはこちらになります。
開封してみました。
LCDはSPIインタフェースで、タッチパネルのドライバも載っています。
LCDのドライバはILI9341で、タッチパネルはMSP3218になります。
SDカードのスロットもついているようです。
では、Raspberry pi zeroとLCDを接続してみましょう。
LCDと配線の接続
下記にLCDの端子とRaspberry pi zeroの端子の接続表を示します。
SIP信号は、制御時にチップイネーブル信号(CE1とCE0)で選択しますので、LCDとタッチパネルは、同じSPI信号を使用することにします。
よって今回は、LCD側の端子でT_DOとSDI(MOSI)、T_CLKとSCKを接続しました。
LCDパネル側からの送信はありませんので、SDO(MISO)は接続しませんでした。
実際に接続した写真は下記です。
2.準備
SPI有効の設定
LCDとSPI通信を行うためにはSPI信号を有効にしなければなりません。
以下のコマンドを入力し、「3 Interface Options」→「14 SPI」でSPIを有効にします。
sudo raspi-config
Pythonライブラリーのインストール
以下のコマンドを入力してLCDのドライバをインストールします。
sudo apt-get install python3-rpi.gpio python3-spidev python3-pip python3-pil python3-numpy
pip3 install adafruit-circuitpython-rgb-display
(依存ライブラリをaptでインストールして、最後にpip3でこのライブラリをインストールします。)
LCDのLEDの点灯
では、実際に動かしてみます。
最初にLCDのLEDを点灯させます。
下記のように「プログラミング」→「Thonny」を選択して、Thonnyを起動します。
起動したらプラスマーク(new)を選択して新しいファイルを作成します。
次に下記のプログラムをコピーして貼り付けてください。
#------------------------------------------------------------------------------------------
#GPIO set
import RPi.GPIO as GPIO
import timedef LCD_led(gpio,on):
# GPIOのピン番号指定を「BCM」に設定します
GPIO.setmode(GPIO.BCM)# 設定を確認します
mode = GPIO.getmode()# BCMの場合は「11」が返ります
#print(mode)# GPIO番号に名前をつけます
LED = gpio# LED用のピンを「Out」に設定します
GPIO.setup(LED,GPIO.OUT)if on == False:
# LEDを消します
GPIO.output( LED,False )
else:
# LEDを点けます
GPIO.output( LED,True )
def main():
LCD_led(23,1)
if __name__ == '__main__':
main()
#---------------------------------------------------------------------------------
「Run」で実行すると下記のようにLCDのLEDが点灯しました。
このプログラムは、後で使用するので、libというディレクトリを作成してその下にLCD_led.pyという名前で保存しておきましょう。
私は下記のような場所にpythonプログラムを格納するようにしました。
/home/tomtomst/Documents/python/lib
3.表示確認
LCD表示テスト
次に同じように下記のプログラムを実行してください。
from adafruit_rgb_display.rgb import color565
from adafruit_rgb_display.ili9341 import ILI9341from busio import SPI
from digitalio import DigitalInOut
import board# Pin Configuration
cs_pin = DigitalInOut(board.D8)
dc_pin = DigitalInOut(board.D25)
rst_pin = DigitalInOut(board.D24)# Set up SPI bus
spi = SPI(clock=board.SCK, MOSI=board.MOSI, MISO=board.MISO)# Create the ILI9341 display:
display = ILI9341(
spi,
cs=cs_pin, dc=dc_pin, rst=rst_pin,
width=240, height=320,
rotation=90,
baudrate=24000000
)# Define color
COLOR_ORANGE = color565*1# Fill display with one color
display.fill(COLOR_ORANGE)
このプログラム実行すると、画面一面オレンジ色になります。
文字の表示確認
次に文字を表示してみましょう。
文字を表示するにはフォントをダウンロードしておく必要があります。
下記のコマンドでダウンロードしてください。
sudo apt install fonts-noto-cjk fonts-roboto
プログラムは下記です。
from adafruit_rgb_display.rgb import color565
from adafruit_rgb_display.ili9341 import ILI9341from busio import SPI
from digitalio import DigitalInOut
import boardfrom PIL import Image, ImageDraw, ImageFont
# Pin Configuration
cs_pin = DigitalInOut(board.D8)
dc_pin = DigitalInOut(board.D25)
rst_pin = DigitalInOut(board.D24)# Set up SPI bus
spi = SPI(clock=board.SCK, MOSI=board.MOSI, MISO=board.MISO)# Create the ILI9341 display:
disp = ILI9341(
spi,
cs=cs_pin, dc=dc_pin, rst=rst_pin,
width=240, height=320,
rotation=90,
baudrate=24000000
)# Define image size (320x240, rotated)
IMAGE_SIZE = (disp.height, disp.width)# Define fonts
FONT_ROBOTO = ImageFont.truetype("Roboto-Medium.ttf", 12)
FONT_NOTO = ImageFont.truetype("NotoSansCJK-Regular.ttc", 18)
FONT_NOTO_SMALL = ImageFont.truetype("NotoSansCJK-Regular.ttc", 12)# Define colors
COLOR_WHITE = (236, 239, 241)
COLOR_PURPLE = (239, 154, 154)# Create an image with black background
image = Image.new("RGB", IMAGE_SIZE, (0, 0, 0))# Draw some text
draw = ImageDraw.Draw(image)
text = """\
あいうえおかきくけこ
サシスセソタチツテト
ABCDEFGHIJK
abcdefghijklmnopqrstuvwxyz
東京都神奈川県千葉県埼玉県
ちゃんと表示していますか?
今日の天気は晴れ後曇りです
"""
for i, line in enumerate(text.split("\n")):
draw.text((0, 24*i), line, font=FONT_NOTO, fill=COLOR_WHITE)draw.text((200, 185), "2024/03/16に作成", font=FONT_NOTO_SMALL, fill=COLOR_WHITE)
draw.text((40, 200), "tomtomst【電子工作DIY】ブログ", font=FONT_NOTO, fill=COLOR_PURPLE)
draw.text((100, 222), "tomtomst.hatenablog.com", font=FONT_ROBOTO, fill=COLOR_PURPLE)# Show it on display
disp.image(image)
下記のように表示しました。
今日はここまでです。
次はタッチパネルを動かしたいと思います。
*1:245, 124, 0