How to implement WIZ550io on FRDM-KL25Z. Refer to http://wizwiki.net/wiki/doku.php

Dependencies:   W5500Interface mbed

/media/uploads/bingdo/kl25z-wiz550io_image.jpg

Refer to http://www.youtube.com/watch?v=i77zoV5tnbE

Files at this revision

API Documentation at this revision

Comitter:
bingdo
Date:
Wed Oct 22 06:34:24 2014 +0000
Child:
1:2d33dfc71ea6
Commit message:
Create an example of FRDM-KL25Z Ethernet with WIZ550io.

Changed in this revision

EthernetInterfaceW5500.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
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EthernetInterfaceW5500.lib	Wed Oct 22 06:34:24 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/teams/EthernetInterfaceW5500-makers/code/EthernetInterfaceW5500/#6f469f76a76a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Oct 22 06:34:24 2014 +0000
@@ -0,0 +1,136 @@
+#include "mbed.h"
+//#include "EthernetInterface.h"
+#include "EthernetInterfaceW5500.h"
+#include <stdio.h>
+#include <string.h>
+
+#define PORT   80
+//#define PORT   888
+#define _DHCP
+
+// move to main().
+//EthernetInterface eth;
+
+// move to main().
+//TCPSocketServer svr;
+bool serverIsListened = false;
+
+// move to main().
+//TCPSocketConnection client;
+bool clientIsConnected = false;
+DigitalOut led1(LED1); //server listning status
+DigitalOut led2(LED2); //socket connecting status
+
+Ticker ledTick;
+
+void ledTickfunc()
+{
+    if(serverIsListened)  {
+        led1 = !led1;
+    } else {
+        led1 = false;
+    }
+}
+
+int main (void)
+{
+    SPI spi(PTD2, PTD3, PTD1); // mosi, miso, sclk
+    EthernetInterfaceW5500 eth(&spi, PTD0, PTA20);//, nRESET(PTA20); // reset pin is dummy, don't affect any pin of WIZ550io
+    spi.format(8,0); // 8bit, mode 0
+    spi.frequency(7000000); // 7MHz
+    wait(1); // 1 second for stable state
+
+    // late binding 
+    TCPSocketServer svr;
+    TCPSocketConnection client;
+
+    ledTick.attach(&ledTickfunc,0.5);
+
+    /*
+        //setup ethernet interface
+        eth.init(); //Use DHCP
+        eth.connect();
+        printf("IP Address is %s\n\r", eth.getIPAddress());
+    */
+
+#ifdef _DHCP 
+// didn't test yet in DHCP => TEST OK...
+
+    eth.init(); //Use DHCP
+    eth.connect();
+    //printf("IP Address is %s\n\r", eth.getIPAddress());
+    printf("Initialized, MAC: %s\n\r", eth.getMACAddress());
+    printf("Connected, IP: %s, MASK: %s, GW: %s\n\r",
+           eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
+
+#else
+    // as your env. change to real IP address and so on.
+    int ret = eth.init("222.98.173.212", "255.255.255.192", "222.98.173.254");
+    if (!ret) {
+        printf("Initialized, MAC: %s\n\r", eth.getMACAddress());
+        printf("Connected, IP: %s, MASK: %s, GW: %s\n\r",
+               eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
+    } else {
+        printf("Error eth.init() - ret = %d\n\r", ret);
+        return -1;
+    }
+#endif
+
+    //setup tcp socket
+    if(svr.bind(PORT)< 0) {
+        printf("tcp server bind failed.\n\r");
+        return -1;
+    } else {
+        printf("tcp server bind successed.\n\r");
+        serverIsListened = true;
+    }
+
+    if(svr.listen(1) < 0) {
+        printf("tcp server listen failed.\n\r");
+        return -1;
+    } else {
+        printf("tcp server is listening...\n\r");
+    }
+
+    //listening for http GET request
+    while (serverIsListened) {
+        //blocking mode(never timeout)
+        if(svr.accept(client)<0) {
+            printf("failed to accept connection.\n\r");
+        } else {
+            printf("connection success!\n\rIP: %s\n\r",client.get_address());
+            clientIsConnected = true;
+            led2 = true;
+
+            while(clientIsConnected) {
+                char buffer[1024] = {};
+                switch(client.receive(buffer, 1023)) {
+                    case 0:
+                        printf("recieved buffer is empty.\n\r");
+                        clientIsConnected = false;
+                        break;
+                    case -1:
+                        printf("failed to read data from client.\n\r");
+                        clientIsConnected = false;
+                        break;
+                    default:
+                        printf("Recieved Data: %d\n\r\n\r%.*s\n\r",strlen(buffer),strlen(buffer),buffer);
+                        if(buffer[0] == 'G' && buffer[1] == 'E' && buffer[2] == 'T' ) {
+                            printf("GET request incomming.\n\r");
+                            //setup http response header & data
+                            char echoHeader[256] = {};
+                            sprintf(echoHeader,"HTTP/1.1 200 OK\n\rContent-Length: %d\n\rContent-Type: text\n\rConnection: Close\n\r\n\r",strlen(buffer));
+                            client.send(echoHeader,strlen(echoHeader));
+                            client.send(buffer,strlen(buffer));
+                            clientIsConnected = false;
+                            printf("echo back done.\n\r");
+                        }
+                        break;
+                }
+            }
+            printf("close connection.\n\rtcp server is listening...\n\r");
+            client.close();
+            led2 = false;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Oct 22 06:34:24 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/9327015d4013
\ No newline at end of file