When I first saw the IKEA FILLSTA lamp I knew I wanted to create some type of LED project with it. It has an interesting look and is a bargain for $13 (USD). I bought one and it sat unused for quite a while. I've finally gotten around to using it, and am pretty happy with it as a WI-FI controlled accent lamp and clock.
In this project, I will use an IKEA FILLSTA lamp to create an Adafruit Feather HUZZAH ESP8266 controlled lamp with APA102-C LEDs for the light and a LED matrix time display.
The settings for the lamp can be modified through a web browser, and NTP will be used to keep the time accurate. The settings include various clock settings and some different lighting modes. There are also daily wake up settings to have the light gradually turn at a scheduled time over a specified period.
The light isn't super bright so it isn't going to light up a whole room. It is more appropriate as a accent light or light you might keep on a nightstand.
Step 1: Parts & Preparation
Light Socket to Outlet Adapter or equivalent for you locale
JST 2 Pin connectors (2 sets)
JST 4 Pin connectors (3 sets)
Capacitors (4 1000 µF 6.3V or higher)
Wires / Solder
It is important that you choose a USB charger able to power the LEDs. I chose a 2 port charger that can provide 12 Watts through each port. You could use less or more LEDs depending what your USB charger is capable of.
Before starting this project, your FILLSTA lamp should be assembled and you should also have basic soldering skills.
Step 2: Setup Arduino and Program Your Board
If you do not have the Arduino IDE setup for ESP8266 you will need to do that. You can do it through the menus by going to Tools > Board > Boards Manager. In the boards manager you will then install the esp8266 module. Once installed you will be able to select the Adafruit HUZZAH ESP8266 board.
Next you should setup ability to upload files to the ESP8266. Go here and download and install the file upload tool and instructed in the "Uploading files to file system" section.
You will also need to install some libraries needed for this project. Most of them can be installed through the Arduino library manager by going to Sketch > Include Library > Manage Libraries. You will want to install NTPClient, elapsedMillis, Adafruit_GFX, and Adafruit_Dotstar libraries.
You will also need to manually download and install the Adafruit_IS31FL3731 library which does not seem to be available through the library manager. See instructions on the Adafruit website
Once you have everything setup you can download the Arduino code for this project here. You should copy the folder into the folder where you keep your Arduino projects.
You should now be able to open the project in the Arduino IDE. You will need to set your WIFI SSID and password near the beginning of the pixel_lamp file. Once that is done, with your board plugged in through USB, use the tools menu item "ESP8266 Sketch Data Upload" to upload the project data files and then upload the actual project from the Arduino editor.
Your board should now be programmed for this project.
Step 3: Solder and Assemble the USB Shells
The project will be powered through two 2 pin JST connectors with wires soldered into USB shells.
My JST wires are red and black, so I soldered red to the USB 5V and black to GND. The 5V and GND pins are on opposite sides. See the image for reference.
The metal pins in the USB shell where you solder the wires form a small channel. I first filled the channel with solder and then remelted the solder while pushing the wire in. Once the wires are in, position them and snap the shell together.
Step 4: Prepare LED Matrix and Controller
I assembled the matrix and controller as shown in the Adafruit tutorial, with one difference. Instead of wiring the initial set of headers, I wired a JST connector as follows:
- SDA - Blue
- SCL - Green
- GND - Black
- VCC - Red
I recommend that you use a JST connector for this since the LED matrix will be attached to the lamp with adhesive tape and using a JST connector will allow you to disconnect and remove the rest of the electronics from the lamp if necessary.
Step 5: Prepare the LED Strips
I cut two led strips from a one meter strip with 144 LEDs. I cut one strip of 32 LEDs and one of 42. Each USB socket powers one of the strips. One is shorter because the ESP8266 and LED Matrix are also powered by the same USB socket.
Since the larger strip that I cut from already had a JST connector I only needed to solder a JST connector for the second strip. I made sure to solder it to match the first strip.
My strip had arrows showing the direction from the input end to the output end. The input end is the end that needs to be connected to control the strip. Also, when looking close I could see labels for 5v, Ground, Clock and Data. I have circled them in the image.
Step 6: Solder the Prototype Board
I'm including a Fritzing image to show the wiring for the prototype board. The two main components on the board are the Feather HUZZAH and the logic level converter.
The logic level converter converts 3 volt logic signals from the Feather HUZZAH board to 5 volt signals. The input and outputs of the logic level converter are on opposite sides straight across from each other. In the diagram inputs to the logic level converter are at the bottom and outputs at the top. There is also an input for the lower voltage at the bottom, which will connect to the Feather HUZZAH 3V pin and an input for the higher voltage at top which will connect to 5V.
The I2C outputs from the Feather HUZZAH are wired through the logic converter to the inputs of the led matrix. So the Feather's SDA pin signal goes across the logic converter and to the matrix SDA pin. Likewise for the SCL signal.
The Feather's SCK signal goes across the logic converter to the clock input for both of the LED strips, and the Feathers MO signal goes across the logic converter and to the LEDs strips data inputs.
The Feather Huzzah is powered through the USB pin toward the top of the diagram. The smaller LED strip should be powered through the USB input towards the top of the diagram that is also powering the Feather Huzzah and LED matrix.
Other connections are for the various 5V and Ground inputs.
Capacitors are connected to help prevent voltage spikes from the incoming USB power and again right before the LED strips.
Step 7: Attach the LED Matrix to the Lamp
Use the double sided adhesive strip to connect to a section of the FILLSTA lamp. First I applied the strip to the lamp section. Next I pressed the LED matrix into it. The photos show it with the clock on, but that is not necessary. Notice that the silkscreened text on the back of the LED matrix controller will appear to be upside down relative to where the top of the lamp will be.
Step 8: Assemble
Connect everything and turn it on to make sure it is working. After successful startup the LED matrix will display the IP address to access the settings webpage. Enter the address into the browser of a device also on the WIFI network and you should get the page.
I have tested on OS X Chrome, Chrome Android, and IOS. On Android and IOS you have the option to save the page to your home screen, so you can access if just by pressing the icon. My router seems to assign the same address after restart. If yours doesn't then you will have to enter the address and save to the home screen again after a restart.
After testing, I used more of the adhesive mounting tape to attach the circuit board to the USB charger. Then I put the light bulb adapter into the lamp with it turned off. Next I plugged the USB charger into the adapter and reassembled the lamp section. I positioned the light strips within facing toward the front.
The lamp is now complete.