Control an LED Over the Internet Via Arduino With Teleduino




About: Developer of the telecontrol and telemonitoring system Teleduino, using the Arduino platform.
There is something cool about making an LED glow via an Arduino. What could make that even cooler? How about making that LED glow from anywhere in the world via the internet? Now we're talkin'!

This process is made really simple using the Teleduino sketch for your ethernet enabled Arduino. Haven't heard of Teleduino? That's cool, you may want to take a look at Arduino Control via a Web Service with Teleduino to get yourself started.

This tutorial will guide you through the process of attaching an LED to your Arduino, and provide some example Teleduino API calls to:
  • Define the pin mode of a pin
  • Turn on the LED
  • Turn off the LED
  • Set the brightness of the LED (using one of the PWM supported pins on the Arduino)

If you get stuck on any of the steps, or if you feel that there is a step that could be explained better, please leave a comment so that we can improve things.

Let's begin!

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Prepare an LED

In this step we put together an LED that we can easily connect to our Arduino.

Parts needed:
  • An LED (we decided to use a 10mm white LED because they look neat)
  • A 1K Resistor (or similar)
  • Some hookup wire (we chose to use some single strand ethernet cable because it's cheap, and connects well to the Arduino pin sockets)
  • Some heatshrink (optional, but makes it look nice and tidy)

  • Take the LED and shorten the lead on the flat-edge side (the shortest lead).
  • Shorten one of the leads on the resistor.
  • Solder the short lead of the resistor to the short lead of the LED.
  • Shorten the other lead on the resistor so that it's the same length as the remainder lead on the LED.
  • Solder the hookup wire to the two leads, and apply heatshrink. Take note of which lead is soldered to the resistor (we chose the white wire for this).
  • Strip the other end of the hookup wires and connect to the Arduino. The white wire (the wire connected to the resistor) connects to a GND pin, and the other (our green wire) connects to a digital pin (we chose pin 3 because it also supports PWM).


Step 2: Control LED Via the Teleduino API

Here are some example API calls that you can use to control your LED. You need to replace {key} with the unique API key you obtained when you completed the instructable Arduino Control via a Web Service with Teleduino. Just chuck the URLs into your browser's address bar and you should see some magic happen on that LED.

Define the pin mode of digital pin 3 (Must be done once per boot prior to setting digital outputs. 'pin=3' mean pin 3, 'mode=1' means OUTPUT):{key}&r=definePinMode&pin=3&mode=1

Set the output of digital pin 3 to HIGH ('pin=3' means pin 3, 'output=1' means HIGH):{key}&r=setDigitalOutput&pin=3&output=1

Set the output of digital pin 3 to LOW ('pin=3' means pin 3, 'output=0' means LOW):{key}&r=setDigitalOutput&pin=3&output=0

Toggle the output of digital pin 3 ('pin=3' means pin 3, 'output=2' means toggle):{key}&r=setDigitalOutput&pin=3&output=2

Set the PWM value of pin 3 to 32 (LED will glow dull. 'pin=3' means pin 3, 'output=32' means PWM value):{key}&r=setPwmOutput&pin=3&output=32

Set the PWM value of pin 3 to 255 (LED will glow bright. 'pin=3' means pin 3, 'output=255' means PWM value):{key}&r=setPwmOutput&pin=3&output=255

Pretty neat, huh?

Step 3: Further Reading

Controlling an LED is just a very simple example of what can be achieved by using the Teleduino Arduino library/sketch.

To view the full API reference manual, take a look at

Have fun!

Arduino Challenge

Participated in the
Arduino Challenge

Be the First to Share


    • CNC Contest

      CNC Contest
    • Make it Move

      Make it Move
    • Teacher Contest

      Teacher Contest

    32 Discussions


    3 years ago

    Please note that teleduino support the 'mega' size of arduino / arduino-like platforms. The links of the step 2 might not work, you should use{key}&r=setDigitalOutput&pin=8&output=1 instead


    3 years ago

    Why only some pins are working for controlling the LED.

    from pin 2 to pin 9 are working

    others when connected are always glowing the LED.


    3 years ago

    It works! yay


    5 years ago on Step 3

    im using this awesome system to control relays that control my exterior lights. is there a way to control more then one arduino pin at once?

    1 reply

    Reply 5 years ago on Step 3

    Hi helacaster,

    Great to hear! You can certainly control multiple outputs with a single API call. Take a look at the setDigitalOutputs method over at the Teleduino API documentation:

    Hi, setDigitalOutput always answers with response=0 and every digital pin does not change state while all other functions are ok. Where I'm doing wrong?

    Arduino Uno, Ethernet Shield


    2 replies

    Hi there.
    Are you defining the pin mode first using the definePinMode method? It's recommended to set default pin modes using the preset manager at


    5 years ago on Introduction

    Hi, I'm wondering if you can control several LED's and servos at the same time without having to use definePinMode every time

    1 reply

    Reply 5 years ago on Introduction

    Hi pmartins11,
    You certainly can, providing you are running the servos and LEDs on different pins. To retain the definePinMode setting between reboots, you can set presets by using the tool at


    6 years ago on Step 2

    This is great. I'm relatively new to arduinos,coding and electronics in general. I got this to work within an hour very good step by step guide. I have so many questions though mainly about the URLS and addresses.

    ---Define the pin mode of digital pin 3 (Must be done once per boot prior to setting digital outputs. 'pin=3' mean pin 3, 'mode=1' means OUTPUT):{key}&r=definePinMode&pin=3&mode=1------

    When you say that it has to be done once per boot does that mean that this will have to be done every time you turn on the teleduino.

    1 reply

    Reply 6 years ago on Introduction

    Hi leonardsla3,

    Thanks for your comment, and great to hear that you get everything up and running nice and easy.

    You're right about definePinMode having to be called each time the Teleduino is turned on, HOWEVER, you can set preset values on your Teleduino device which means that this can occur automatically and you'll no longer have to call definePinMode.
    To set preset values on your device, pop over to Your device needs to be online for presets to be set (the values are stored in the Arduino's EEPROM).

    Thanks for trying Teleduino!


    Great Instructable! I hooked up my Arduino running Teleduino to my Garage door opener using a Relay, and everything works fine, you just have to access the link that activates the pin and then quickly refresh the page to simulate a button push on the door opener. Is there a way to change the settings in the Teleduino API that will turn the pin on then off with one hit on the URL?

    1 reply

    Hi Rainbowjeremy,

    Thanks for the comment!

    Absolutely, the output time can be set. There is an optional parameter expire_time which sets the expiry on the output in milliseconds. If you set it to output=1&expire_time=1000 then the output will go HIGH, then go LOW after 1 second.



    6 years ago on Introduction

    Hi Nathan, this is really great. I will definitely be trying Teleduino. I notice that you said that it is possible to download the PHP class and host it directly on the Arduino/Ethernet shield. Are you able to provide any more details about how to host it directly on the arduino/ethernet shield?
    Thanks again. Love your work.

    1 reply

    Reply 6 years ago on Introduction

    Hi Moleface.

    Thanks for the comment.

    The PHP class isn't for running on the device itself, it's for running on an external web server that supports PHP. The PHP class contains the methods required to communicate with the Teleduino.

    Hope that helps! Let me know if I can help any further.


    7 years ago on Introduction

    Hi Nathan! This is a very good implementation...i have been searching for exactly this: a solution without port forwarding.

    Do you plan to share your server code so anyone can implement their own web service using your library?