I2C 통신방식 2.5인치 128×64 LCD 사용기 – GMG12864-59N (ST7567S 드라이버, COG Type)

I2C 통신방식 2.5인치 128×64 LCD 사용기 – GMG12864-59N (ST7567S 드라이버, COG Type)

SPI 방식 2.5인치 12864 LCD의 아쉬웠던 점

이전 글에서 2.5인치 크기의 128×64 해상도를 가지는 LCD의 자세한 사용법을 소개한 바 있었다.

제조사에서는 COG(Circuit on Glass) 형식으로 제조된 제품으로 두께 나 기술적 측면에서 여러 가지 장점이 있다고 소개했는데, 개인적으로는 기존의 44780 칩을 사용하는 소형 LCD보다(16×2 글자 표시) 보다 4배나 많은 16×8줄로 글자를 표시할 수 있는 것이 가장 중요한 장점이었다.

SPI 방식

이 LCD의 자세한 특징 및 사용법에 대해서는 이전 글 (https://blog.naver.com/mythee1/223268494127)을 참조하기 바란다.

그런데 이 LCD는 한 가지 아쉬운 점이 있었다. 바로 통신방식이 SPI 방식이었다.

뿐만 아니라 통상적인 SPI 통신 인터페이스가 전원 선을 포함하여 6선으로 통신이 이루어지는데 비해, SPI이면서 7선의 통신 방식이고 LCD Backlight를 위한 별도의 조명용 전원까지 포함하는 총 9선이나 배선이 필요하였다.

한마디로 배선이 너무 복잡하게 느껴졌다.

통신 인터페이스 부분

또한 전형적인 SPI 통신에서 MOSI, MOSO, CLK, CS 등의 4핀 외에도 A0 및 Rst 등의 명칭을 가지는 핀들이 추가적으로 있어 배선이 매우 복잡해지고, 코드에서도 이 핀들을 모두 지정해 주는 번거로움이 있었다. (실제로 MOSO는 LCD로부터 데이터 출력이 있지는 않으므로 사용되지는 않으나, A0, RST 등을 추가로 지정 필요)

I2C 2.5인치 12864 LCD

그래서 찾게 된 것인 혹시 통신 인터페이스가 SPI가 아닌 통상적인 I2C 방식이면서 동일한 성능을 가진 제품이 없는지 꽤 오래 찾게 되었고, 그 과정에서 극히 일부 업체에서 동일 사양의 제품이면서, 통신 방식이 I2C인 LCD를 판매하는 것을 발견하게 되었다.

동일한 2.5인치이고, 동일한 128×64 해상도를 가지는 GMG12864-59N라는 모델이었다.

기존 SPI 방식과 동일한 사양의 제품이면서, I2C 통신이 가능하도록 통신과 연관된 드라이버 칩이 ST7567S으로 변경된 점만 다르다고 하며, 내부적으로는 기존 SPI 방식에서 사용되는 ST7565와 호환성을 가진다고 한다(통신 제외)

이 제품의 전면은 다음과 같은데 테두리가 플라스틱으로 베젤이 형성되어 있는 특징이 있었다.(이 때문에 약간 작게 보이기는 한다.)

뒷면부 모습은 다음과 같은데, 4개의 핀 만이 배치되어 있고, IIC라고 통신방식이 표기되어 있다.

전면부 상단에도 I2C 용 핀들의 기능이 표시되어 있다.

기존 SPI 타입 제품과 모습을 비교하면 다음과 같다.

기존 SPI 타입 제품과 뒷면 모습을 비교하면 다음과 같다. I2C 방식의 뒷면이 훨씬 단순하고 간결해 보기에 시원하다. 당연히 I2C 방식이 배선도 용이해진다.

I2C 방식 12864 LCD 시험 사용

다음과 같이 LCD와 라즈베리 파이 피코를 연결해서 회로를 구성했다. 동작전압은 3.3V로 동일하다.

I2C 채널은 0을 사용하면서, SDA와 SCL을 각기 GP0과 GP1에 연결해 주었다. 이 제품은 특히 LCD Backlight 용 선이 별도로 있지는 않아서, 필요한 배선의 수가 정말 딱 4개로 충분했다.

다음과 같은 매우 간단한 시험용 코드를 이용하여, 시험 사용해 보았다.

from machine import Pin, I2C
from ST7567s import ST7567s
import time

i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=400000)
#Addr is the I2C address of your screen, it may be set by screen vender to values among 0x38-0x3F.
lcd = ST7567s(i2c,addr=0x3F,elecvolt=0x28,regratio=0x04,invX=False,invY=True,invdisp=False)
while(True):
    lcd.fill(0)
    lcd.text("0123456789012345",0,0,1)
    lcd.text("Sitronix ST7567s",0,16,1)
    lcd.text("Micro Python",0,32,1)
    lcd.show()
    time.sleep(2)

결과적으로 이 라이브러리와 위의 시험용 코드를 이용하여 이 I2C 방식 LCD를 시험 사용해 본 모습은 다음과 같다.

SPI 방식과 동일하게 정상적으로 잘 동작한다.

I2C 방식용 ST7567s 라이브러리

참고로 위의 시험용 코드에 적용한 마이크로파이썬 ST7567s 라이브러리는 Github에서 발견하여 사용하였다.

다만, Github 검색 결과, SPI 용 라이브러리는 다수인 반면, I2C 용 마이크로파이썬 라이브러리는 매우 드물었다.

개인적으로는 이 글을 작성하는 시점 기준으로는 마이크로파이썬 언어를 사용하면서 I2C 용으로 쉽게 사용할 수 있는 라이브러리는 위의 라이브러리 1개만을 발견할 수 있었다. (https://github.com/ChangboBro/ST7567s-micropython-framebuff/blob/main/ST7567s.py)