9 years, 1 month ago.

planted LPC1768 on my prototype board for my IoT project on mbed OS.How do I get the IP address?

I have planted LPC1768 on my prototype board for my IoT project on mbed OS.How do I get the IP address of this device to interact? Any suggested Applications to compile/load from mbed online compiler?

1 Answer

9 years, 1 month ago.

Hi John,

You can initialize Ethernet with a fixed address, so your question is more likely related to being a DHCP client. I've derived a custom version of EthernetInterface - I think I've marked the special APIs in the example below.

To get the IP Address, use the getIPAddress() API. Some of my devices have a local display that I post the "buf" onto, and for others I may send it to the serial/debug port as you'll see below.

        sprintf(buf, "%15s", eth.getIPAddress());

For my needs, the following seems to give me a pretty robust interface to Ethernet that will reconnect if you unplug/replug. I don't show below, but I also have a WatchDog running. I have some nodes on my network where I've never had to manually intervene to get them going after power outage, or network rewiring...

// fragments extracted from an application, do not expect this to compile...
EthernetInterface eth;
...

int main()
{
    ...
    pc.printf("Initializing network interface...\r\n");
    if (0 == eth.init()) {  // Using DHCP (this extracted fragment does not show fixed IP)

        pc.printf("Name: %s\r\n", nn);
        eth.setName(nn);           // Not part of standard EthernetInterface to register name with server

        do {
            pc.printf("Connecting to network...\r\n");

            if (0 == eth.connect()) {    // success!
                bool initFlag = true;
                linkup = true;              // I have an LED on the Ethernet connected mapped to this signal
                ShowIPAddress(true);
                int speed = eth.get_connection_speed();       // not part of standard EthernetInterface
                pc.printf("Connected at %d Mb/s\r\n", speed);

                while (eth.is_connected()) {
                    // Here's the forever loop within which you might do things
                    //pc.printf("Connection is good.\r\n");
                    if (initFlag) {
                        SyncToNTPServer();
                    }
                    
                    initFlag = false;       // end of the first pass
                    wd.Service();
                }  // this is the end of the main "forever" loop, exiting only when Ethernet connection is lost
                linkup = false;
                pc.printf("lost connection.\r\n");
                ShowIPAddress(false);    // show --- instead of an IP address
                eth.disconnect();
            }
            else {
                pc.printf("  ... failed to connect.\r\n");
            }
        } while (1);    // this is the end of the outer "forever" loop, which permits retries for the network
    }
    ...

void ShowIPAddress(bool show)
{
    char buf[16];

    if (show)
        sprintf(buf, "%15s", eth.getIPAddress());
    else
        sprintf(buf, "%15s", "---.---.---.---");
    lcd.puts(480 - 15 * 8, 256, buf);
    pc.printf("Ethernet connected as %s\r\n", buf);
}

You said you were looking for an example. You may find much better examples. Here's a non-trivial Firmware update framework I put together so a node can self-update via the network. The network appliances that use this are based on the LPC1768 module and use Ethernet. They poll a server once a day (or on reboot) to see if there is newer firmware - they then download it, install it, and reboot. That works well for the devices that are truly "embedded" and not adjacent to a PC.

Accepted Answer