IoT Wireless

Get Weather data from OpenWeatherMap with WizFi250 본문

WiFi module

Get Weather data from OpenWeatherMap with WizFi250

DH0815 2014. 11. 14. 11:25

아래에는 WizFi250으로 OpenWeatherMap 사이트에서 제공하는 Open API로 특정한 도시(Seoul)의 날씨 정보 를 가져오는 예제이다. (OpenWeatherMap에서 제공하는 JSON과 XML 예제를 이용)

먼저, OpenWeatherMap에서 API 관련 내용을 확인한다.

Calls by city name. API respond with a list of results that matchs a searching word.
In JSON : api.openweathermap.org/data/2.5/weather?q=London,uk
In XML : api.openweathermap.org/data/2.5/weather?q=London&mode=xml
http://openweathermap.org/current

그리고, PC에서 위에 설명된 내용으로 JSON과 XML 형식으로 서울의 날씨 데이터를 가져오고, 이 과정에서의 Network Packet을 아래와 같이 캡쳐했다.


위에 붉은색으로 표시된 부분이 PC가 보낸 데이터인데, 불필요한 부분을 제거하고 아래아 같은 데이터를 Request Data로 사용할 예정이다.
여기에서 \r(Carriage return, 0x0d), \n(Line Feed, 0x0a)등의 정확한 입력과 전송하는 데이터 크기(72 Byte, 81 Byte)에 유의해야 한다.
* JSON
GET /data/2.5/weather?q=Seoul HTTP/1.1\r\n
Host: api.openweathermap.org\r\n\r\n
(72 Byte)

* XML
GET /data/2.5/weather?q=Seoul&mode=xml HTTP/1.1\r\n
Host: api.openweathermap.org\r\n\r\n
(81 Byte)
이제, 사전 준비 작업은 끝났고, WizFi250을 실제 구동하여 보겠다.
먼저, AP에 Association을 한다.
AT+WSET=0,Team Wiki
[OK]
AT+WSEC=0,,12345678
[OK]
AT+WNET=1
[OK]
AT+WJOIN
Joining : Team Wiki
Successfully joined : Team Wiki

[Link-Up Event]
  IP Addr    : 192.168.101.33
  Gateway    : 192.168.101.1
[OK]
OpenWeatherMap API 서버의 IP 주소를 가져온다.
AT+FDNS=api.openweathermap.org,3000
128.199.164.95
[OK]
OpenWeatherMap API 서버에 접속한다.
AT+SCON=O,TCN,128.199.164.95,80,,0
[OK]

[CONNECT 0]
OpenWeatherMap API 서버에 JSON Request Data를 보낸다.
AT+SSEND=0,,,72
[0,,,72]
(여기에서 위에 설명된 72 Byte를 전송하면 된다.)
[OK]
그럼, OpenWeatherMap API 서버에서 아래와 같은 JSON Reply를 보내온다.
{0,128.199.164.95,80,857}HTTP/1.1 200 OK
Server: nginx
Date: Wed, 06 Aug 2014 00:06:49 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Source: redis
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST

221
{"coord":{"lon":126.98,"lat":37.57},"sys":{"type":3,"id":8519,"message":0.033,"country":"KR","sunrise":1407184771,"sunset":1407234998},"weather":[{"id":721,"main":"Haze","description":"haze","icon":"50n"},{"id":500,"main":"Rain","description":"light rain","icon":"10n"},{"id":701,"main":"Mist","description":"mist","icon":"50n"}],"base":"cmc stations","main":{"temp":297.26,"pressure":1005,"humidity":83,"temp_min":295.15,"temp_max":298.15},"wind":{"speed":1,"deg":140},"clouds":{"all":40},"dt":1407277800,"id":1835848,"name":"Seoul","cod":200}

0
수신이 완료되고 Connection이 남아 있다면, OpenWeatherMap API 서버와의 연결을 종료한다.
AT+SMGMT=ALL

[DISCONNECT 0]
[OK]
자, 이제 위에서 받은 JSON 데이터를 분석하여 원하는 날씨 데이터(서울의 온도, 습도, 바람 등)를 사용하면 된다.



아래에는 XML로 데이터를 받을 경우의 예제인데, 근본적으로 WizFi250의 운용 형태는 JSON과 비슷하다.
AT+SCON=O,TCN,128.199.164.95,80,,0
[OK]

[CONNECT 0]
AT+SSEND=0,,,81
[0,,,81]
(여기에서 위에 설명된 81 Byte를 전송한다.)
[OK]

{0,128.199.164.95,80,969}HTTP/1.1 200 OK
Server: nginx
Date: Tue, 05 Aug 2014 23:59:54 GMT
Content-Type: text/xml; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Source: back
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST

29a


  
    
    KR
    
  
  
  
  
  
    
    
  
  
  
  
  
  



0


AT+SMGMT=ALL

[DISCONNECT 0]
[OK]


'WiFi module' 카테고리의 다른 글

GCM(Google Cloud Messaging for Android) with WizFi250  (0) 2014.11.14
WizFi250 F/W Manual Upgrade  (0) 2014.11.14
AT Command Host Source Sample  (0) 2014.11.14
Xively Demo with WizFi250  (0) 2014.11.14
WizFi250 DNS Query & TCP Client Connection  (0) 2014.11.14