Zoltan Hudak
/
TcpClient_ENC28J60
Simple TCP/IP Client using the UIPEthernet library for ENC28J60 Ethernet boards.
Diff: main.cpp
- Revision:
- 0:5e91bb901022
- Child:
- 1:4e4b811a7f9b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Dec 05 08:33:16 2015 +0000 @@ -0,0 +1,99 @@ +/* + * Simple TcpClient using the UIPEthernet library for ENC28J60 Ethernet boards. + * + */ + +#include "mbed.h" +#include "UIPEthernet.h" +#include "UIPServer.h" +#include "UIPClient.h" + +Serial pc(USBTX, USBRX); + +#if defined(TARGET_LPC1768) +UIPEthernetClass UIPEthernet(p11, p12, p13, p8); // mosi, miso, sck, cs +#elif defined(TARGET_NUCLEO_F103RB) || defined(TARGET_NUCLEO_L152RE) || defined(TARGET_NUCLEO_F030R8) \ + || defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F302R8) || defined(TARGET_NUCLEO_L053R8) \ + || defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_F334R8) || defined(TARGET_NUCLEO_F072RB) \ + || defined(TARGET_NUCLEO_F091RC) || defined(TARGET_NUCLEO_F303RE) || defined(TARGET_NUCLEO_F070RB) \ + || defined(TARGET_KL25Z ) || defined(TARGET_KL46Z) || defined(TARGET_K64F) || defined(TARGET_KL05Z) \ + || defined(TARGET_K20D50M) || defined(TARGET_K22F) \ + || defined(TARGET_NRF51822) \ + || defined(TARGET_RZ_A1H) +UIPEthernetClass UIPEthernet(D11, D12, D13, D10); // mosi, miso, sck, cs +#endif + +// MAC number must be unique within the connected network. Modify as appropriate. +const uint8_t MY_MAC[6] = { 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 }; +EthernetClient client; + +int main() +{ + const unsigned long MAXTIME = 5; // Connection timeout time + unsigned long t = 0; + unsigned long timeOut = 0; + const IPAddress SERVER_IP(192, 168, 1, 33); // Change as appropriate. + const uint16_t SERVER_PORT = 10001; + + float pi = 3.1416F; // some data to be sent to the server + uint8_t *data = reinterpret_cast<uint8_t*>(&pi); + +#define DHCP 1 // if you'd like to use static IP address comment out this line +#if defined(DHCP) + pc.printf("Searching for DHCP server..\r\n"); + if(UIPEthernet.begin(MY_MAC) != 1) { + pc.printf("No DHCP server found.\r\n"); + pc.printf("Exiting application.\r\n"); + return 0; + } + pc.printf("DHCP server found.\r\n"); +#else + // IP address must be unique and compatible with your network. + const IPAddress MY_IP(192, 168, 1, 181); // Change as appropriate. + UIPEthernet.begin(MY_MAC, MY_IP); +#endif + IPAddress localIP = UIPEthernet.localIP(); + pc.printf("Local IP = "); + for(uint8_t i = 0; i < 3; i++) + pc.printf("%d.", localIP[i]); + pc.printf("%d\r\n", localIP[3]); + + while(1) { + if(time(NULL) > timeOut) { + timeOut = time(NULL) + MAXTIME; + pc.printf("Connecting to TCP/IP server ..\r\n"); + if(client.connect(SERVER_IP, SERVER_PORT)) { + pc.printf("Server connected.\r\n"); + pc.printf("Sending some data to server:\r\n"); + client.write(data, sizeof(pi)); + for(int i = 0; i < sizeof(pi); i++) + pc.printf("0x%x ", data[i]); + pc.printf("\r\n"); + pc.printf("Awaiting data from server:\r\n"); + while(client.available() == 0) { + if(time(NULL) > timeOut) { + printf("Connection timed out.\r\n"); + goto close; + } + } + pc.printf("Data received from server:\r\n"); + int size; + while((size = client.available()) > 0) { + uint8_t* msg = (uint8_t*)malloc(size); + size = client.read(msg, size); + for(int i = 0; i < size; i++) + pc.printf("0x%x ", msg[i]); + pc.printf("\r\n"); + free(msg); + } +close: + //disconnect client + client.stop(); + pc.printf("Client disconnected from server.\r\n"); + } else { + pc.printf("Failed to connect to server\r\n"); + } + } + } +} +