본문 바로가기
라즈베리파이_피코_피코 W/circuitPython

10. Circuit 파이썬 라즈베리파 피코 W OLED 제어

by 커피하는조이 2023. 3. 19.
728x90
반응형
SMALL

안녕하세요 땜블리 입니다.

라즈베리파이 피코 베이직 트레이닝 보드를 이용한 OLED제어를 진행 하겠습니다.

베이직 트레이닝 보드는 아래에서 확인이 가능합니다.

https://ttcw.tistory.com/4

 

라즈베리파이 피코 베이직 트레이닝보드 구성

라즈베리파이 피코 보드의 펌웨어실습을 위한 베이직 트레이닝보드를 소개 합니다. 현재 네이버 스마트스토어에서 판매가 진행되고 있습니다. 라즈베리파이 피코 베이직 트레이닝 보드 라즈베

ttcw.tistory.com

1) OLED 제어 구동 원리

(1) 동작설명

OLED(유기 발광 다이오드)는 유기 화합물 층으로 이루어진 LED 반도체 소자 중 하나입니다.

128x64 OLED 디스플레이는 단순한 도트 매트릭스 그래픽 디스플레이입니다.

128 개의 열과 64 개의 행이있어 총 128x64 = 8192 픽셀을 표시합니다.

이 픽셀의 LED를 켜고 끄면 모든 모양의 그래픽 이미지를 표시 할 수 있습니다.

2) OLED 기본 문구 출력 제어

(1) 동작설명

SSD1306용 드라이버를 이용한 OLED 를 사용하기위해서는 라이브러리를 추가 해줘야 합니다.

 

라이브러리는 아래 사이트에서 받을 수 있습니다.

https://circuitpython.org/libraries

 

CircuitPython - Libraries

The easiest way to program microcontrollers

circuitpython.org

번들 항목에 보면 버전별로 소스와 예제 등 다운 받을 수있습니다.

현재 버전은 boot_out.txt 파일을 열어보면 확인이 됩니다

최신 버전은 8.0.3 으로 8.x 버전의 번들을 다운받아 압축을 풀면 여러 라이브러리가 나오는데 필요한 라이브러리를 lib 폴더에 넣어주면 됩니다.

 

mpy 파일은 파이썬 코드를 바이트코드로 컴파일하고 최적화하여 만든 파일입니다. 이 파일은 일반적인 파이썬 코드 파일(.py)보다 작고 빠르게 실행될 수 있습니다.

반응형

그리고 폰트 파일을 넣어주어야 합니다. 기본 폰트는 아래 다운받아서  파이 피코 폴더에 넣어주시면 됩니다.

font5x8.bin
0.00MB

(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) 동작 결과

 

 

 

728x90
반응형
LIST

댓글