A PHP Error was encountered

Severity: Notice

Message: Undefined index: HTTP_ACCEPT_LANGUAGE

Filename: core/KF_Controller.php

Line Number: 155

아두이노로 실시간 버스정보 받아오기 (1)

프로젝트

나도 메이커! 메이커스 여러분들의 작품/프로젝트를 공유하는 공간입니다.

아두이노로 실시간 버스정보 받아오기 (1)

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를 적고 전송을 했더니 정상적으로 결과가 출력되었습니다.

 

여기까지 성공했다면 절반 이상은 왔습니다. 이제 아두이노 코드를 통해 시리얼모니터에서 이 값을 출력하는 일만 남았습니다!

 

 

 

 

요청 결과에 대한 상세 내용은 매뉴얼에 아래와 같이 포함되어 있으니 참고하세요.

 

 

 

 

소프트웨어 Coding

 

 

 

 

코드에서 SSID, PASS, APIKEY, ROUTEID, STATIONID는 사용자가 직접 입력하는 부분입니다.

각각 WiFi이름, WiFi패스워드, 공개키, 노선ID, 정류소ID입니다.

 

 

 

 

위 데이터를 입력 후 업로드하고 시리얼 모니터를 열게되면 아래와 같이 데이터를 일렬로 받아오는 것을 볼 수 있습니다.

 

 

 

 

버스 정보 API의 경우 아래 사진과 일일 트래픽양이 존재합니다. 그렇기 때문에 무한정 요청이 불가능하고 몇 초 단위로 요청하는 것 또한 트래픽 제한이 걸릴 수 있으니 실제로 사용하신다면 시간 배분을 잘 해야합니다.

위 코드에서는 60초에 한번씩 요청할 수 있도록 설정하였으며 그 부분은 사용자가 변경할 수 있습니다.

 

 

 

 

아두이노 시리얼모니터의 가장 큰 단점이면 역시 한글을 표현하지 못하는 것이 아닐까 합니다. 그렇기 때문에 버스 번호판의 정보를 출력할 수 없고 불러오는 과정에서도 한글이 깨져서 출력되는 것을 볼 수 있습니다. 이 부분이 가장 크게 감안해야 할 부분이 아닌가 싶습니다. 

이번 글에서는 API를 사용하여 데이터를 시리얼 모니터에 출력하는 것까지 사용했고 다음글에서 파싱을 통해 원하는 정보를 추출하여 LED에 표현하여 기기를 만들어 보겠습니다!

 

 

수박쨈

WiFi, WiFi보드, Arduino, OrangeWiFi, OpenAPI, API, 버스 정보, 버스, 시스템
profileimge

생각의여름 2016-11-30 16:47:07

평소 관심있던 분야라 아주 흥미롭게 읽었습니다!! 벌써부터 2편이 기대되네요ㅎㅎ.. 빨리욧..!

profileimge

정원교 2016-12-05 17:33:18

아주 유익한 내용입니다! 인천이나 다른 시도에서 공공정보를 사용하는 방법도 동일한가요?