Pico W와 MicroPython으로 OLED 디스플레이 제어하기
Raspberry Pi Pico W는 작고 저렴하지만, 다양한 기능을 내장하고 있습니다. 이 튜토리얼에서는 Pico W와 MicroPython을 사용하여 SSD1306 OLED 디스플레이를 제어하는 방법을 알아보겠습니다. OLED 디스플레이는 텍스트, 그래픽, 심지어 간단한 애니메이션까지 표시할 수 있어, 프로젝트에 시각적인 요소를 더하는 데 매우 유용합니다.
🚀 준비물
- Raspberry Pi Pico W
- MicroPython 설치 (Pico W에)
- Thonny IDE (또는 다른 MicroPython 개발 환경)
- SSD1306 OLED 디스플레이 (I2C 인터페이스)
- 점퍼 와이어 (4개)
🔌 1단계: 하드웨어 연결
Pico W와 SSD1306 OLED 디스플레이를 다음과 같이 연결합니다. (I2C 통신 사용)
Pico W | SSD1306 OLED |
---|---|
3V3 (Pin 36) | VCC |
GND (Pin 38) | GND |
GP20 (Pin 26) - I2C0 SDA | SDA |
GP21 (Pin 27) - I2C0 SCL | SCL |
⚠️ 핀 번호 주의!
위의 핀 번호는 예시입니다. 사용하는 Pico W 보드와 OLED 모듈의 핀 배열을 반드시 확인하고 정확하게 연결해야 합니다. I2C 핀은 Pico W에서 다른 핀으로 변경할 수도 있습니다. (machine.I2C
객체 생성 시 핀 번호 지정)
Pico W 핀 배치도 (출처: MicroPython 공식 문서)
🐍 2단계: 라이브러리 설치
SSD1306 OLED 디스플레이를 제어하기 위한 MicroPython 라이브러리가 필요합니다. Thonny IDE를 사용하면 간편하게 설치할 수 있습니다.
- Thonny IDE를 엽니다.
- Pico W를 컴퓨터에 연결하고, Thonny IDE에서 Pico W를 인터프리터로 선택합니다.
- 메뉴에서 "Tools" > "Manage packages..."를 선택합니다.
- 검색창에 "micropython-ssd1306"을 입력하고 검색합니다.
- 검색 결과에서 "micropython-ssd1306"을 선택하고 "Install" 버튼을 클릭합니다.
또는, mip
를 사용하여 콘솔에서 직접 설치할 수도 있습니다.
import mip
mip.install("micropython-ssd1306")
📝 3단계: 코드 작성 및 실행
다음 코드를 main.py
파일에 복사하거나, 새 파일에 작성하여 Pico W에 업로드합니다.
from machine import Pin, I2C
import ssd1306
import time
# I2C 설정 (Pico W의 I2C 핀 번호에 맞게 수정)
i2c = I2C(0, scl=Pin(21), sda=Pin(20), freq=400000)
# OLED 초기화 (128x64 해상도)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
# OLED에 텍스트 표시
oled.text("Hello, Pico W!", 0, 0) # (텍스트, x좌표, y좌표)
oled.text("MicroPython", 0, 16) # 두 번째 줄
oled.show() # 화면에 업데이트
time.sleep(2)
# 화면 지우기
oled.fill(0)
oled.show()
# 선 그리기
oled.line(0, 0, 127, 63, 1) # (x0, y0, x1, y1, color)
oled.show()
time.sleep(1)
# 사각형 그리기
oled.rect(10, 10, 50, 30, 1) # (x, y, width, height, color)
oled.show()
time.sleep(1)
# 채워진 사각형
oled.fill_rect(70, 10, 40, 20, 1) # (x, y, width, height, color)
oled.show()
time.sleep(1)
# 원은 지원되지 않음.
# 픽셀 단위로 제어
oled.pixel(127, 63, 1) # (x,y, color) 맨 우측 하단에 픽셀 하나 그리기.
oled.show()
time.sleep(1)
# 스크롤
for i in range(64):
oled.scroll(1,0) # x방향 1픽셀씩
oled.show()
time.sleep(0.02)
코드 설명:
from machine import Pin, I2C
: Pico W의 핀과 I2C 통신을 위한 모듈을 가져옵니다.import ssd1306
: SSD1306 OLED 드라이버 라이브러리를 가져옵니다.i2c = I2C(0, scl=Pin(21), sda=Pin(20), freq=400000)
: I2C 객체를 생성합니다.scl
과sda
핀 번호는 하드웨어 연결에 맞게 수정해야 합니다.oled = ssd1306.SSD1306_I2C(128, 64, i2c)
: SSD1306 OLED 객체를 생성합니다. 일반적으로 128x64 해상도의 OLED를 사용합니다.oled.text("Hello, Pico W!", 0, 0)
: 지정된 위치(x, y)에 텍스트를 표시합니다.oled.show()
: 변경된 내용을 OLED 화면에 실제로 표시합니다. (이 명령어를 호출해야 화면이 업데이트됩니다.)oled.fill(0)
: 화면을 검은색(0)으로 채웁니다. (화면 지우기)oled.line()
,oled.rect()
,oled.fill_rect()
,oled.pixel()
: 각각 선, 사각형, 채워진 사각형, 픽셀을 그리는 함수입니다.oled.scroll()
: 화면 내용을 스크롤합니다.
Thonny IDE에서 코드를 실행하면 OLED 디스플레이에 "Hello, Pico W!" 와 "MicroPython" 텍스트가 표시되고, 선, 사각형 등이 그려지는 것을 확인할 수 있습니다.
✨ 추가 기능 및 응용
프레임 버퍼 활용
ssd1306
라이브러리는 프레임 버퍼(framebuf)를 기반으로 동작합니다. framebuf
모듈을 직접 사용하여 더 복잡한 그래픽을 그릴 수 있습니다. 예를 들어, 작은 비트맵 이미지를 표시하거나, 텍스트의 폰트 크기를 변경하거나, 여러 줄의 텍스트를 정렬할 수 있습니다.
import framebuf
# ... (OLED 초기화 코드) ...
# 프레임 버퍼 생성 (128x64, 흑백 모드)
buffer = bytearray((oled.height // 8) * oled.width)
framebuf = framebuf.FrameBuffer(buffer, oled.width, oled.height, framebuf.MONO_VLSB)
# 프레임 버퍼에 텍스트 쓰기 (다른 폰트 사용 가능)
framebuf.text("Hello!", 0, 0, 1)
# 프레임 버퍼를 OLED에 표시
oled.blit(framebuf, 0, 0)
oled.show()
센서 데이터 표시
온도, 습도, 조도 등 센서 값을 읽어와 OLED 디스플레이에 실시간으로 표시할 수 있습니다.
Wi-Fi 정보 표시
Pico W의 Wi-Fi 연결 상태, IP 주소 등을 OLED에 표시하여 네트워크 상태를 쉽게 확인할 수 있습니다.
애니메이션
oled.fill(0)
과 oled.show()
를 적절히 조합하고, 표시 내용을 조금씩 변경하면 간단한 애니메이션을 만들 수 있습니다.
외부 폰트 사용
기본 폰트 외에, 다양한 크기와 스타일의 폰트를 사용할 수 있습니다. .pbm
(Portable Bitmap) 형식의 폰트 파일을 MicroPython 파일 시스템에 업로드하고, framebuf
를 사용하여 로드하여 사용할 수 있습니다.
⚠️ 문제 해결
- OLED가 켜지지 않음:
- VCC, GND 연결을 확인합니다.
- 점퍼 와이어가 제대로 연결되었는지 확인합니다.
- OLED 모듈의 불량일 수 있습니다. (다른 OLED로 테스트)
- 화면에 아무것도 표시되지 않음:
- SDA, SCL 핀 연결을 확인합니다.
- I2C 주소가 올바른지 확인합니다. (일부 OLED는 다른 주소를 사용)
oled.show()
함수를 호출했는지 확인합니다.
- Thonny IDE에서 "No module named 'ssd1306'" 오류 발생:
micropython-ssd1306
라이브러리가 올바르게 설치되었는지 확인합니다. (Tools > Manage Packages...)- Pico W가 Thonny IDE에서 올바른 인터프리터로 선택되었는지 확인합니다.
이 튜토리얼을 통해 Pico W와 MicroPython을 사용하여 OLED 디스플레이를 제어하는 기본 방법을 익히셨기를 바랍니다. OLED 디스플레이는 다양한 프로젝트에 활용될 수 있는 멋진 부품입니다!
'마이크로 파이썬 micro python' 카테고리의 다른 글
피코 W로 마이크로 파이썬 소켓 통신 이용하기 : 에코 서버 (0) | 2025.03.19 |
---|---|
Pico W를 위한 MicroPython 웹 프레임워크 비교: Phew, Nano-web, Picoweb, MicroWebSrv2 (2) | 2025.03.18 |
Pico W와 MicroPython으로 만드는 정확한 인터넷 시계 (0) | 2025.03.17 |
라즈베리파이 피코 W로 웹에서 LED 제어하기 (1) | 2025.03.13 |
라즈베리파이 피코(Raspberry Pi Pico)로 서보 모터 제어하기: 초간단 가이드 (1) | 2025.03.12 |