2018. 12. 25.

wemos 와 raspberyy pi 를 이용한 dot matrix 버스정보표시

WEMOS를 이용한 버스출도착 정보 전광판 제작
Version 0.2
kawadakr@gmail.com
개요 
작업실 앞에 있는 버스정류장에 버스출도착 정보가 없어서 표시 해보려고 함
와이파이가 되는 아두이노계열 wemos(lonin)와 8x8도트 매트릭스를 이용
이 문서를 만든 목적
 페이스북 개발 그룹에 뭔가를 만들거나 개발 할 때 무엇을 배워야 할지 무엇이 필요한 지 몰라 질문 하는 사람들이 많은 것을 보고 도움이 되고자 적어 보았음. 
 본 프로젝트는 간단한 프로젝트이지 만, 기획/준비/프로그램개발/전자회로설계/하드웨어케이스설계/하드웨어제작등의 생산품을 위해서 필요한 전단계를 거치는 과정을 포함 하고 있다.
준비물 
• wemos(LONIN) 
• dot matrix 8x8  2개 (드라이버포함)  
• raspberry pi ( gateway api server) 
• wifi 공유기
• 전원
• 버스출도착정보-공공디비접속 계정 및 키 
• 포맥스 보드 (전자부품 고정/배치용)
• 3d-printer 케이스제작용(없으면 다른걸로 만들어 보세요~)
• 설계용 fusion360 s/w stl 파일은 git 에 올려놨어요
결과물
• https://github.com/JamesSeo/arduino_busInfo
전체구조

전체 작업 순서
하드웨어주문
• 제작에 필요한 하드웨어를 주문한다. ( www.devicemart.co.kr, eleparts.co.kr) .
버스출도착 정보 얻기 : https://www.data.go.kr/
• 공공디비 사이트에서 얻을수 있으며, 바로 쓸수는 없고 회원가입을 하고, 접속키를 발급해야 한다. 
• 어떤 목적으로 사용 할 것인지등을 쓰고, 바로 사용이 가능하다.
• 관련 스펙은 문서를 다운받을 수 있으니 잘 읽어보자. 하나의 api를 사용하기 위해서 필요한 관련 추가 파라메터는 다른 api를 사용해야 할수도 있으니 약간의 노력이 필요핟.
api 호출  ( gateway api 서버)
• 결과 값이 xml 인데, wemos에서 직접 그값을 파싱해서 사용 할 수도 있지만, 그러면 실제 하는 일에 비해서 코드가 길어지는 문제와, 2차 가공의 문제등으로 gateway를 두기로 했다. gayteway의 역할은 xml 읽어드려서 단순화한 정보로 바꾸어 wemos로 전달하는 역할을 한다. 
• gateway서버는 Flask 에 python을 이용해서 rest-api서버를 만들고, wemos에서  정보요청을 하면, 공공디비서버에 대신접속을 하여 필요한 api를 대신 호출하고, XML중에서 필요한 정보만 뽑아서, 단순한 텍스트로 변환을 한다.
• XML 문서가 아주 친절하지는 않기 때문에 이런 저런 api를 불러 보면서 호출시 필요한 정보가 어떤 것인지 확인 해야 하고, 웹사이트 자체에 테스트 하는 기능이 있어서  테스트가  가능하다.
 
Dot-matrix 글자표시 (wemos)
• 아두이노는 스펙에 따라 메모리 크기가 다르지만, 일반 컴퓨터에 비하면 용량이 매우 작기 때문에 최대한 간단하게 코드를 구성 하려고 했다.
• dot-matirx는 비트맵을 뿌려주는데, 라이브러리를 이용하면, 아스키 코드는 간단하게 표시 할 수 있다. 그러나, 한글을 표시하기 위해서는 각 글자에 맞는 비트맵이 필요 한데, 이번 모델에서는 '분,초,곧,도착' 이라는 글자만 필요하므로, wemos내에 비트맵을 정의해 놓고, gateway쪽에서. 분:m, 초:s, 후:a, 곧:n, 도:b, 착:c 등으로 재변환해서 전달하면 wemos쪽에서 문자에 해당하는 한글 비트맵을 뿌려주는 방법을 선택했다. 좀 더 스마트 한 방법이 있을지도 모르지만, 이 부분은 이 정도선에서 마무리 짓기로 했다. 
• Ex) 5분 10초후 도착 —> 5m 10sa bc (후 글자는 별도로 처리)
• 라이브러리에서는 매트릭스의 개수를 지정할수 있기 때문에 필요에 따라서 크기를 조정해서 더 크게 만들 수도 있다.
• 관련 라이브러리는 include된 라이브러리를 검색해보면 찾을수 있다.
Base 조립/배치
• 취미 공작에 많이 사용되는 Fomax 를 잘라서 m2, m3나사를 이용해서 wemos와 dot-matrix를 고정했다.
Boxing/housing
• 외부에 노출되어야 하기 때문에 최종 housing은 3d printer로 출력하고, 외부에 lcd가 노출되어야 하므로 이부분은 씨디 케이스를 잘라서 붙였다. 
• 모델링은 autocad사에서 나온 fusion360을 이용했다. 뚜껑부분과 하단 박스부분으로 나누어져 있다.
• stl파일은 git에 올려놓았다.
제작 과정 사진 -하드웨어
검정색 바닥이 포맥스, 8x8 dot matrix이다. 

Led 아래쪽은 플라스틱 서포터를 이용해서 고정을 했다.(흰색 나사모양)

1차 배선 연결 변경 - 원래 있던 커넥터는 높이가 높아서, 핀을 직접 랩핑기로 선을 연결했다. (실제로는 더 타이트 하게 변경했음)

1차 완성되어 프로그램 로딩및 버스 API연동 된 상태
https://www.youtube.com/watch?v=iPfTcxBjmMI
 
제작과정 사진 - case/housing 설계, 제작

 

 

표시창 부분에는 씨디케이스를 잘라서 순간 접착제로 붙였다.

최종 완성된 모습 ( 글씨는 스크롤 된다)