RaspberryPi에서 SPI 구동 1.8 "TFT 액정 (ST7735s)을 사용하여 이미지를 표시합니다.
16025 단어 RaspberryPi파이썬oledTFTSPI
RaspberryPi에서 1.8" TFT LCD 사용
이 기사에서는 1.8 "TFT LCD를 RaspberryPi의 Python3으로 구동합니다.
Arduino에서의 구동예는 다수 있어 라이브러리도 풍부합니다만, Python3에서의 구동예는 적었기 때문에 기재합니다.
사용하는 액정에 따라 표시상의 빨간색과 파란색이 바뀝니다(RGB→BGR)가 되는 경우가 있습니다.
내가 사용한 액정에서는이 증상이 발생했기 때문에 이미지의 빨간색과 파란색을 반전시켜 대응하고 있습니다.
해결책을 아시는 분이 있으면 댓글을 주시면 도움이 됩니다.
이 기사의 스크립트는 다음 페이지를 참조했습니다.
배선
스크립트
라이브러리 정보
다른 사이트 등에서 소개되고 있는, ST7735s·ST7735의 라이브러리를 이용한 구동 방법은, 내 환경에서는 잘 가지 않았습니다.
덧붙여 환경이나 사용하는 액정에 따라서는 이쪽에서도 동작할 가능성은 있다고 생각합니다.
사용 패키지 설치 및 설정
사용 패키지
다른 사이트 등에서 소개되고 있는, ST7735s·ST7735의 라이브러리를 이용한 구동 방법은, 내 환경에서는 잘 가지 않았습니다.
덧붙여 환경이나 사용하는 액정에 따라서는 이쪽에서도 동작할 가능성은 있다고 생각합니다.
사용 패키지 설치 및 설정
사용 패키지
설치
python3-pil은 아마 설치된 것 같습니다.
sudo apt install python3-pip
sudo pip3 install adafruit-circuitpython-rgb-display
sudo apt install python3-pil
설치 확인
python3
import PIL
import adafruit_rgb_display
위의 패키지를 가져올 수 있으면 설치가 성공적으로 완료된 것입니다.
exit()로 python3을 종료하십시오.
SPI 통신 활성화
sudo raspi-config
이와 관련하여 많은 정보가 있으므로 모르는 경우 검색해보십시오.
배선
사용하는 LCD에 따라 핀 이름이 다를 수 있습니다.
액정측
RaspberryPi 쪽
GND
GND
VCC
3.3v
SCL
GPIO11
SDA
GPIO10
RST
GPIO24
DC
GPIO25
CS
GPIO8
BLK
GPIO12
코드
이 기사에서는 1.8 "TFT LCD (ST7735s)의 경우 스크립트를 게시합니다.
스크립트 자체는 앞서 언급한 참고 사이트의 코드를 단순화한 것입니다. 다른 LCD를 사용하는 경우 참고 사이트를 참조하여 대상 코드를 다시 작성하십시오.
이 코드에서는 화면 크기와 같은 크기의 이미지(160x128의 액정이라면 160x128의 이미지)의 사용을 가정합니다.
다른 이미지를 사용하는 경우 미리 자르거나 참조 사이트를 찾아 자동으로 자르는 스크립트를 추가하십시오.
tft_display_cont.py# -*- coding: utf-8 -*-
"""
This program is based on the sample program at Adafruit-Python-Usage.
(https://learn.adafruit.com/1-8-tft-display/python-usage)
2021/09/06 var1.0
"""
import digitalio
import board
import RPi.GPIO as GPIO
from PIL import Image, ImageDraw
from time import sleep
import adafruit_rgb_display.st7735 as st7735
cs_pin = digitalio.DigitalInOut(board.CE0)
dc_pin = digitalio.DigitalInOut(board.D25)
reset_pin = digitalio.DigitalInOut(board.D24)
BAUDRATE = 24000000
# 使用する液晶が異なる場合、サイトを参考に以下を書き換えてください。
# ----------ここから----------
disp = st7735.ST7735R(
board.SPI(),
rotation=270,
cs=cs_pin,
dc=dc_pin,
rst=reset_pin,
baudrate=BAUDRATE,
)
# ----------ここまで----------
backlight_pin = 12
GPIO.setmode(GPIO.BCM)
GPIO.setup(backlight_pin, GPIO.OUT)
class DisplayImage():
def __init__(self, img):
self.image = Image.open(img)
def show(self):
# 画像サイズと液晶サイズが異なると、上手く表示されない可能性があります
disp.image(self.image)
class DisplayControl():
def __init__(self):
self.backlight = GPIO.PWM(backlight_pin, 100)
self.backlight.start(0)
def on(self):
self.backlight.ChangeDutyCycle(100)
def off(self):
black = Image.new("RGB", (160, 128))
draw = ImageDraw.Draw(black)
draw.rectangle((0, 0, 160, 128), outline=0, fill=(0, 0, 0))
disp.image(black)
self.backlight.ChangeDutyCycle(0)
def pwm(self, value):
self.backlight.ChangeDutyCycle(value)
if __name__ == "__main__":
Image01 = DisplayImage("picture01.jpg")
Image02 = DisplayImage("picture02.jpg")
DisplayCont = DisplayControl()
try:
while True:
Image01.show() #一枚目を表示
DisplayCont.on()
sleep(1)
Image02.show() #二枚目を表示
DisplayCont.pwm(50)
sleep(1)
DisplayCont.off() #表示を消す
sleep(1)
except KeyboardInterrupt:
pass
동작 및 설명
위 스크립트를 tft_display_cont.py로 사용하여 동일한 디렉토리에 picture01.jpg 및 picture02.jpg를 저장합니다.
아래의 이미지는 각각 160x128의 이미지이므로 동작 확인용으로 다운로드하여 사용하십시오.
다음 명령을 실행하여 LCD에 표시되는지 확인합니다.
python3 tft_display_cont.py
라이브러리로 사용
사용 예
다음과 같이 라이브러리로 가져와서 사용할 수 있습니다.
Import_test.pyimport tft_display_cont as tft
from time import sleep
Image01 = tft.DisplayImage("picture01.jpg") # 任意の画像ファイル
Image02 = tft.DisplayImage("picture02.jpg") # 任意の画像ファイル
DisplayCont = tft.DisplayControl()
DisplayCont.on() # バックライト点灯
while True:
Image01.show() # 一枚目を表示
sleep(1)
Image02.show() # 二枚目を表示
sleep(1)
해설
아래에서 인스턴스를 생성합니다.
Import_test.pyImage01 = tft.DisplayImage("picture01.jpg") # 任意の画像ファイル
Image02 = tft.DisplayImage("picture02.jpg") # 任意の画像ファイル
DisplayCont = tft.DisplayControl()
Import_test.pyImage01.show() # 画像を表示します。
Image02.show() # 画像を表示します。
DisplayCont.on() # バックライトを点灯します。
DisplayCont.off() # バックライトを消灯します。
DisplayCont.pwm(50) # バックライトをPWM制御します。 0~100で指定します。
문자 표시 정보
참고 사이트에서는 문자를 표시하는 스크립트 예제도 소개합니다.
관심이 있으시면 찾아보세요.
마지막으로
사용하는 액정에 따라 표시상의 빨간색과 파란색이 바뀝니다(RGB→BGR)가 되는 경우가 있습니다.
내가 사용한 액정에서는이 증상이 발생했기 때문에 이미지의 빨간색과 파란색을 반전시켜 대응하고 있습니다.
해결책을 아시는 분이 있으면 댓글을 주시면 도움이 됩니다.
Reference
이 문제에 관하여(RaspberryPi에서 SPI 구동 1.8 "TFT 액정 (ST7735s)을 사용하여 이미지를 표시합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/wy0727_betch/items/1da0208120adb98f7981
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이 기사에서는 1.8 "TFT LCD (ST7735s)의 경우 스크립트를 게시합니다.
스크립트 자체는 앞서 언급한 참고 사이트의 코드를 단순화한 것입니다. 다른 LCD를 사용하는 경우 참고 사이트를 참조하여 대상 코드를 다시 작성하십시오.
이 코드에서는 화면 크기와 같은 크기의 이미지(160x128의 액정이라면 160x128의 이미지)의 사용을 가정합니다.
다른 이미지를 사용하는 경우 미리 자르거나 참조 사이트를 찾아 자동으로 자르는 스크립트를 추가하십시오.
tft_display_cont.py
# -*- coding: utf-8 -*-
"""
This program is based on the sample program at Adafruit-Python-Usage.
(https://learn.adafruit.com/1-8-tft-display/python-usage)
2021/09/06 var1.0
"""
import digitalio
import board
import RPi.GPIO as GPIO
from PIL import Image, ImageDraw
from time import sleep
import adafruit_rgb_display.st7735 as st7735
cs_pin = digitalio.DigitalInOut(board.CE0)
dc_pin = digitalio.DigitalInOut(board.D25)
reset_pin = digitalio.DigitalInOut(board.D24)
BAUDRATE = 24000000
# 使用する液晶が異なる場合、サイトを参考に以下を書き換えてください。
# ----------ここから----------
disp = st7735.ST7735R(
board.SPI(),
rotation=270,
cs=cs_pin,
dc=dc_pin,
rst=reset_pin,
baudrate=BAUDRATE,
)
# ----------ここまで----------
backlight_pin = 12
GPIO.setmode(GPIO.BCM)
GPIO.setup(backlight_pin, GPIO.OUT)
class DisplayImage():
def __init__(self, img):
self.image = Image.open(img)
def show(self):
# 画像サイズと液晶サイズが異なると、上手く表示されない可能性があります
disp.image(self.image)
class DisplayControl():
def __init__(self):
self.backlight = GPIO.PWM(backlight_pin, 100)
self.backlight.start(0)
def on(self):
self.backlight.ChangeDutyCycle(100)
def off(self):
black = Image.new("RGB", (160, 128))
draw = ImageDraw.Draw(black)
draw.rectangle((0, 0, 160, 128), outline=0, fill=(0, 0, 0))
disp.image(black)
self.backlight.ChangeDutyCycle(0)
def pwm(self, value):
self.backlight.ChangeDutyCycle(value)
if __name__ == "__main__":
Image01 = DisplayImage("picture01.jpg")
Image02 = DisplayImage("picture02.jpg")
DisplayCont = DisplayControl()
try:
while True:
Image01.show() #一枚目を表示
DisplayCont.on()
sleep(1)
Image02.show() #二枚目を表示
DisplayCont.pwm(50)
sleep(1)
DisplayCont.off() #表示を消す
sleep(1)
except KeyboardInterrupt:
pass
동작 및 설명
위 스크립트를 tft_display_cont.py로 사용하여 동일한 디렉토리에 picture01.jpg 및 picture02.jpg를 저장합니다.
아래의 이미지는 각각 160x128의 이미지이므로 동작 확인용으로 다운로드하여 사용하십시오.
다음 명령을 실행하여 LCD에 표시되는지 확인합니다.
python3 tft_display_cont.py
라이브러리로 사용
사용 예
다음과 같이 라이브러리로 가져와서 사용할 수 있습니다.
Import_test.pyimport tft_display_cont as tft
from time import sleep
Image01 = tft.DisplayImage("picture01.jpg") # 任意の画像ファイル
Image02 = tft.DisplayImage("picture02.jpg") # 任意の画像ファイル
DisplayCont = tft.DisplayControl()
DisplayCont.on() # バックライト点灯
while True:
Image01.show() # 一枚目を表示
sleep(1)
Image02.show() # 二枚目を表示
sleep(1)
해설
아래에서 인스턴스를 생성합니다.
Import_test.pyImage01 = tft.DisplayImage("picture01.jpg") # 任意の画像ファイル
Image02 = tft.DisplayImage("picture02.jpg") # 任意の画像ファイル
DisplayCont = tft.DisplayControl()
Import_test.pyImage01.show() # 画像を表示します。
Image02.show() # 画像を表示します。
DisplayCont.on() # バックライトを点灯します。
DisplayCont.off() # バックライトを消灯します。
DisplayCont.pwm(50) # バックライトをPWM制御します。 0~100で指定します。
문자 표시 정보
참고 사이트에서는 문자를 표시하는 스크립트 예제도 소개합니다.
관심이 있으시면 찾아보세요.
마지막으로
사용하는 액정에 따라 표시상의 빨간색과 파란색이 바뀝니다(RGB→BGR)가 되는 경우가 있습니다.
내가 사용한 액정에서는이 증상이 발생했기 때문에 이미지의 빨간색과 파란색을 반전시켜 대응하고 있습니다.
해결책을 아시는 분이 있으면 댓글을 주시면 도움이 됩니다.
Reference
이 문제에 관하여(RaspberryPi에서 SPI 구동 1.8 "TFT 액정 (ST7735s)을 사용하여 이미지를 표시합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/wy0727_betch/items/1da0208120adb98f7981
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
python3 tft_display_cont.py
사용 예
다음과 같이 라이브러리로 가져와서 사용할 수 있습니다.
Import_test.py
import tft_display_cont as tft
from time import sleep
Image01 = tft.DisplayImage("picture01.jpg") # 任意の画像ファイル
Image02 = tft.DisplayImage("picture02.jpg") # 任意の画像ファイル
DisplayCont = tft.DisplayControl()
DisplayCont.on() # バックライト点灯
while True:
Image01.show() # 一枚目を表示
sleep(1)
Image02.show() # 二枚目を表示
sleep(1)
해설
아래에서 인스턴스를 생성합니다.
Import_test.py
Image01 = tft.DisplayImage("picture01.jpg") # 任意の画像ファイル
Image02 = tft.DisplayImage("picture02.jpg") # 任意の画像ファイル
DisplayCont = tft.DisplayControl()
Import_test.py
Image01.show() # 画像を表示します。
Image02.show() # 画像を表示します。
DisplayCont.on() # バックライトを点灯します。
DisplayCont.off() # バックライトを消灯します。
DisplayCont.pwm(50) # バックライトをPWM制御します。 0~100で指定します。
문자 표시 정보
참고 사이트에서는 문자를 표시하는 스크립트 예제도 소개합니다.
관심이 있으시면 찾아보세요.
마지막으로
사용하는 액정에 따라 표시상의 빨간색과 파란색이 바뀝니다(RGB→BGR)가 되는 경우가 있습니다.
내가 사용한 액정에서는이 증상이 발생했기 때문에 이미지의 빨간색과 파란색을 반전시켜 대응하고 있습니다.
해결책을 아시는 분이 있으면 댓글을 주시면 도움이 됩니다.
Reference
이 문제에 관하여(RaspberryPi에서 SPI 구동 1.8 "TFT 액정 (ST7735s)을 사용하여 이미지를 표시합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/wy0727_betch/items/1da0208120adb98f7981
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
사용하는 액정에 따라 표시상의 빨간색과 파란색이 바뀝니다(RGB→BGR)가 되는 경우가 있습니다.
내가 사용한 액정에서는이 증상이 발생했기 때문에 이미지의 빨간색과 파란색을 반전시켜 대응하고 있습니다.
해결책을 아시는 분이 있으면 댓글을 주시면 도움이 됩니다.
Reference
이 문제에 관하여(RaspberryPi에서 SPI 구동 1.8 "TFT 액정 (ST7735s)을 사용하여 이미지를 표시합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/wy0727_betch/items/1da0208120adb98f7981텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)