![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
w5Ethernetclient
Dependencies: EthernetInterface mbed-rtos mbed
main.cpp@0:3527566e031c, 2016-12-01 (annotated)
- Committer:
- steveshun
- Date:
- Thu Dec 01 14:11:05 2016 +0000
- Revision:
- 0:3527566e031c
Exercise 5: Ethernet
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
steveshun | 0:3527566e031c | 1 | /*------------------------------------------------------------------------------------*/ |
steveshun | 0:3527566e031c | 2 | /* Ethernet UDP Client (to be used with Ethernet_UDP_server) */ |
steveshun | 0:3527566e031c | 3 | /*------------------------------------------------------------------------------------*/ |
steveshun | 0:3527566e031c | 4 | |
steveshun | 0:3527566e031c | 5 | /*--COMPANY-----AUTHOR------DATE------------REVISION----NOTES-------------------------*/ |
steveshun | 0:3527566e031c | 6 | /* NXP mareikeFSL 2015.12.23 rev 1.0 initial */ |
steveshun | 0:3527566e031c | 7 | /* */ |
steveshun | 0:3527566e031c | 8 | /*------------------------------------------------------------------------------------*/ |
steveshun | 0:3527566e031c | 9 | /* This "Hello World" program is used in conjunction with the Ethernet_UDP_server */ |
steveshun | 0:3527566e031c | 10 | /* program. It communicates between two FRDM-K64F boards via the Ethernet protocol. */ |
steveshun | 0:3527566e031c | 11 | /* To use this program, you need to do the following: */ |
steveshun | 0:3527566e031c | 12 | /* - Connect an Ethernet cable between two FRDM-K64F boards (a crossover cable */ |
steveshun | 0:3527566e031c | 13 | /* is not required). */ |
steveshun | 0:3527566e031c | 14 | /* - Flash one board with Ethernet_UDP_client and the other with */ |
steveshun | 0:3527566e031c | 15 | /* Ethernet_UDP_server */ |
steveshun | 0:3527566e031c | 16 | /* - [optional] If you would like to see the "Hello World" output on your */ |
steveshun | 0:3527566e031c | 17 | /* monitor, install and open a terminal. Tera Term is used in the Wiki for */ |
steveshun | 0:3527566e031c | 18 | /* this program. */ |
steveshun | 0:3527566e031c | 19 | /*------------------------------------------------------------------------------------*/ |
steveshun | 0:3527566e031c | 20 | |
steveshun | 0:3527566e031c | 21 | |
steveshun | 0:3527566e031c | 22 | /*--INCLUDES----------------------------------------------------------------------------*/ |
steveshun | 0:3527566e031c | 23 | #include "mbed.h" |
steveshun | 0:3527566e031c | 24 | #include "EthernetInterface.h" |
steveshun | 0:3527566e031c | 25 | |
steveshun | 0:3527566e031c | 26 | |
steveshun | 0:3527566e031c | 27 | /*--DEFINES-----------------------------------------------------------------------------*/ |
steveshun | 0:3527566e031c | 28 | |
steveshun | 0:3527566e031c | 29 | |
steveshun | 0:3527566e031c | 30 | |
steveshun | 0:3527566e031c | 31 | /*--CONSTANTS---------------------------------------------------------------------------*/ |
steveshun | 0:3527566e031c | 32 | const int PORT = 7; |
steveshun | 0:3527566e031c | 33 | |
steveshun | 0:3527566e031c | 34 | static const char* SERVER_IP = "192.168.1.101"; //IP of server board |
steveshun | 0:3527566e031c | 35 | static const char* CLIENT_IP = "192.168.1.102"; //IP of client board |
steveshun | 0:3527566e031c | 36 | static const char* MASK = "255.255.255.0"; //mask |
steveshun | 0:3527566e031c | 37 | static const char* GATEWAY = "192.168.1.1"; //gateway |
steveshun | 0:3527566e031c | 38 | |
steveshun | 0:3527566e031c | 39 | |
steveshun | 0:3527566e031c | 40 | /*--INITS-------------------------------------------------------------------------------*/ |
steveshun | 0:3527566e031c | 41 | Serial pc(USBTX, USBRX); //create PC interface |
steveshun | 0:3527566e031c | 42 | EthernetInterface eth; //create ethernet |
steveshun | 0:3527566e031c | 43 | UDPSocket sock; //creat Ethernet socket |
steveshun | 0:3527566e031c | 44 | Endpoint server; //create endpoint |
steveshun | 0:3527566e031c | 45 | |
steveshun | 0:3527566e031c | 46 | DigitalOut red(LED_RED); //debug led |
steveshun | 0:3527566e031c | 47 | DigitalOut green(LED_GREEN); //debug led |
steveshun | 0:3527566e031c | 48 | |
steveshun | 0:3527566e031c | 49 | |
steveshun | 0:3527566e031c | 50 | /*--VARIABLES---------------------------------------------------------------------------*/ |
steveshun | 0:3527566e031c | 51 | int n; //size of received message |
steveshun | 0:3527566e031c | 52 | char in_buffer[1]; //create receive buffer |
steveshun | 0:3527566e031c | 53 | char counter[1] = {0}; //sample send buffer |
steveshun | 0:3527566e031c | 54 | |
steveshun | 0:3527566e031c | 55 | |
steveshun | 0:3527566e031c | 56 | /*--FUNCTION DECLARATIONS---------------------------------------------------------------*/ |
steveshun | 0:3527566e031c | 57 | void init_usb(void); //initializes pc.printf if required |
steveshun | 0:3527566e031c | 58 | void init_eth(void); //initializes Ethernet |
steveshun | 0:3527566e031c | 59 | void end_eth(void); //closes Ethernet socket |
steveshun | 0:3527566e031c | 60 | int main(void); //main |
steveshun | 0:3527566e031c | 61 | |
steveshun | 0:3527566e031c | 62 | |
steveshun | 0:3527566e031c | 63 | /*--FUNCTION DEFINITIONS----------------------------------------------------------------*/ |
steveshun | 0:3527566e031c | 64 | |
steveshun | 0:3527566e031c | 65 | /*****************************************************************************INIT_USB***/ |
steveshun | 0:3527566e031c | 66 | void init_usb(void) |
steveshun | 0:3527566e031c | 67 | { |
steveshun | 0:3527566e031c | 68 | pc.baud(9600); //baud |
steveshun | 0:3527566e031c | 69 | |
steveshun | 0:3527566e031c | 70 | } //end init_usb() |
steveshun | 0:3527566e031c | 71 | |
steveshun | 0:3527566e031c | 72 | /*****************************************************************************INIT_ETH***/ |
steveshun | 0:3527566e031c | 73 | void init_eth(void) |
steveshun | 0:3527566e031c | 74 | { |
steveshun | 0:3527566e031c | 75 | eth.init(CLIENT_IP, MASK, GATEWAY); //set up IP |
steveshun | 0:3527566e031c | 76 | eth.connect(); //connect ethernet |
steveshun | 0:3527566e031c | 77 | pc.printf("\nCLIENT - Client IP Address is %s\r\n", eth.getIPAddress()); //get client IP address |
steveshun | 0:3527566e031c | 78 | |
steveshun | 0:3527566e031c | 79 | sock.init(); //initialize socket |
steveshun | 0:3527566e031c | 80 | |
steveshun | 0:3527566e031c | 81 | server.set_address(SERVER_IP, PORT); //set address of server |
steveshun | 0:3527566e031c | 82 | |
steveshun | 0:3527566e031c | 83 | } //end init_eth() |
steveshun | 0:3527566e031c | 84 | |
steveshun | 0:3527566e031c | 85 | /******************************************************************************END_ETH***/ |
steveshun | 0:3527566e031c | 86 | void end_eth(void) |
steveshun | 0:3527566e031c | 87 | { |
steveshun | 0:3527566e031c | 88 | sock.close(); //close socket |
steveshun | 0:3527566e031c | 89 | eth.disconnect(); //close Ethernet |
steveshun | 0:3527566e031c | 90 | |
steveshun | 0:3527566e031c | 91 | } //end end_eth() |
steveshun | 0:3527566e031c | 92 | |
steveshun | 0:3527566e031c | 93 | /*********************************************************************************MAIN***/ |
steveshun | 0:3527566e031c | 94 | int main(void) |
steveshun | 0:3527566e031c | 95 | { |
steveshun | 0:3527566e031c | 96 | red = 0; //client |
steveshun | 0:3527566e031c | 97 | green = 1; |
steveshun | 0:3527566e031c | 98 | |
steveshun | 0:3527566e031c | 99 | init_usb(); //initialize the PC interface |
steveshun | 0:3527566e031c | 100 | init_eth(); //initialize the Ethernet connection |
steveshun | 0:3527566e031c | 101 | |
steveshun | 0:3527566e031c | 102 | while(true) //repeat forever |
steveshun | 0:3527566e031c | 103 | { |
steveshun | 0:3527566e031c | 104 | pc.printf("\nCLIENT - Sending '%i' to server %s\r\n", counter[0], SERVER_IP); //print message to send |
steveshun | 0:3527566e031c | 105 | sock.sendTo(server, counter, sizeof(counter)); //send message |
steveshun | 0:3527566e031c | 106 | |
steveshun | 0:3527566e031c | 107 | pc.printf("CLIENT - Waiting for UDP packet...\r\n"); //wait for message |
steveshun | 0:3527566e031c | 108 | |
steveshun | 0:3527566e031c | 109 | n = sock.receiveFrom(server, in_buffer, sizeof(in_buffer)); //receive message from server |
steveshun | 0:3527566e031c | 110 | |
steveshun | 0:3527566e031c | 111 | in_buffer[n] = '\0'; //add \0 to end of message |
steveshun | 0:3527566e031c | 112 | pc.printf("CLIENT - Received '%i' from server %s\r\n", in_buffer[0], SERVER_IP); //print message received |
steveshun | 0:3527566e031c | 113 | |
steveshun | 0:3527566e031c | 114 | counter[0] = (counter[0] + 1)%11; //only count up to 10, then reset to 0 |
steveshun | 0:3527566e031c | 115 | |
steveshun | 0:3527566e031c | 116 | wait(1); //wait 1 second |
steveshun | 0:3527566e031c | 117 | } |
steveshun | 0:3527566e031c | 118 | |
steveshun | 0:3527566e031c | 119 | } //end main() |