코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2016-11-29 11:40:51
안녕하세요ㅎ 이번에 만들어 볼 프로젝트는 현재 버스 정보를 WiFi통신으로 받아와서 출력하는 기기 입니다!
최근에 부쩍 WiFi를 접할 기회가 많아지면서 WiFi통신으로 이것저것 건드려보고 있기는 합니다.
아두이노에서 WiFi를 사용하면서 느끼는 점은 '아직까지 숨겨져 있는 여러 정보들이 많다!' 라는 것을 느낍니다.
국내에서 아두이노 WiFi를 검색해보면 그다지 많은 자료가 나오지 않습니다. 코코아팹을 비롯해서 찾아보면 기껏해야 '날씨정보 받아오기' 정도가 나오곤 하는데 생각보다 API의 세계는 깊고 무궁무진합니다ㅎㅎ
본 글에서 작성할 내용은 버스정보를 아두이노로 받아오는 내용인데요.
분명 스마트폰을 가지고 있는 대한민국 국민이라면 버스정보를 받아오는 어플은 하나쯤은 설치했을거라 생각합니다. 물론 저도 설치했습니다!
<그 생.중.계 아두이노가 해보겠습니다>
그만큼 출퇴근이나 등하교, 혹은 데이트 시간을 맞추기 위해 중요한 어플이기도 합니다. (시간 약속은 중요하니까요!ㅋㅋ)
<앞으로는 이러지 말아요!!ㅜ>
이번에는 집에서 어플켜는 시간조차 아까우신 분들을 위한 원버튼 버스 알리미를 만들어보고자 합니다! 아침에는 1분 1초가 잠과의 싸움이기 때문이죠ㅎㅎ
2개의 글로 나눠쓸 예정이며 일단 이번 글에서는 API를 사용하는 법에 대해 설명해보도록 하겠습니다.
NO |
부품명 |
수량 |
상세설명 |
1 |
OrangeBoard WiFi |
1 |
WizFi250라이브러리 사용 |
부품명 | OrangeBoard WiFi |
파트 |
경기버스정보시스템을 사용하기 위해서는 일단 사이트에 먼저 접속합니다. 주소는 아래와 같습니다.
경기 버스 정보 - http://www.gbis.go.kr/
공유서비스를 클릭하면 경기버스정보의 OpenAPI를 개발할 수 있는 정보를 볼 수 있습니다.
매뉴얼에서는 사용방법을 볼 수 있고 테스트에서는 임의의 값을 넣어 어떻게 값이 출력되는지 미리 볼 수 있습니다.
그런데 API를 사용할 때 항상 필요한 것이 공개키인데 역시 경기버스정보시스템을 사용할 때도 공개키가 필요합니다.
이 공개키는 공공데이터포털에서 받을 수 있습니다.
무엇을 하던간에 미리 다 준비되어 있는 상태에서 해야 마음이 편합니다. 시작했는데 뭐가 준비되어 있지 않아 중간에 준비하려고 하면 김빠지죠...
공개키를 먼저 받아봅시다!
공공데이터포털에 접속합니다. 링크는 아래와 같습니다.
공공데이터 포털 - https://www.data.go.kr/
먼저 공개키를 받기 위해서는 회원가입을 해야합니다. 회원가입을 하고 로그인까지 한 후 검색창에 아래의 API를 검색합니다.
기반정보 관리는 설명과 같이 노선과 정류소 등의 버스에 관한 여러 정보 데이터가 담겨있는 텍스트 파일을 받을 수 있는 API입니다.
텍스트 파일을 받아 각 정류소별 ID, 노선별ID를 알아야 버스 정보를 조회할 수 있습니다.
활용신청을 클릭하고 나오는 페이지에서 신청을 하면 공개키를 받을 수 있습니다.
공개키는 우측 상단의 마이페이지 - 오픈API에서 확인할 수 있습니다.
※ 공개키는 신청 후 1시간이 경과한 후부터 사용이 가능합니다.
그 전에는 유효한 공개키를 입력하더라도 유효하지 않다고 뜨니 유의하세요.
위의 API외에도 아래와 같이 버스도착정보 조회 API가 있는데
처음에는 두 개다 신청했지만 신청하고 나서 공개키를 보니 2개가 같은 것으로 보아 둘 중 하나만 신청하면 모두 사용가능한거 같습니다.
위 작업이 끝났다면 이제 다시 경기버스정보 페이지로 돌아와 버스 노선, 정류소 등의 데이터가 담긴 데이터를 받습니다.
사실 꼼수가 있긴한데 꼭 공개키를 받지 않더라도 아래와 같이 공유서비스 - 테스트 - 기반정보 조회로 가셔서 테스트값 입력을 클릭후 전송을 하면 텍스트 파일을 받을 수 있는 링크가 아래에 출력됩니다.
어떤 방법을 사용하셔도 받는 데이터는 동일하니 데이터에 뜨는 주소로 텍스트 파일을 받습니다.
받아야할 텍스트 파일은 routestation날짜.txt입니다. 텍스트파일 치고는 용량이 큰 편입니다.
받고나면 아래처럼 알 수 없는 숫자와 글자가 띄어쓰기 없이 적혀있는 것을 볼 수 있습니다.
여기서 검색을 통해 노선ID와 정류소ID를 찾아야 합니다.
검색방법은 아래와 같습니다.
"버스번호|정류소이름"
※ 예를 들어 서현역에서의 17번버스 정보를 보고 싶다면 17|서현역을 검색하면 찾을 수 있는데 그 옆쪽에 9자리의 숫자|9자리의 숫자를 알아두셔야 합니다.
17|서현역을 검색하면 오른쪽에 12345679|987654321과 같은 숫자가 있습니다.
123456789는 17번 버스의 노선ID이고 987654321은 서현역의 정류소ID입니다.
그 값을 찾았다면 테스트페이지에서 테스트해 볼 수 있습니다.
공개키를 적고 검색한 노선ID와 정류소ID를 적고 전송을 했더니 정상적으로 결과가 출력되었습니다.
여기까지 성공했다면 절반 이상은 왔습니다. 이제 아두이노 코드를 통해 시리얼모니터에서 이 값을 출력하는 일만 남았습니다!
요청 결과에 대한 상세 내용은 매뉴얼에 아래와 같이 포함되어 있으니 참고하세요.
코드에서 SSID, PASS, APIKEY, ROUTEID, STATIONID는 사용자가 직접 입력하는 부분입니다.
각각 WiFi이름, WiFi패스워드, 공개키, 노선ID, 정류소ID입니다.
위 데이터를 입력 후 업로드하고 시리얼 모니터를 열게되면 아래와 같이 데이터를 일렬로 받아오는 것을 볼 수 있습니다.
버스 정보 API의 경우 아래 사진과 일일 트래픽양이 존재합니다. 그렇기 때문에 무한정 요청이 불가능하고 몇 초 단위로 요청하는 것 또한 트래픽 제한이 걸릴 수 있으니 실제로 사용하신다면 시간 배분을 잘 해야합니다.
위 코드에서는 60초에 한번씩 요청할 수 있도록 설정하였으며 그 부분은 사용자가 변경할 수 있습니다.
아두이노 시리얼모니터의 가장 큰 단점이면 역시 한글을 표현하지 못하는 것이 아닐까 합니다. 그렇기 때문에 버스 번호판의 정보를 출력할 수 없고 불러오는 과정에서도 한글이 깨져서 출력되는 것을 볼 수 있습니다. 이 부분이 가장 크게 감안해야 할 부분이 아닌가 싶습니다.
이번 글에서는 API를 사용하여 데이터를 시리얼 모니터에 출력하는 것까지 사용했고 다음글에서 파싱을 통해 원하는 정보를 추출하여 LED에 표현하여 기기를 만들어 보겠습니다!
수박쨈