2015년 3월 26일 목요일

에디슨에서 128x64 OLED 모듈 사용하기 (Using SSD1306 based 128x64 I2C OLED module in Intel Edison)

인텔 에디슨에 SSD1306 기반의 128x64 OLED 모듈을 연결해 구동해 보았다.


사진에서 볼 수 있는것처럼 I2C 방식을 사용해 단 4핀(Vcc, GND, SCL, SDA)만으로 구동이 가능하다. Aliexpress등에서 개당 약 $3.5 정도에 구입이 가능하다. 크기는 0.96", 해상도는 128x64, 흑백(단색) OLED 모듈이다.
인터넷을 찾아보면 아두이노에 이 모듈을 사용한 예제는 여러가지 종류의 라이브러리를 사용한걸 쉽게 찾아볼 수 있는데 에디슨에서 사용한 예제는 찾아보기가 쉽지 않다.

그래서 라이브러리들을 참조해 에디슨용 파이선 클래스를 만들어 보았다. 일단 두가지 폰트(6*8, 8*16)로 화면에 텍스트를 출력하는게 가능하다.

에디슨에서는 I2C를 사용하기 위해 mraa 라이브러리를 사용했다.


에디슨용 아두이노 breakout 보드에서 위와 같이 연결해 줬다. 아두이노 쉴드에 나와있는 I2C를 사용하려면 mraa에서 6번 버스를 사용하면 된다. 그리고 OLED 모듈의 경우 I2C 주소가 0x78로 표시되어 있지만 실제로 0x3C를 사용해야 한다.

즉 파이선에서 I2C를 사용하기 위한 초기화는 다음과 같은 식으로 하면 된다.

import mraa

display = mraa.I2c(6)
display.address(0x3c)

일단 I2C가 설정되고 나면 이후 초기화나 ssd1306의 레지스터 설정값들은 아두이노용 라이브러리를 참조해 작성해주면 된다. 작성한 코드는 아래 링크의 zip 파일을 다운받으면 된다. 압축을 해제하면 Oled.py 파일이 생길 것이다.

사용하는 방법은 간단하다.

python
>>> import Oled
>>> display = Oled.Oled()
>>> display.cls()
>>> display.printStr(0,0,"Hello",1)
>>> display.printStr(0,1,"World", 1)
>>> display.printStr(0,1,"Edison rules!",2)
>>>

위와 같이 모듈을 import 한 후 Oled() 클래스 인스턴스를 만들어 주면 모듈이 초기화 된다. cls()는 화면을 지우는 메소드이고 printStr(x, y, string, size)은 화면에 문자열을 출력한다. 처음 x, y는 문자열을 출력할 좌표이고, string은 출력할 내용, size는 폰트 크기로 여기서는 1(6*8) 또는 2(8*16)만 사용할 수 있다.

* 단 mraa 라이브러리는 레지스터에 값을 기록할 때 한꺼번에 여러 바이트를 보내는 함수가 없어 cls()같은 경우 실행속도가 좀 느리다. mraa 라이브러리를 조금 수정하면 좀 더 빠르게 최적화가 가능하다.

명령어 프롬프트에서 다음 명령으로 직접 프로그램을 실행했을 때 실행 결과 동영상이다.

# python Oled.py


Download : Oled.py.zip

댓글 없음:

댓글 쓰기