서장
예전부터 아침에 일찍 일어날 때 항상 이런게 있었음 좋겠다 싶었던 것이 있다.
바로
버스 / 지하철 시간 표시기
이것이 대체 뭔가 싶은데 그냥 말그대로 버스나 지하철 시간을 표시해주는 어떤 장치이다.
나는 아침 잠이 참 많은 사람으로서 미리 일찍 일어나기보단 최소한의 아침 준비 시간만 남겨둔채로 일어나는 편이기에...
아침에 눈 뜨자마자 바쁘게 준비하고 나갈 때 쯤 버스 시간을 확인하고 타러 나가곤 한다.
그러다보니 문제점
일어나고 준비해서 나갈 때 시간이 매일 분 단위로 칼같이 지켜지지 않고 쁠마 몇 분씩 차이나게 되는데 어떨땐 1~2분, 4~5분 차이로 버스를 보내게 되는 상황이 꽤 많이 발생한다... 배차 간격이 꽤 돼서 놓치면 15분 이상 기다려야 하기도 하고...
그럴 때 마다 항상 '준비하기 전에 버스 오는 상황을 봤으면 조금 더 서둘렀을텐데...' 하고 후회를 하는데
물론 바로 폰을 켜서 보면 되긴 하지만 뭔가.. 번거롭기도 하고 아침에 이상하게 그게 잘 되지 않는다.
그래서 예전부터 하나 있었음 좋겠다고 생각한
버스 시간'만' 보이게 하는 어떤 장치!
를 만들어보고자 한다.
재료
VFD
버스 시간 정보를 띄울 디스플레이로 예전에 이번 프로젝트를 생각하며 사뒀던 VFD (Vaccum Fluorescent Display, 진공 형광 디스플레이) 를 사용해보려 한다.
타오바오 쇼핑을 하다가 우연히 발견했는데 폰트가 연한 하늘색으로 빛이 나서 레트로하면서도 아두이노 스타터 키트 같은데 보면 항상 있는 그 초록색 투박한 LCD 보다 훨씬 밝고 이쁘기 때문에 언젠가 한 번 사용해보고 싶었다.
뭔가 옛날에 택시 미터기에도 쓰였던거 같기도 한데 요즘은 잘 안 쓰는 추세인듯 하다.
ESP32 (Lolin D32)
ESPRESSIF 사의 ESP32 이다.
이것도 언제 구매 또는 얻게 됐는지 모르겠지만 놀고 있길래 꺼내보았다.
VFD 모듈을 사용하기 위해 사전 조사를 조금 해보았는데 모듈 작동을 위한 2개의 github 를 발견하였고 Micropython 이라는 것으로 모듈을 구동시키는 것을 알게 되었다.
https://github.com/zhcong/8MD06INKM-for-micropython
https://github.com/Reboot93/MicroPython-8MD-06INKM-display-driver
Micropython
Micropython 이란 마이크로 컨트롤러 (ESP8266, ESP32 등등) 와 같은 제한된 리소스를 가진 하드웨어에서 Python3 를 실행하기 위해 만들어진 인터프리터 언어이다.
표준 Python 인터프리터의 모든 기능을 포함하고 있진 않지만
- 낮은 메모리 사용과 빠른 실행이 가능하여 CPython 보다 리소스가 적은 환경에서도 효과적으로 작용
- GPIO, I2C, SPI 등 다양한 하드웨어 인터페이스를 직접 제어할 수 있는 라이브러리와 모듈을 제공
- 대화형 프롬프트를 통해 코드를 즉시 실행하고 테스트할 수 있어 개발 과정이 신속하고 유연
한 장점을 지니고 있다.
지원하는 마이크로 컨트롤러는
https://micropython.org/download/#esp32
여기에 나와있고
나도 처음엔 놀고 있는 라즈베리파이 쓰면 되겠거니 했지만 지원하는 기기가 따로 정해져있어 ESP32 를 꺼내게 되었다.
설치
0. ESP32 작동 확인
우선 정말 오랜만에 꺼낸 ESP32 이기에...
또 정말 오랜만에 아두이노 IDE 를 켜서 간단히 작동 확인을 해주었다.
다행히 잘 작동하는 것을 확인하였다.
(ESP32 관련 보드를 사용하기 위해선 IDE 에 해당 보드 라이브러리를 직접 넣어주어야 한다. 자세한건 인터넷에...)
1. Micropython 설치
https://www.wemos.cc/en/latest/tutorials/d32/get_started_with_micropython_d32.html
내가 사용할 보드는 Lolin D32 이기에 위 튜토리얼을 보고 진행하였고 Requirements 까지 (펌웨어 다운까지) 따라하였다.
내 보드에 맞는 펌웨어까지 다운 받았다면 바로 밑 Flash Firmware 에 있는 코드를 입력하지 않고
아까 펌웨어를 다운 받는 페이지에 있는 코드로 펌웨어를 입혀줘야 한다.
https://micropython.org/download/ESP32_GENERIC/
여기까지 되면 보드에 Micropython 을 사용할 준비가 완료된 것이다.
2. Thonny 설치
라즈비안 OS 에서 항상 보던 Thonny IDE 를 Micropython 로 개발을 할 때 환경을 쉽게 설정할 수 있어 많이 쓴다고 한다.
Thonny 를 깔고 Configure Interpreter 에서 ESP32 를 설정해준다.
연결이 되면 이제 자유롭게 코드 작성을 하면 된다.
3. 코드 작성 및 VFD 연결
우선 github 에 있는 코드를 그대로 긁어와 VFD 가 제대로 작동하는지 알아 볼 것이다.
이렇게 github 에 있는 소스를 대충 긁어와 작성을 하였는데
해당 github 는 핀 설정이 Raspberry pi pico 를 기준으로 작성을 해서 ESP32 기준으로 핀을 바꿔서 입력해주어야 한다.
VFD 핀 | Lolin D32 핀 | 설명 |
RESET | GPIO5 | 모듈 리셋 핀 |
CS | GPIO26 | 칩 선택 |
EN | GPIO4 | 모듈 활성화 핀 |
SCK | GPIO18 | SPI 클럭 |
MOSI | GPIO23 | SPI 데이터 전송 |
VCC | 3.3V | 전원 |
GND | GND | 접지 |
로 핀을 연결해주고 소스를 고친다.
from machine import SPI, Pin
from _8MD06INKM import _8MD06INKM
import time
rest_pin = Pin(5, Pin.OUT)
cs_pin = Pin(26, Pin.OUT)
hv_en_pin = Pin(4, Pin.OUT)
spi = SPI(
1,
baudrate=100_000,
polarity=1,
phase=1,
sck=Pin(18, Pin.OUT),
mosi=Pin(23, Pin.OUT)
)
display = _8MD06INKM(spi, rest_pin, cs_pin, hv_en_pin)
display.init()
display.set_brightness(100)
time.sleep(1)
display.set_brightness(255)
display.hv_off()
time.sleep(1)
display.hv_on()
def print_all(chars):
for i in range(8):
if type(chars[i]) == int:
display.code(i, chars[i])
else:
display.print_char(i,chars[i])
print_all('Hello- ')
bits=[0xff,0x41,0x41,0x41,0xff]
display.print_bits(7, bits)
4. 실행
코드를 작성하고 VFD 연결을 완료 후 Thonny 에서 스크립트를 실행하면..!
언제나 그렇듯 한 번 헤매고 글자를 띄울 수 있을 줄 알았는데 별 문제 없이 한방에 잘 뜨는 것을 확인했다!
마무리
의외로 순탄(?)하게 모듈이 잘 작동하는 것을 확인하였고
이제 진짜 버스 api 를 붙여서 꿈에 그리던 '버스 시간 표시기' 를 만들어보도록 하겠다.
To be continue...
'공돌 ━━━━━ > 플젝' 카테고리의 다른 글
ESP32 (Micropython) 와 VFD 를 이용한 버스 시간 디스플레이 만들기 - ② (0) | 2024.12.28 |
---|