마이크로 파이썬 micro python

Pico W와 MicroPython으로 OLED 디스플레이 제어하기

smy383 2025. 3. 17. 13:09
728x90
반응형
반응형

 

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 Pinout

Pico W 핀 배치도 (출처: MicroPython 공식 문서)

🐍 2단계: 라이브러리 설치

SSD1306 OLED 디스플레이를 제어하기 위한 MicroPython 라이브러리가 필요합니다. Thonny IDE를 사용하면 간편하게 설치할 수 있습니다.

  1. Thonny IDE를 엽니다.
  2. Pico W를 컴퓨터에 연결하고, Thonny IDE에서 Pico W를 인터프리터로 선택합니다.
  3. 메뉴에서 "Tools" > "Manage packages..."를 선택합니다.
  4. 검색창에 "micropython-ssd1306"을 입력하고 검색합니다.
  5. 검색 결과에서 "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 객체를 생성합니다. sclsda 핀 번호는 하드웨어 연결에 맞게 수정해야 합니다.
  • 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 디스플레이는 다양한 프로젝트에 활용될 수 있는 멋진 부품입니다!

728x90
반응형