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

Committer:
bingdo
Date:
Mon Oct 27 00:39:14 2014 +0000
Revision:
1:2d33dfc71ea6
Parent:
0:614e89b2211e
Child:
2:11f7f413e10d
Change a WIZnet ioLibrary to W5500Interface.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bingdo 0:614e89b2211e 1 #include "mbed.h"
bingdo 1:2d33dfc71ea6 2 #include "EthernetInterface.h"
bingdo 1:2d33dfc71ea6 3 //#include "EthernetInterfaceW5500.h"
bingdo 0:614e89b2211e 4 #include <stdio.h>
bingdo 0:614e89b2211e 5 #include <string.h>
bingdo 0:614e89b2211e 6
bingdo 0:614e89b2211e 7 #define PORT 80
bingdo 0:614e89b2211e 8 //#define PORT 888
bingdo 0:614e89b2211e 9 #define _DHCP
bingdo 0:614e89b2211e 10
bingdo 0:614e89b2211e 11 // move to main().
bingdo 0:614e89b2211e 12 //EthernetInterface eth;
bingdo 0:614e89b2211e 13
bingdo 0:614e89b2211e 14 // move to main().
bingdo 0:614e89b2211e 15 //TCPSocketServer svr;
bingdo 0:614e89b2211e 16 bool serverIsListened = false;
bingdo 0:614e89b2211e 17
bingdo 0:614e89b2211e 18 // move to main().
bingdo 0:614e89b2211e 19 //TCPSocketConnection client;
bingdo 0:614e89b2211e 20 bool clientIsConnected = false;
bingdo 0:614e89b2211e 21 DigitalOut led1(LED1); //server listning status
bingdo 0:614e89b2211e 22 DigitalOut led2(LED2); //socket connecting status
bingdo 0:614e89b2211e 23
bingdo 0:614e89b2211e 24 Ticker ledTick;
bingdo 0:614e89b2211e 25
bingdo 0:614e89b2211e 26 void ledTickfunc()
bingdo 0:614e89b2211e 27 {
bingdo 0:614e89b2211e 28 if(serverIsListened) {
bingdo 0:614e89b2211e 29 led1 = !led1;
bingdo 0:614e89b2211e 30 } else {
bingdo 0:614e89b2211e 31 led1 = false;
bingdo 0:614e89b2211e 32 }
bingdo 0:614e89b2211e 33 }
bingdo 0:614e89b2211e 34
bingdo 0:614e89b2211e 35 int main (void)
bingdo 0:614e89b2211e 36 {
bingdo 0:614e89b2211e 37 SPI spi(PTD2, PTD3, PTD1); // mosi, miso, sclk
bingdo 1:2d33dfc71ea6 38 EthernetInterface eth(&spi, PTD0, PTA20);//, nRESET(PTA20); // reset pin is dummy, don't affect any pin of WIZ550io
bingdo 0:614e89b2211e 39 spi.format(8,0); // 8bit, mode 0
bingdo 0:614e89b2211e 40 spi.frequency(7000000); // 7MHz
bingdo 0:614e89b2211e 41 wait(1); // 1 second for stable state
bingdo 0:614e89b2211e 42
bingdo 0:614e89b2211e 43 // late binding
bingdo 0:614e89b2211e 44 TCPSocketServer svr;
bingdo 0:614e89b2211e 45 TCPSocketConnection client;
bingdo 0:614e89b2211e 46
bingdo 0:614e89b2211e 47 ledTick.attach(&ledTickfunc,0.5);
bingdo 0:614e89b2211e 48
bingdo 0:614e89b2211e 49 /*
bingdo 0:614e89b2211e 50 //setup ethernet interface
bingdo 0:614e89b2211e 51 eth.init(); //Use DHCP
bingdo 0:614e89b2211e 52 eth.connect();
bingdo 0:614e89b2211e 53 printf("IP Address is %s\n\r", eth.getIPAddress());
bingdo 0:614e89b2211e 54 */
bingdo 0:614e89b2211e 55
bingdo 0:614e89b2211e 56 #ifdef _DHCP
bingdo 0:614e89b2211e 57 // didn't test yet in DHCP => TEST OK...
bingdo 0:614e89b2211e 58
bingdo 0:614e89b2211e 59 eth.init(); //Use DHCP
bingdo 0:614e89b2211e 60 eth.connect();
bingdo 0:614e89b2211e 61 //printf("IP Address is %s\n\r", eth.getIPAddress());
bingdo 0:614e89b2211e 62 printf("Initialized, MAC: %s\n\r", eth.getMACAddress());
bingdo 0:614e89b2211e 63 printf("Connected, IP: %s, MASK: %s, GW: %s\n\r",
bingdo 0:614e89b2211e 64 eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
bingdo 0:614e89b2211e 65
bingdo 0:614e89b2211e 66 #else
bingdo 0:614e89b2211e 67 // as your env. change to real IP address and so on.
bingdo 0:614e89b2211e 68 int ret = eth.init("222.98.173.212", "255.255.255.192", "222.98.173.254");
bingdo 0:614e89b2211e 69 if (!ret) {
bingdo 0:614e89b2211e 70 printf("Initialized, MAC: %s\n\r", eth.getMACAddress());
bingdo 0:614e89b2211e 71 printf("Connected, IP: %s, MASK: %s, GW: %s\n\r",
bingdo 0:614e89b2211e 72 eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
bingdo 0:614e89b2211e 73 } else {
bingdo 0:614e89b2211e 74 printf("Error eth.init() - ret = %d\n\r", ret);
bingdo 0:614e89b2211e 75 return -1;
bingdo 0:614e89b2211e 76 }
bingdo 0:614e89b2211e 77 #endif
bingdo 0:614e89b2211e 78
bingdo 0:614e89b2211e 79 //setup tcp socket
bingdo 0:614e89b2211e 80 if(svr.bind(PORT)< 0) {
bingdo 0:614e89b2211e 81 printf("tcp server bind failed.\n\r");
bingdo 0:614e89b2211e 82 return -1;
bingdo 0:614e89b2211e 83 } else {
bingdo 0:614e89b2211e 84 printf("tcp server bind successed.\n\r");
bingdo 0:614e89b2211e 85 serverIsListened = true;
bingdo 0:614e89b2211e 86 }
bingdo 0:614e89b2211e 87
bingdo 0:614e89b2211e 88 if(svr.listen(1) < 0) {
bingdo 0:614e89b2211e 89 printf("tcp server listen failed.\n\r");
bingdo 0:614e89b2211e 90 return -1;
bingdo 0:614e89b2211e 91 } else {
bingdo 0:614e89b2211e 92 printf("tcp server is listening...\n\r");
bingdo 0:614e89b2211e 93 }
bingdo 0:614e89b2211e 94
bingdo 0:614e89b2211e 95 //listening for http GET request
bingdo 0:614e89b2211e 96 while (serverIsListened) {
bingdo 0:614e89b2211e 97 //blocking mode(never timeout)
bingdo 0:614e89b2211e 98 if(svr.accept(client)<0) {
bingdo 0:614e89b2211e 99 printf("failed to accept connection.\n\r");
bingdo 0:614e89b2211e 100 } else {
bingdo 0:614e89b2211e 101 printf("connection success!\n\rIP: %s\n\r",client.get_address());
bingdo 0:614e89b2211e 102 clientIsConnected = true;
bingdo 0:614e89b2211e 103 led2 = true;
bingdo 0:614e89b2211e 104
bingdo 0:614e89b2211e 105 while(clientIsConnected) {
bingdo 0:614e89b2211e 106 char buffer[1024] = {};
bingdo 0:614e89b2211e 107 switch(client.receive(buffer, 1023)) {
bingdo 0:614e89b2211e 108 case 0:
bingdo 0:614e89b2211e 109 printf("recieved buffer is empty.\n\r");
bingdo 0:614e89b2211e 110 clientIsConnected = false;
bingdo 0:614e89b2211e 111 break;
bingdo 0:614e89b2211e 112 case -1:
bingdo 0:614e89b2211e 113 printf("failed to read data from client.\n\r");
bingdo 0:614e89b2211e 114 clientIsConnected = false;
bingdo 0:614e89b2211e 115 break;
bingdo 0:614e89b2211e 116 default:
bingdo 0:614e89b2211e 117 printf("Recieved Data: %d\n\r\n\r%.*s\n\r",strlen(buffer),strlen(buffer),buffer);
bingdo 0:614e89b2211e 118 if(buffer[0] == 'G' && buffer[1] == 'E' && buffer[2] == 'T' ) {
bingdo 0:614e89b2211e 119 printf("GET request incomming.\n\r");
bingdo 0:614e89b2211e 120 //setup http response header & data
bingdo 0:614e89b2211e 121 char echoHeader[256] = {};
bingdo 0:614e89b2211e 122 sprintf(echoHeader,"HTTP/1.1 200 OK\n\rContent-Length: %d\n\rContent-Type: text\n\rConnection: Close\n\r\n\r",strlen(buffer));
bingdo 0:614e89b2211e 123 client.send(echoHeader,strlen(echoHeader));
bingdo 0:614e89b2211e 124 client.send(buffer,strlen(buffer));
bingdo 0:614e89b2211e 125 clientIsConnected = false;
bingdo 0:614e89b2211e 126 printf("echo back done.\n\r");
bingdo 0:614e89b2211e 127 }
bingdo 0:614e89b2211e 128 break;
bingdo 0:614e89b2211e 129 }
bingdo 0:614e89b2211e 130 }
bingdo 0:614e89b2211e 131 printf("close connection.\n\rtcp server is listening...\n\r");
bingdo 0:614e89b2211e 132 client.close();
bingdo 0:614e89b2211e 133 led2 = false;
bingdo 0:614e89b2211e 134 }
bingdo 0:614e89b2211e 135 }
bingdo 0:614e89b2211e 136 }