ESP32 마이크로파이썬 OLED 128x32

이 튜토리얼은 OLED 128x32 I2C 디스플레이를 사용하는 ESP32와 MicroPython의 활용 방법을 안내합니다. 여러분은 다음과 같은 내용을 배우게 됩니다:

ESP32 마이크로파이썬 oLED i2c 디스플레이

준비물

1×ESP32 ESP-WROOM-32 개발 모듈 쿠팡 | 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×SSD1306 I2C OLED 디스플레이 128x32 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) ESP32용 스크루 터미널 확장 보드 쿠팡 | 아마존
1×(추천) ESP32용 전원 분배기 쿠팡 | 아마존
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

128x32 I2C OLED 디스플레이 소개

128x32 I2C OLED 디스플레이 핀아웃

  • GND 핀: ESP32의 접지에 연결합니다.
  • VCC 핀: 전원 공급을 위해 ESP32의 5V 핀에 연결합니다.
  • SDA 핀: I2C 통신을 위한 데이터 핀입니다.
  • SCL 핀: I2C 통신을 위한 클럭 핀입니다.
oLED 핀아웃

선연결

  • ESP32와 OLED 128x32를 breadboard 사용하여 연결하는 방법
ESP32 마이크로파이썬 oLED 128x32 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

ESP32와 oLED 128x32 연결하는 방법

아래는 128x32 OLED 모듈과 ESP32 간의 배선표입니다.

128x32 OLED Module ESP32
VCC 3.3V
GND GND
SDA GPIO21
SCL GPIO22

ESP32 마이크로파이썬 코드 - OLED에 텍스트, 정수 및 부동소수점 숫자 표시

/* * 이 ESP32 마이크로파이썬 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 마이크로파이썬 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-micropython/esp32-micropython-oled-128x32 */ from machine import I2C, Pin from DIYables_MicroPython_OLED import OLED_SSD1306_I2C # Initialize I2C i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000) # Initialize the OLED display oled = OLED_SSD1306_I2C(128, 32, i2c) # Clear the display oled.clear_display() oled.display() oled.set_text_size(2) # Print a message to the display text = "DIYables" integer_value = 123 float_value = 45.678 oled.set_cursor(0, 0) oled.println(text) oled.set_cursor(0, 19) oled.println(str(integer_value)) # Print integer and move to the next line oled.set_cursor(50, 19) oled.println("{:.3f}".format(float_value)) # Print formatted float and move to the next line oled.display() # Ensure you update the display after writing to it

자세한 사용 방법

다음 지침을 단계별로 따라 주십시오:

  • 컴퓨터에 Thonny IDE가 설치되어 있는지 확인하십시오.
  • ESP32 보드에 MicroPython 펌웨어가 설치되어 있는지 확인하십시오.
  • 만약 이번이 MicroPython을 사용하는 ESP32를 처음 사용한다면, 자세한 지침은 ESP32 마이크로파이썬 - 시작하기 튜토리얼을 참조하십시오.
  • 제공된 다이어그램에 따라 OLED 디스플레이를 ESP32에 연결하십시오.
  • ESP32 보드를 USB 케이블로 컴퓨터에 연결하십시오.
  • 컴퓨터에서 Thonny IDE를 실행하십시오.
  • Thonny IDE에서 Tools Options로 이동하십시오.
  • Interpreter 탭에서 드롭다운 메뉴에서 MicroPython (ESP32)를 선택하십시오.
  • 올바른 포트가 선택되어 있는지 확인하십시오. Thonny IDE는 보통 이를 자동으로 인식하지만, 경우에 따라 수동으로 선택해야 할 수도 있습니다 (예: Windows에서는 COM12, Linux에서는 /dev/ttyACM0).
  • Thonny IDE의 Tools Manage packages로 이동하십시오.
  • “DIYables-MicroPython-OLED”를 검색한 후, DIYables가 만든 OLED 라이브러리를 찾으십시오.
  • DIYables-MicroPython-OLED를 클릭한 다음, OLED 라이브러리를 설치하기 위해 Install 버튼을 클릭하십시오.
ESP32 마이크로파이썬 oLED 라이브러리
  • 위의 코드를 복사하여 Thonny IDE의 에디터에 붙여넣으세요.
  • ESP32 보드에 스크립트를 저장하려면:

• 저장 버튼을 클릭하거나 Ctrl+S 키를 사용하세요.

• 저장 대화 상자에서 두 개의 섹션(이 컴퓨터와 MicroPython 장치)이 보입니다. MicroPython 장치를 선택하세요.

• 파일명을 main.py로 저장하세요.

  • 녹색 Run 버튼을 클릭하거나 F5를 눌러 스크립트를 실행하세요. 스크립트가 실행됩니다.
  • OLED 디스플레이를 확인하세요. 아래와 같이 표시됩니다.
ESP32 마이크로파이썬 oLED 표시 텍스트, 정수 및 부동 소수점 숫자

ESP32 MicroPython 코드 - OLED에 그리기

/* * 이 ESP32 마이크로파이썬 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 마이크로파이썬 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-micropython/esp32-micropython-oled-128x32 */ from machine import I2C, Pin from DIYables_MicroPython_OLED import OLED_SSD1306_I2C # Initialize I2C i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000) # Initialize the OLED display oled = OLED_SSD1306_I2C(128, 32, i2c) # Clear the display oled.clear_display() oled.display() # Draw a rectangle #oled.draw_rect(0, 0, 40, 25, 1) oled.fill_rect(0, 0, 40, 25, 1) # Draw a circle oled.draw_circle(64, 16, 15, 1) #oled.fill_circle(64, 16, 15, 1) # Draw a triangle #oled.draw_triangle(80, 31, 128, 31, 104, 0, 1) oled.fill_triangle(80, 31, 128, 31, 104, 0, 1) oled.display()

위의 코드를 실행하면, 아래와 같이 OLED 화면에 사각형, 원, 그리고 삼각형이 나타납니다.

ESP32 마이크로파이썬로 oLED에 사각형, 원, 삼각형 그리기

ESP32 MicroPython 코드 – OLED에 이미지 표시

아래 코드는 LCD 디스플레이에 이미지를 그립니다. 그 이미지는 DIYables 아이콘입니다.

/* * 이 ESP32 마이크로파이썬 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 마이크로파이썬 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-micropython/esp32-micropython-oled-128x32 */ from machine import I2C, Pin from DIYables_MicroPython_OLED import OLED_SSD1306_I2C import utime # Initialize I2C i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000) # Create the SSD1306 display object oled = OLED_SSD1306_I2C(128, 32, i2c) # Clear the display buffer oled.clear_display() utime.sleep(2) # 16x16 heart bitmap in RGB565 format heart_bitmap = [ # 'DIYables Icon', 72x32 0x00, 0x0f, 0xff, 0xff, 0x8f, 0xf8, 0x07, 0x38, 0x07, 0x00, 0x0f, 0xff, 0xff, 0x8f, 0xfe, 0x07, 0x1c, 0x0e, 0x00, 0x0f, 0xff, 0xff, 0x8f, 0xff, 0x07, 0x1c, 0x1c, 0x00, 0x0f, 0xff, 0xff, 0x8e, 0x07, 0x87, 0x0e, 0x1c, 0x00, 0x0f, 0xff, 0xff, 0x8e, 0x03, 0xc7, 0x0f, 0x38, 0x00, 0x0f, 0xff, 0xff, 0x8e, 0x01, 0xc7, 0x07, 0x38, 0x00, 0x0f, 0xff, 0xff, 0x8e, 0x01, 0xc7, 0x03, 0xf0, 0xf0, 0x0f, 0xff, 0xff, 0x8e, 0x01, 0xc7, 0x03, 0xe0, 0xfc, 0x0f, 0xff, 0xff, 0x8e, 0x01, 0xc7, 0x01, 0xe0, 0xfe, 0x0f, 0xff, 0xff, 0x8e, 0x03, 0xc7, 0x01, 0xc0, 0xff, 0x8f, 0xff, 0xff, 0x8e, 0x03, 0x87, 0x01, 0xc0, 0xff, 0x8f, 0xff, 0xff, 0x8e, 0x0f, 0x87, 0x01, 0xc0, 0xff, 0xcf, 0xff, 0xff, 0x8f, 0xff, 0x07, 0x01, 0xc0, 0xff, 0xef, 0xff, 0xff, 0x8f, 0xfc, 0x07, 0x01, 0xc0, 0xff, 0xef, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xfc, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0x0e, 0x0c, 0x0c, 0xc3, 0x07, 0xff, 0xef, 0xff, 0xfe, 0x0f, 0xec, 0xec, 0x99, 0x7f, 0xff, 0xef, 0xff, 0xfe, 0x0f, 0x04, 0xe4, 0x81, 0x0f, 0xff, 0xcf, 0xff, 0xfc, 0x0e, 0x32, 0xe4, 0x9f, 0xc7, 0xff, 0x8f, 0xff, 0xf8, 0x0e, 0x32, 0x4c, 0x9b, 0x67, 0xff, 0x0f, 0xff, 0xf0, 0x0e, 0x04, 0x0c, 0xc3, 0x0f, 0xfe, 0x0f, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0f, 0xff, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xfc, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff ] # Draw the bitmap on the display oled.draw_bitmap(0, 0, heart_bitmap, 72, 32, 1) # Update the display with the new image oled.display() utime.sleep(3) #oled.invert_display(True)

위의 코드를 실행하면, 아래와 같이 OLED 화면에 이미지가 나타납니다.

ESP32 마이크로파이썬 oLED에 이미지 표시

OLED 화면에 다른 이미지를 표시하려면, 다음 단계를 따르세요:

  • 이미지를 (어떤 형식이든) 비트맵 배열로 변환합니다. 이 온라인 도구를 사용하여 변환할 수 있습니다. 아래 이미지를 참고하여 이미지를 비트맵 배열로 변환하는 방법에 대한 안내를 받으세요. 이 예시에서는 ESP32 아이콘을 비트맵 배열로 변환했습니다.
이미지를 비트맵 배열로
  • ESP32 MicroPython 코드에서 기존의 비트맵 배열을 새로 변환된 배열로 교체합니다.
  • ESP32 MicroPython 코드에서 이미지의 가로와 세로 크기를 새 이미지의 치수에 맞게 조정합니다.

참고: 이미지 크기가 OLED 화면 크기보다 작거나 같도록 하세요.

OLED에서 텍스트/숫자를 수직 및 수평으로 자동 중앙 정렬하는 방법

아래의 MicroPython 코드는 OLED 화면에서 텍스트를 수직 및 수평으로 자동으로 가운데 정렬합니다.

/* * 이 ESP32 마이크로파이썬 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 마이크로파이썬 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-micropython/esp32-micropython-oled-128x32 */ from machine import I2C, Pin from DIYables_MicroPython_OLED import OLED_SSD1306_I2C import utime # Initialize I2C i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000) # Initialize the OLED display oled = OLED_SSD1306_I2C(128, 32, i2c) # Clear the display oled.clear_display() oled.display() def oled_display_center(oled, text): # Get the text bounds (width and height) of the string x1, y1, width, height = oled.get_text_bounds(text, 0, 0) # Set cursor to the calculated centered position cursor_x = (oled.WIDTH - width) // 2 cursor_y = (oled.HEIGHT - height) // 2 oled.set_cursor(cursor_x, cursor_y) # Print the text on the display oled.println(text) # Refresh the display to show the text oled.display() oled.set_text_size(2) oled_display_center(oled, "DIYables")

코드를 실행하면 OLED 화면에 텍스트가 수직 및 수평으로 중앙에 정렬됩니다.

ESP32 마이크로파이썬 oLED 수직 및 수평 중앙 정렬