Using TCP Client on WIZwiki-W7500, display weather conditions on led and temperature with servo-motor

Dependencies:   WIZnetInterface mbed-src

Prerequisite

This example is for PIR test using digital I/O.

To implement this function, you need a Platform board, network Interface board.

  • WIZwiki-W7500 from WIZnet (Platform board and Ethernet I/F board)

Hardware Configuration

WIZwiki-W7500 Pin map

pin map

Just connect Ethernet Cable & USB Cable


Software

Init Ethernet

void initEthernet(uint8_t* mac_addr) {
    int phy_link;

    eth.init(mac_addr); //Use DHCP
    
    eth.connect();
        
    /* phy link */
    do{
       phy_link = eth.ethernet_link();
       printf(".");
       wait(2);
    }while(!phy_link);
    printf("\r\n");
         
    printf("IP Address is %s\r\n", eth.getIPAddress());
}

Request to server using HTTP

void requestHTTP(void)
{
    char req_buf[256];
    
    /* TCP socket connect */   
    sock.connect(WEB_SERVER, 80);
    
    /* Request to WEB Server using HTTP */
    sprintf(req_buf,"GET /data/2.5/weather?q=%s,%s&appid=%s HTTP/1.1\nHost: %s\nConnection: close\n\n",
        CITY,COUNTRY, API_KEY, WEB_SERVER);
    sock.send_all(req_buf, strlen(req_buf));
}

Get data from server & Parsing it

void parsingGetData(void)
{
    char buffer[1024];
        
    /* get info */
    int ret;
    while (true) {
        ret = sock.receive_all(buffer, sizeof(buffer)-1);
        if (ret <= 0) break;
        buffer[ret] = '\0';
        pc.printf("Received %d chars from server: %s\n", ret, buffer);     
    }
    
    /* parsing weather, city, tempurature */
    char *weather;
    char *city;
    char *temp;
    uint8_t i;
    
    pc.printf("\r\n\r\n======== WeatherForecast ========\r\n");  
    weather = strstr(buffer, "main");
    pc.printf("\t State : ");
    for(i = 7; i < 20; i++)
    {
        if(*(weather+i) == '\"') break;
        pc.printf("%c", *(weather+i));
    }
            
    city = strstr(buffer, "name");
    pc.printf("\r\n\t City : ");
    for(i = 7; i < 20; i++)
    {
        if(*(city+i) == '\"') break;
        pc.printf("%c", *(city+i));
    }
        
    temp = strstr(buffer, "temp");
    pc.printf("\r\n\t temp(kelvin) : ");
    for(i = 6; i < 12; i++)
    {
        if((*(temp+i) == '\"')||(*(temp+i) == ',')) break;
        pc.printf("%c", *(temp+i));
    }
    pc.printf("\r\n\r\n");
}

Caution

Must fix API_KEY & MAC Address

Committer:
donatien
Date:
Tue Jun 26 14:39:21 2012 +0000
Revision:
0:bb128f0e952f
Child:
1:e2652bd064c6
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 0:bb128f0e952f 1 #include "mbed.h"
donatien 0:bb128f0e952f 2 #include "EthernetInterface.h"
donatien 0:bb128f0e952f 3
donatien 0:bb128f0e952f 4 int main()
donatien 0:bb128f0e952f 5 {
donatien 0:bb128f0e952f 6 EthernetInterface eth;
donatien 0:bb128f0e952f 7 eth.init(); //Use DHCP
donatien 0:bb128f0e952f 8
donatien 0:bb128f0e952f 9 eth.connect();
donatien 0:bb128f0e952f 10
donatien 0:bb128f0e952f 11 TCPSocket sock;
donatien 0:bb128f0e952f 12 sock.connect("mbed.org", 80);
donatien 0:bb128f0e952f 13
donatien 0:bb128f0e952f 14 const char http_cmd[] = "GET /media/uploads/donatien/hello.txt HTTP/1.1\r\nHost: %s\r\n\r\n";
donatien 0:bb128f0e952f 15 sock.send((std::uint8_t*)http_cmd, sizeof(http_cmd) - 1, 3000);
donatien 0:bb128f0e952f 16
donatien 0:bb128f0e952f 17 char in_buf[256];
donatien 0:bb128f0e952f 18 bool firstIteration = true;
donatien 0:bb128f0e952f 19 int ret;
donatien 0:bb128f0e952f 20 do
donatien 0:bb128f0e952f 21 {
donatien 0:bb128f0e952f 22 ret = sock.receive((std::uint8_t*)in_buf, 255, firstIteration?3000:0);
donatien 0:bb128f0e952f 23 in_buf[ret] = '\0';
donatien 0:bb128f0e952f 24
donatien 0:bb128f0e952f 25 printf("Received %d chars from server: %s\n", ret, in_buf);
donatien 0:bb128f0e952f 26 firstIteration = false;
donatien 0:bb128f0e952f 27 } while( ret > 0 );
donatien 0:bb128f0e952f 28
donatien 0:bb128f0e952f 29 sock.close();
donatien 0:bb128f0e952f 30
donatien 0:bb128f0e952f 31 eth.disconnect();
donatien 0:bb128f0e952f 32
donatien 0:bb128f0e952f 33 while(1) {
donatien 0:bb128f0e952f 34 }
donatien 0:bb128f0e952f 35 }