Raspberry Pi Pico와 SSD1306을 사용하는 OLED를 I2C로 연결하여 동작 테스트를 해 보았습니다.
검색해 보니 많은 게시글들이 MicroPython의 경우 Thonny의 Package Manager를 사용하여 MicroPython-SSD1306 라이브러리를 사용하여 동작시키고 있었고, CircuitPython의 경우에는 adafruit_displayio_ssd1306 라이브러리를 설치하여 테스트를 한 게시글들을 보았습니다.
제 경우에는 처음부터 CircuitPython만을 사용해 왔기 때문에 이 환경에서 테스트해 보려고 합니다.
사용할 라이브러리도 adafruit_displayio_ssd1306를 사용하지 않고 가장 간단한 구조라 생각되는 adafruit_ssd1306와 adafruit_framebuf 라이브러리를 가지고 테스트해 보았습니다.
아래 CircuitPython 홈페이지에서 Bundle로 제공되는 라이브러리를 다운로드 받습니다.
제 경우 현재 최신 버전인 adafruit-circuitpython-bundle-py-20220402.zip를 다운로드 받았습니다.
압축을 해제 후 lib 디렉터리를 보면 adafruit_ssd1306.py와 adafruit_framebuf.py를 라즈베리파이 피코의 lib 디렉터리에 복사해 넣습니다. 만약 adafruit-circuitpython-bundle-7.x-mpy-20220402.zip를 다운로드한 경우에는 adafruit_ssd1306.mpy와 adafruit_framebuf.mpy를 복사해 넣으시면 됩니다.
아래 표와 이미지를 참고하여 4개의 선을 연결하면 됩니다.
라즈베리파이 피코 | OLED |
GND | GND |
3V3(OUT) | VCC |
GP5 | SCL |
GP4 | SDA |
아래 소스는 i2c를 초기화 후 화면을 지우고 간단한 텍스트를 보여주는 코드입니다.
import os
import board
import busio
import adafruit_ssd1306
i2c = busio.I2C(board.GP5, board.GP4)
display = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c)
display.fill(0)
display.show()
display.text('rudalskim.tistory.com', 0, 0, 1)
display.show()
회로를 구성후 Thonny를 사용하여 위 소스 코드를 code.py로 저장 후 실행시키면 아래와 같은 화면이 나옵니다.
(0,0) 좌표를 시작으로 간단한 text가 표시됩니다.
이번에는 여분의 코드를 추가하여 화면에 이미지와 텍스트를 디스플레이해 보았습니다.
제가 adafruit_framebuf 라이브러리에 logo bitmap을 그리기 위해 display.pixel() 함수를 사용하여 한 픽셀씩 그려 넣는 image API를 추가하여 테스트하였습니다.
import os
import board
import busio
import adafruit_ssd1306
i2c = busio.I2C(board.GP5, board.GP4)
display = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c)
display.fill(0)
display.show()
logo = [
0x0f, 0x80, 0x7c, 0x00, 0x78, 0x61, 0x87, 0x80, 0x40, 0x12, 0x00, 0x80, 0x42, 0x0c, 0x00, 0x80,
0x41, 0x84, 0x30, 0x80, 0x20, 0x44, 0xc1, 0x00, 0x20, 0x25, 0x01, 0x00, 0x10, 0x1e, 0x02, 0x00,
0x0c, 0x3f, 0x8c, 0x00, 0x07, 0xe1, 0xf8, 0x00, 0x08, 0x00, 0x04, 0x00, 0x10, 0xc0, 0x42, 0x00,
0x11, 0xe1, 0xf2, 0x00, 0x37, 0x1e, 0x1b, 0x00, 0x3c, 0x0c, 0x0f, 0x00, 0x68, 0x04, 0x05, 0x80,
0xc8, 0x04, 0x04, 0x80, 0x88, 0x0c, 0x04, 0x40, 0x88, 0x1e, 0x04, 0x40, 0x8c, 0x1f, 0x0c, 0x40,
0xdf, 0xe0, 0xfe, 0xc0, 0x7f, 0xc0, 0x73, 0x80, 0x61, 0x80, 0x61, 0x80, 0x21, 0x80, 0x41, 0x00,
0x20, 0x80, 0x41, 0x00, 0x30, 0xc0, 0x83, 0x00, 0x10, 0xff, 0x82, 0x00, 0x0c, 0xff, 0xcc, 0x00,
0x03, 0x80, 0x70, 0x00, 0x01, 0x80, 0x60, 0x00, 0x00, 0x61, 0x80, 0x00, 0x00, 0x1e, 0x00, 0x00 ]
display.image(logo, 0, 10, 4, 32)
display.text('Hello World!', 40, 0, 1)
display.text('SSD1306 tested', 35, 15, 1)
display.text('on ' + os.uname()[0] + ' with', 35, 25, 1)
display.text('CircuitPython', 35, 35, 1)
display.text('rudalskim.tistory.com', 0, 55, 1)
display.show()
실행해 보면 아래와 같이 잘 동작되어 화면에 보여줍니다.
라즈베리파이 로고 이미지와 os.uname, 기타 text 등의 문자열이 잘 보여지네요.
Raspberry Pi Pico 보드에 OLED를 I2C로 연결하여 가장 기본적인 테스트를 해 보았습니다.
'Hardware > Raspberry PI' 카테고리의 다른 글
Raspberry Pi Pico에서 UART 사용하기 (0) | 2022.04.17 |
---|---|
Raspberry Pi Pico (W5100S-EVB-Pico) DHCP 사용하기 (0) | 2022.04.14 |
Raspberry Pi Pico에서 neopixel 사용하기 (0) | 2022.03.27 |
Raspberry Pi Pico (W5100S-EVB-Pico) PWM 사용하기 (0) | 2022.03.26 |
Raspberry Pi Pico (W5100S-EVB-Pico) ADC 사용하기 (0) | 2022.03.18 |
댓글