Introduction: Internet Neon LED Heart Light

Miles apart from that special someone or just social distancing? Want to let them know you're thinking of them? Build this internet-connected neon LED heart light and set it beating from your phone or computer, any time, from anywhere.

This instructable is geared toward the beginner and assumes no previous experience with microcontrollers. Some basic soldering skill is required.


• Heart-shaped "LED neon" sign from Amazon (search for heart neon led sign) or elsewhere. These are not real neon signs with gas-filled tubes but LED strips encased in diffusing plastic that resemble neon tubes in various colors. You can buy one with an attached base, or create your own base. Most run on 5v and have USB connectors for power.

Some examples:

• WeMos mini or other ESP8266

• Micro-USB data cable to program the board

• NPN transistor, general purpose such as 2N2222, 2N3904 or 2N4401

• Resistor 1/8 or 1/4 watt, 100 to 470 ohm

• Hookup wire

•Perfboard, heatshrink tubing (optional)

• Diagonal cutters

or wire stripper

• Soldering iron and solder



• Arduino IDE for programming

• Voltmeter basic:

or loose LED (optional)

• Screwdriver

Step 1: Build Your LED Heart Light

Step 1: Prepare the LED heart light

Open the base of the sign by removing the battery cover and any screws. Save the screws.

You want to find the positive 5 volts and ground connections, and a voltmeter makes this much easier. Plug the sign into USB power and probe with the voltmeter. First try the battery contacts in the battery holder. The positive 5v may be marked with a "+", and the ground or negative battery contact is usually a spring with a wire attached at the opposite corner of the battery box. After you have marked the + and ground contacts, you can remove any other battery terminals in the box -- we won't be using batteries at all.

There will be one pair of wires from the USB plug (one to + and one to ground) and another set going to the heart (again, one connected to + and the other to ground.) Remove only the wire going between ground and the LED sign, leave the other three wires as they are attached to the battery contacts. Solder a red wire to the + battery terminal and a black wire to the ground contact.

If your heart has a switch in the base as the example above does and you want to retain its function, the red wire can be soldered to the terminal on the switch that shows 5v on the voltmeter when the switch is in the ON position and zero volts on the OFF position.

[If you don't have a voltmeter (and you should -- simple ones are inexpensive and handy to have, if only to check your batteries) you can use a single LED to find the + and ground connections. The longer lead of the LED goes to + and the shorter to ground. Touch only briefly, as you're not using a current limiting resistor here.]

Step 2: Assemble the Circuit

The circuit is very simple with only a few components. Both a schematic and a wiring diagram are included. You may choose to assemble the circuit on a breadboard for testing but soldering pins to the ESP8266 board may make it more difficult to subsequently attach connecting wires to those pins than it would be to solder wires to the empty holes. If pins are installed on your ESP board, a small piece of perfboard will make your life easier.

If you employ a breadboard during testing, you can insert a single LED to stand in for the heart but make sure to watch polarity: the longer leg on the LED goes to the red + lead. Many widely-available general purpose NPN transistors can be used, such as 2N2222 or 2N4401 but you must verify the pinout of the particular device you use: three wire leads come from the transistor, the emitter (E), collector (C) and base(B) but the order of these leads may differ with device and manufacturer. Base (B) is often but not always the center lead. Check the specification sheet for the particular transistor you use before soldering. Connect one end of the resistor to pin D6 on the WeMos board and the other to the base (B) of the transistor. The value of the resistor needed depends on the transistor you select as well as how much current is drawn by the LED sign but will likely fall in the range of 100 - 470 ohms. We want the transistor to act as a switch in what is known as a "saturated" state. (There are various online calculators for base resistor values but it will be easier to a few different resistors if needed when the circuit is completed.) The ground wire from the heart sign that was disconnected earlier (or the shorter LED lead) is now attached to the transistor collector (C) and the emitter (E) lead goes to the black ground lead. Before going further check all your connections against the schematic and the diagram, especially the transistor connections.

You also need a wire from ground to the G pin on the WeMos mini as well as a wire from +5 volts to the pin marked 5V on the WeMos board. By convention, + voltage wires are often red, and ground wires are usually black for easy identification.

Step 3: Sign Up for Adafruit IO

Next, you will want to sign up for a free account at Select "Get started for free." You will pick a username and be assigned a long alphanumeric key like "aio_5NrczkqJQCTddgWWOQM1glJSx." Record both of these for later.

Create two feeds to carry data between your device and the Adafruit IO server. One is to be named "start" and the other "feedback" (all lower case.)

Create a new dashboard for this project and name it whatever you like. This is where you will direct your browser to control the heart. Add two new "blocks" to your dashboard by clicking the + button. Select a momentary button for the start feed with a Button Text of "Start" and values 1 for Press Value and 0 for Release Value. Next, add an "indicator" block and attach to the feedback feed. Select the colors to represent both lighted and unlighted heart and set conditions to "=1." You can put 0 or 1 in the Test Value box to see how the colors will appear.

You can bookmark you dashboard or save it to the home screen of your phone for easy access. The Start button will, uhh, start the remote heart to flashing and the feedback indicator will light up when the heart has received the start signal and go dark when it turns off in 30 minutes.

Step 4: Program the ESP2866

Download the latest Arduino IDE software for your computer from and install the boards descriptor under Preferences -> Additional Board Manager URLs. You should now see several more boards under the Tools -> Boards menu, including (LOLIN) WeMos mini.

Go to menu Sketch -> Include Library -> Manage Libraries... Here you will search for and install the latest version of two required Arduino libraries: ESP8266WiFi and Adafruit_IO_WiFi. Close the search box when done.

Now download the heart code on this page to your computer and open in the Arduino IDE. You may be instructed to save it in a folder of the same name.

Under the **settings section, enter your own values for IO_USERNAME and IO_KEY from Adafruit as well as your own WiFi network's WIFI_SSID and WIFI_PASS. You can alter several other parameters as you see fit:

#define fadeDuration 1000* 60* 30: Default time for light to be on is 30 minutes

#define minFade 10: Probably don't need to change this

#define maxFade 200: Range 100 - 500

Save the edited code.

Go to the IDE menu and select Tools -> Boards -> LOLIN (WeMos) D1 and mini. Attach the USB cable to the WeMos board and your computer and select the appropriate serial port under Tools -> Port. Select menu Sketch -> Upload, and wait for the process to finish. Disconnect the serial cable.

For more detailed instructions on setup and use of the Arduino IDE, as well as many other topics, check out the excellent

Step 5: Light Up Your Heart!

Plug the heart into a 5v USB power source. You should see a blue LED lighted on the circuit board.

Go to your dashboard and press the Start button. If all is well the feedback indicator will change color and your heart will begin pulsing!


If you have trouble, check the following:

Does the ESP8266 power up (blue LED)?

Check your wiring carefully, especially the transistor connections.

Confirm you have the correct AIO username and key as well as SSID and password in the code.

The IDE serial monitor can be used to help debug any problems.

Step 6: Enjoy!

Shameless plug: This instructable was prepared as an entry in the Hearts contest Vote for it!

Where to go from here (a challenge):

How about incorporating an adjustable timer for how long the heart stays lit?

How about two paired devices, each with a pushbutton to trigger the other?

Heart Contest

Participated in the
Heart Contest