안녕하세요 땜블리 입니다.
라즈베리파이 피코 베이직 트레이닝 보드를 이용한 OLED제어를 진행 하겠습니다.
베이직 트레이닝 보드는 아래에서 확인이 가능합니다.
1) OLED 제어 구동 원리
(1) 동작설명
OLED(유기 발광 다이오드)는 유기 화합물 층으로 이루어진 LED 반도체 소자 중 하나입니다.
128x64 OLED 디스플레이는 단순한 도트 매트릭스 그래픽 디스플레이입니다.
128 개의 열과 64 개의 행이있어 총 128x64 = 8192 픽셀을 표시합니다.
이 픽셀의 LED를 켜고 끄면 모든 모양의 그래픽 이미지를 표시 할 수 있습니다.
2) OLED 기본 문구 출력 제어
(1) 동작설명
SSD1306용 드라이버를 이용한 OLED 를 사용하기위해서는 라이브러리를 추가 해줘야 합니다.
라이브러리는 아래 사이트에서 받을 수 있습니다.
https://circuitpython.org/libraries
번들 항목에 보면 버전별로 소스와 예제 등 다운 받을 수있습니다.
현재 버전은 boot_out.txt 파일을 열어보면 확인이 됩니다
최신 버전은 8.0.3 으로 8.x 버전의 번들을 다운받아 압축을 풀면 여러 라이브러리가 나오는데 필요한 라이브러리를 lib 폴더에 넣어주면 됩니다.
mpy 파일은 파이썬 코드를 바이트코드로 컴파일하고 최적화하여 만든 파일입니다. 이 파일은 일반적인 파이썬 코드 파일(.py)보다 작고 빠르게 실행될 수 있습니다.
그리고 폰트 파일을 넣어주어야 합니다. 기본 폰트는 아래 다운받아서 파이 피코 폴더에 넣어주시면 됩니다.
(2) 소스 코드
code.py
import time
import board
import busio
import adafruit_ssd1306
# 설정
i2c = busio.I2C(board.GP15, board.GP14)
oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3c)
uart = busio.UART(board.GP16, board.GP17, baudrate=115200)
# 초기화
oled.fill(1)
oled.show()
time.sleep(1)
oled.fill(0)
oled.show()
while True:
oled.fill(0)
oled.text("picoSensorBoard",0,0,1)
oled.text("picoS/Board",10,15,1)
oled.text("picoS/Board",20,30,1)
oled.text("picoS/Board",30,45,1)
oled.show()
time.sleep(0.5)
(3) 동작 결과
3) OLED에 현재 온도/습도, CdS/가변저항 데이터 출력 제어
(1) 동작설명
앞서 배운 가변저항과 온습도 센서의 값을 OLED에 표시 합니다.
(2) 소스 코드
code.py
import time
import board
import busio
from digitalio import DigitalInOut, Direction, Pull
import adafruit_ssd1306
from adafruit_dht import DHT11
from analogio import AnalogIn
# 설정
led1 = DigitalInOut(board.GP2)
led1.direction = Direction.OUTPUT
led2 = DigitalInOut(board.GP3)
led2.direction = Direction.OUTPUT
CdS_adc = AnalogIn(board.GP27)
vr_adc = AnalogIn(board.GP26)
i2c = busio.I2C(board.GP15, board.GP14)
oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3c)
dhtOut = DHT11(board.GP7)
uart = busio.UART(board.GP16, board.GP17, baudrate=115200)
# 초기화
oled.fill(1)
oled.show()
led1.value = False
led2.value = False
time.sleep(1)
oled.fill(0)
oled.show()
led1.value = True
led2.value = True
time.sleep(1)
# 함수
temp = 0
humi = 0
def tempHumiSensor():
global temp, humi
dhtOut.measure()
temp = dhtOut.temperature
humi = dhtOut.humidity
time.sleep(0.5)
VRData = 0
def adcInput(ch):
global VRData
if ch == 0: # VR
VRData = vr_adc.value
VRDataV = (3.3/65535) * VRData
VRDataV = round(VRDataV, 2)
return VRDataV
elif ch == 1: # CdS
CdSData = CdS_adc.value
CdSDataV = (3.3/65535) * CdSData
CdSDataV = round(CdSDataV, 2)
return CdSDataV
while True:
tempHumiSensor()
print('Temperature = {}C Humidity = {}%'.format(temp, humi))
print('VR Volt = {}V CdS Volt = {}V\n'.format(adcInput(0), adcInput(1)))
oled.fill(0)
oled.text("Temp(C) : ", 0, 0, 1)
oled.text(str(temp), 80, 0,1)
oled.text("Humi(%) : ", 0, 12,1)
oled.text(str(humi), 80, 12,1)
oled.text("CdS(V) : ", 0, 24,1)
oled.text(str(adcInput(1)), 80, 24,1)
oled.text("VR(V) : ", 0, 36,1)
oled.text(str(adcInput(0)), 80, 36,1)
oled.show()
time.sleep(0.5)
(3) 동작 결과
'라즈베리파이_피코_피코 W > circuitPython' 카테고리의 다른 글
12. Circuit 파이썬 라즈베리파 피코 W 서보모터 (0) | 2023.03.21 |
---|---|
11. Circuit 파이썬 라즈베리파 피코 W 블루투스/ SDCARD (0) | 2023.03.20 |
09. Circuit 파이썬 라즈베리파 피코 W DHT11 (0) | 2023.03.18 |
08. Circuit 파이썬 라즈베리파 피코 W 릴레이제어 (0) | 2023.03.17 |
07. Circuit 파이썬 라즈베리파이 피코 W WS2812 제어하기 (2) | 2023.03.16 |
댓글