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

Dependencies:   UIPEthernet

main.cpp

Committer:
hudakz
Date:
2015-12-05
Revision:
1:4e4b811a7f9b
Parent:
0:5e91bb901022
Child:
2:5656f7efd7c7

File content as of revision 1:4e4b811a7f9b:

/*
 * 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 message from server:\r\n");
                while(client.available() == 0) {
                    if(time(NULL) > timeOut) {
                        printf("Connection timed out.\r\n");
                        goto close;
                    }
                }
                pc.printf("Message 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("Disconnected from server.\r\n");
            } else {
                pc.printf("Failed to connect to server\r\n");
            }
        }
    }
}