[WizFi250 심화과정 7]Cortex M3에서 Wi-Fi 사용하기 – OpenAPI를 이용하여 날씨 정보 가져오기

0
1010

OpenWeatherMap

OpenWeatherMap에서 제공하는 Open API를 이용하면 특정한 도시의 날씨 정보를 가져올 수 있다. OpenWeatherMap에 대한 자세한 정보는 아래 주소를 참고 하기 바란다.

openweathermap

openweathermap

OpenWeatherMap의 API

JSON 포맷으로 정보를 받기 위한 API

GET /data/2.5/weather?q=Seoul HTTP/1.1\r\n Host: api.openweathermap.org\r\n\r\n

XML 포맷으로 정보를 받기 위한 API

GET /data/2.5/weather?q=Seoul&mode=xml HTTP/1.1\r\n Host: api.openweathermap.org\r\n\r\n

날씨 정보를 가져오기 위한 WizFi250 AT Command

 

WizFi250이 OpenWeatherMap Server에게 송신하는 메시지는 아래와 같다.

 

위 메시지가 정상적으로 송신되면, 아래와 같은 JSON 포맷의 응답을 받을 수 있다.

 

Source Code 설명

 

[code language=”cpp”]
#define SSID "wizohp"
#define PASSWORD "wiznet218"
#define SERVER_PORT "80"
#define SERVER_IP "128.199.164.95"
#define WEATHER_QUERY "GET /data/2.5/weather?q=Seoul HTTP/1.1\r\nHost: api.openweathermap.org\r\n\r\n"

int main()
{
char cmd[256];
char recv_data[256];
int32_t idx=0,is_response_ended=0;
int32_t uart_recv;
int32_t is_connected=0;

platform_init();

WizFi250_Restart();

if ( send_and_check_command("AT+WLEAVE", 1, 500, 10, "[OK]", "", 1) !=0 ) { printf("DBG>>> Error : AT Command\r\n");}
if ( send_and_check_command("AT+WNET=1", 1, 500, 10, "[OK]", "", 1) !=0 ) { printf("DBG>>> Error : AT Command\r\n");}

sprintf(cmd,"AT+WSET=0,%s",SSID);
if ( send_and_check_command(cmd, 1, 500, 10, "[OK]", "", 1) !=0 ) { printf("DBG>>> Error : AT Command\r\n");}
sprintf(cmd,"AT+WSEC=0,,%s",PASSWORD);
if ( send_and_check_command(cmd, 1, 500, 10, "[OK]", "", 1) !=0 ) { printf("DBG>>> Error : AT Command\r\n");}
if ( send_and_check_command("AT+WJOIN", 1, 500, 100, "[OK]", "", 1) !=0 ) { printf("DBG>>> Error : AT Command\r\n");}

pltfrm_gpio_init(GPIOA,(GPIO_Pin_0 | GPIO_Pin_1),GPIO_Mode_Out_PP);
pltfrm_gpio_set(GPIOA,(GPIO_Pin_0 | GPIO_Pin_1),1);

while(1)
{
if(is_connected == 0)
{
sprintf(cmd,"AT+SCON=O,TCN,%s,%s,,1",SERVER_IP,SERVER_PORT);
if ( send_and_check_command(cmd, 1, 500, 100, "[OK]", "[CONNECT", 1) !=0 ) { printf("DBG>>> Error : AT Command\r\n"); break;}

is_connected = 1;
usart_puts(PF_USART1,"Send Query\r\n",strlen("Send Query\r\n"));
usart_puts(PF_USART2,WEATHER_QUERY,strlen(WEATHER_QUERY));
}
else
{
while(1)
{
if( (uart_recv = usart_getc_nonblk(PF_USART2)) == RET_NOK ) continue;
if((is_response_ended == 1) && (uart_recv == ‘\n’))
{
is_response_ended=0;
break;
}
if( uart_recv == ‘\n’)
{
is_response_ended++;
}

usart_putc(PF_USART1,uart_recv);
}

delay_ms(1000);
}
}
}
[/code]

위 코드를 실행하면 아래와 같은 결과를 확인 할 수 있다.

20150325_175341

Example Code Download Path

NO COMMENTS