Simple TCP/IP Client using the UIPEthernet library for ENC28J60 Ethernet boards.

Dependencies:   UIPEthernet

Committer:
hudakz
Date:
Fri Jun 30 20:18:02 2017 +0000
Revision:
2:5656f7efd7c7
Parent:
1:4e4b811a7f9b
Child:
3:9c32e3375fc5
Updated.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:5e91bb901022 1 /*
hudakz 0:5e91bb901022 2 * Simple TcpClient using the UIPEthernet library for ENC28J60 Ethernet boards.
hudakz 0:5e91bb901022 3 *
hudakz 0:5e91bb901022 4 */
hudakz 0:5e91bb901022 5
hudakz 0:5e91bb901022 6 #include "mbed.h"
hudakz 0:5e91bb901022 7 #include "UIPEthernet.h"
hudakz 0:5e91bb901022 8 #include "UIPServer.h"
hudakz 0:5e91bb901022 9 #include "UIPClient.h"
hudakz 0:5e91bb901022 10
hudakz 0:5e91bb901022 11 Serial pc(USBTX, USBRX);
hudakz 0:5e91bb901022 12
hudakz 0:5e91bb901022 13 #if defined(TARGET_LPC1768)
hudakz 2:5656f7efd7c7 14 UIPEthernet uIPEthernet(p11, p12, p13, p8); // mosi, miso, sck, cs
hudakz 0:5e91bb901022 15 #elif defined(TARGET_NUCLEO_F103RB) || defined(TARGET_NUCLEO_L152RE) || defined(TARGET_NUCLEO_F030R8) \
hudakz 0:5e91bb901022 16 || defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F302R8) || defined(TARGET_NUCLEO_L053R8) \
hudakz 0:5e91bb901022 17 || defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_F334R8) || defined(TARGET_NUCLEO_F072RB) \
hudakz 0:5e91bb901022 18 || defined(TARGET_NUCLEO_F091RC) || defined(TARGET_NUCLEO_F303RE) || defined(TARGET_NUCLEO_F070RB) \
hudakz 0:5e91bb901022 19 || defined(TARGET_KL25Z ) || defined(TARGET_KL46Z) || defined(TARGET_K64F) || defined(TARGET_KL05Z) \
hudakz 0:5e91bb901022 20 || defined(TARGET_K20D50M) || defined(TARGET_K22F) \
hudakz 0:5e91bb901022 21 || defined(TARGET_NRF51822) \
hudakz 0:5e91bb901022 22 || defined(TARGET_RZ_A1H)
hudakz 2:5656f7efd7c7 23 UIPEthernet uIPEthernet(D11, D12, D13, D10); // mosi, miso, sck, cs
hudakz 0:5e91bb901022 24 #endif
hudakz 0:5e91bb901022 25
hudakz 2:5656f7efd7c7 26 // MAC address must be unique within the connected network. Modify as appropriate.
hudakz 0:5e91bb901022 27 const uint8_t MY_MAC[6] = { 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };
hudakz 0:5e91bb901022 28 EthernetClient client;
hudakz 0:5e91bb901022 29
hudakz 0:5e91bb901022 30 int main()
hudakz 0:5e91bb901022 31 {
hudakz 0:5e91bb901022 32 const unsigned long MAXTIME = 5; // Connection timeout time
hudakz 0:5e91bb901022 33 unsigned long t = 0;
hudakz 0:5e91bb901022 34 unsigned long timeOut = 0;
hudakz 0:5e91bb901022 35 const IPAddress SERVER_IP(192, 168, 1, 33); // Change as appropriate.
hudakz 0:5e91bb901022 36 const uint16_t SERVER_PORT = 10001;
hudakz 0:5e91bb901022 37
hudakz 0:5e91bb901022 38 float pi = 3.1416F; // some data to be sent to the server
hudakz 0:5e91bb901022 39 uint8_t *data = reinterpret_cast<uint8_t*>(&pi);
hudakz 0:5e91bb901022 40
hudakz 0:5e91bb901022 41 #define DHCP 1 // if you'd like to use static IP address comment out this line
hudakz 0:5e91bb901022 42 #if defined(DHCP)
hudakz 0:5e91bb901022 43 pc.printf("Searching for DHCP server..\r\n");
hudakz 2:5656f7efd7c7 44 if(uIPEthernet.begin(MY_MAC) != 1) {
hudakz 0:5e91bb901022 45 pc.printf("No DHCP server found.\r\n");
hudakz 0:5e91bb901022 46 pc.printf("Exiting application.\r\n");
hudakz 0:5e91bb901022 47 return 0;
hudakz 0:5e91bb901022 48 }
hudakz 0:5e91bb901022 49 pc.printf("DHCP server found.\r\n");
hudakz 0:5e91bb901022 50 #else
hudakz 0:5e91bb901022 51 // IP address must be unique and compatible with your network.
hudakz 0:5e91bb901022 52 const IPAddress MY_IP(192, 168, 1, 181); // Change as appropriate.
hudakz 2:5656f7efd7c7 53 uIPEthernet.begin(MY_MAC, MY_IP);
hudakz 0:5e91bb901022 54 #endif
hudakz 2:5656f7efd7c7 55 IPAddress localIP = uIPEthernet.localIP();
hudakz 2:5656f7efd7c7 56 pc.printf("Local IP = %s\r\n", localIP.toString());
hudakz 0:5e91bb901022 57
hudakz 0:5e91bb901022 58 while(1) {
hudakz 0:5e91bb901022 59 if(time(NULL) > timeOut) {
hudakz 0:5e91bb901022 60 timeOut = time(NULL) + MAXTIME;
hudakz 0:5e91bb901022 61 pc.printf("Connecting to TCP/IP server ..\r\n");
hudakz 0:5e91bb901022 62 if(client.connect(SERVER_IP, SERVER_PORT)) {
hudakz 0:5e91bb901022 63 pc.printf("Server connected.\r\n");
hudakz 0:5e91bb901022 64 pc.printf("Sending some data to server:\r\n");
hudakz 0:5e91bb901022 65 client.write(data, sizeof(pi));
hudakz 0:5e91bb901022 66 for(int i = 0; i < sizeof(pi); i++)
hudakz 0:5e91bb901022 67 pc.printf("0x%x ", data[i]);
hudakz 0:5e91bb901022 68 pc.printf("\r\n");
hudakz 1:4e4b811a7f9b 69 pc.printf("Awaiting message from server:\r\n");
hudakz 0:5e91bb901022 70 while(client.available() == 0) {
hudakz 0:5e91bb901022 71 if(time(NULL) > timeOut) {
hudakz 2:5656f7efd7c7 72 pc.printf("Connection time out.\r\n");
hudakz 2:5656f7efd7c7 73 client.stop();
hudakz 2:5656f7efd7c7 74 pc.printf("Disconnected from server.\r\n");
hudakz 2:5656f7efd7c7 75 break;
hudakz 0:5e91bb901022 76 }
hudakz 0:5e91bb901022 77 }
hudakz 2:5656f7efd7c7 78 if(client.connected()) {
hudakz 2:5656f7efd7c7 79 pc.printf("Message received from server:\r\n");
hudakz 2:5656f7efd7c7 80 int size;
hudakz 2:5656f7efd7c7 81 while((size = client.available()) > 0) {
hudakz 2:5656f7efd7c7 82 uint8_t* msg = (uint8_t*)malloc(size);
hudakz 2:5656f7efd7c7 83 size = client.read(msg, size);
hudakz 2:5656f7efd7c7 84 for(int i = 0; i < size; i++)
hudakz 2:5656f7efd7c7 85 pc.printf("0x%x ", msg[i]);
hudakz 2:5656f7efd7c7 86 pc.printf("\r\n");
hudakz 2:5656f7efd7c7 87 free(msg);
hudakz 2:5656f7efd7c7 88 }
hudakz 2:5656f7efd7c7 89 client.stop();
hudakz 2:5656f7efd7c7 90 pc.printf("Disconnected from server.\r\n");
hudakz 0:5e91bb901022 91 }
hudakz 0:5e91bb901022 92 } else {
hudakz 0:5e91bb901022 93 pc.printf("Failed to connect to server\r\n");
hudakz 0:5e91bb901022 94 }
hudakz 0:5e91bb901022 95 }
hudakz 0:5e91bb901022 96 }
hudakz 0:5e91bb901022 97 }
hudakz 0:5e91bb901022 98