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

Files at this revision

API Documentation at this revision

Comitter:
emilmont
Date:
Wed Jul 25 15:00:43 2012 +0000
Parent:
6:b011e8862694
Child:
8:2570d35b0c47
Commit message:
Update EthernetInterface

Changed in this revision

EthernetInterface.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/EthernetInterface.lib	Mon Jul 23 11:53:08 2012 +0000
+++ b/EthernetInterface.lib	Wed Jul 25 15:00:43 2012 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/EthernetInterface/#cec293071eed
+http://mbed.org/users/mbed_official/code/EthernetInterface/#fd9597f1b81b
--- a/main.cpp	Mon Jul 23 11:53:08 2012 +0000
+++ b/main.cpp	Wed Jul 25 15:00:43 2012 +0000
@@ -1,34 +1,32 @@
 #include "mbed.h"
 #include "EthernetInterface.h"
 
-int main() 
-{
+int main() {
     EthernetInterface eth;
     eth.init(); //Use DHCP
     eth.connect();
     printf("IP Address is %s\n", eth.getIPAddress());
     
-    TCPSocket sock;
+    TCPSocketConnection sock;
     sock.connect("mbed.org", 80);
     
     char http_cmd[] = "GET /media/uploads/donatien/hello.txt HTTP/1.1\r\nHost: %s\r\n\r\n";
-    sock.send(http_cmd, sizeof(http_cmd) - 1, 3000);
-
-    char in_buf[256];      
-    bool firstIteration = true;
+    sock.send_all(http_cmd, sizeof(http_cmd) - 1, 3000);
+    
+    char in_buf[256];
     int ret;
-    do
-    {
-        ret = sock.receive(in_buf, 255, firstIteration?3000:0);
+    while (true) {
+        ret = sock.receive(in_buf, 255, 100);
+        if (ret <= 0)
+            break;
+        
         in_buf[ret] = '\0';
-        
         printf("Received %d chars from server: %s\n", ret, in_buf);
-        firstIteration = false;
-    } while( ret > 0 );
+    }
       
-    sock.close();  
+    sock.close();
     
-    eth.disconnect();  
+    eth.disconnect();
     
     while(1) {
     }