Control a LED from PC Using the Arduino and Ethernet shield..



This tutorial explains how to control a LED from PC using Arduino ethernet shield. The Arduino ethernet shield is use WIZnet W5100 ethernet chip.


This shield is also has a micro SD card socket to interfacing with a micro SD card. Arduino communicates with both W5100 and micro SD card using the SPI bus. This is on digital pins 13 (SCK), 12 (MISO), 11 (MOSI), 10 (SS for the W5100), and 4 (SS for the micro SD card). To make a program using this shield is very easy, because there is a library from Arduino both for ethernet and SD.


To begin make code for control LED, we must add SPI library and Ethernet library.

#include <Spi.h>

#include <Ethernet.h>

To make a LED can be controlled from PC, we will program the Arduino as a server. The arduino server will wait for the connection from cilent. The client will sends command to the Arduino via port 23 of TCP port numbers. For making Arduino as a server we need 3 parameter: MAC address, IP address, and port number.

// Arduino server MAC address

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

// Arduino server IP address

IPAddress ip(192, 168, 1, 10);

// Arduino server port

const int port = 23;

we must make server object and string variable called commandStr for storing command from client.

EthernetServer server(port);

// For storing command from client

String commandStr;

we initialize digital pin 2 as an output for LED and also initialize the ethernet and the server. The serial port here is used for debugging only.

void setup() {

    // Set digital pin 2 (PD2) as output for LED

    bitSet(DDRD, 2);




    // Ethernet server initialization

    Ethernet.begin(mac, ip);



    // Print Arduino server IP address to serial monitor

    Serial.print("Server is at ");



In the loop function, we monitoring the client. If there is a client connected and send command to Arduino, we read every character that the client sends and store that command in commandStr variable until new line character.

void loop() {
 EthernetClient client = server.available();

    if (client.available()) {

        // Read char until linefeed

        char c =;

        if (c != '\n') {

            // Add received char to string variable

            commandStr += c;

        } else {

            // Print received command to serial monitor

            Serial.println("Command: " + commandStr);

            // Process the received command



            // Clear variable for receive next command

            commandStr = "";




If the command has received, then we need process that command. I am define 3 command that the PC will send to the Arduino: “led=0” for turn off the LED, “led=1” for turn on the LED, and led=? for querying the status of LED.

void processCommand(String cmd) {

    if (cmd == "led=1") {

        // Turn on LED

        bitSet(PORTD, 2);

    } else if (cmd == "led=0") {

        // Turn off LED

        bitClear(PORTD, 2);

    } else if (cmd == "led=?") {

        // Read LED status then send it to client

        if (bitRead(PORTD, 2)) {


        } else {












Please Login to comment
Notify of