[RaspberryPI] OLED 제어

정재훈·2022년 4월 21일
0

RaspberryPi

목록 보기
11/12

OLED 제어

OLED : 백라이트 없이 스스로 빛을 내는 패널로 얇으며, 해당 제품은 I2C / SPI 통신으로 출력 지원한다.
OLED 드라이버 이름 : SSD1306

  1. VCC - 3.3V, 5V 모두 동작
  2. GND
  3. NC : Not Connect 로 연결하지 않는 핀
  4. DIN = MOSI
  5. CLK = SCK , 클럭
  6. CS Chip Select
  7. D/C : Data or Command
    1) High : Data 전송
    2) Low : Command 전송
  8. Res = Rst = 리셋핀

라즈베리파이에서 https://www.waveshare.com/wiki/0.96inch_OLED_(B)로 접속후 이미지와 같이 링크를 복사해줍니다.

cmd 창에서 wget [복사 링크]를 통해 다운받고, 압축을 풀어줍니다.
7zip이므로 sudo apt-get install p7zip 설치 후 7zr x [파일명]으로 압축풀어줍니다.
RaspberryPi > python > readme_EN.txt에서 점퍼선 연결 방법을 참고한다.

cmd창으로 RaspberryPi > python으로 이동후 sudo python setup.py install 명령어를 통해 LIB를 설치한다.

#!/usr/bin/python
# -*- coding:utf-8 -*-

import sys
import os
picdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'pic')
libdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'lib')
if os.path.exists(libdir):
    sys.path.append(libdir)

from time import sleep
from waveshare_OLED import OLED_0in96
from PIL import Image,ImageDraw,ImageFont

disp = OLED_0in96.OLED_0in96()
disp.Init()
disp.clear()

# Create blank image for drawing.
image1 = Image.new('1', (disp.width, disp.height), 255)
draw = ImageDraw.Draw(image1)
font1 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 18)
font2 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 24)

# (20,20)에 점 찍기
draw.point((20, 20))
disp.ShowImage(disp.getbuffer(image1))
sleep(1)

# 가장자리에 점 찍기
draw.point([(0,0),(127,0),(0,63),(127,63)])
disp.ShowImage(disp.getbuffer(image1))
sleep(1)

# 선 그리기1
for i in range(10, 60): draw.point((i, i))
disp.ShowImage(disp.getbuffer(image1))
sleep(1)

# 선 그리기 2
draw.line([(0,0),(127,0)])
draw.line([(0,0),(0,63)])
draw.line([(0,63),(127,63)])
draw.line([(127,0),(127,63)])
disp.ShowImage(disp.getbuffer(image1))
sleep(1)

#draw Text
draw.text((20,0), 'Waveshare ', font = font1, fill = 0)
draw.text((20,24), u'한글 ', font = font2, fill = 0)
disp.ShowImage(disp.getbuffer(image1))
sleep(1)

#clear screen
disp.clear()
profile
여러 방향으로 접근하는 개발자

0개의 댓글