Cheaper Nanoleaf Lights with the EFM8 MCU

Cheaper Nanoleaf Lights with the EFM8 MCU
Crossposted from my Instructables account

I was inspired to make these after I saw the Nanoleaf light triangles in the store, but I was disheartened to see that each tile cost twenty dollars! I set out to make an equivalent product, but to keep the price per tile around three to four dollars. This project isn't complete, as I still need to have the controller PCBs made, but I currently have 50 tiles assembled and working.I've seen other projects that try to replicate this product, but none that I have seen so far allow for any tile to be connected in ANY direction, allowing for more complex designs and easy rearrangement.

This is my first Instructable, please leave a comment if you have any questions!


Supplies

Each tile requires:

  • 1x EFM8BB10F8G-A-QFN20 microchip (Digikey)
  • 9x WS2812 LEDs (LCSC)
  • 1x AMS1117 5.0v voltage regulator (LCSC)
  • 1x AMS1117 3.3v voltage regulator (LCSC)
  • 1x SOD-123 1N4148 diode (LCSC)
  • 1x 10k 8050 resistor (LCSC)
  • 11x 0.1uf 8050 ceramic capacitor (LCSC)
  • 2x 10uf 16v surface mount electrolytic capacitors (LCSC)
  • 1x custom PCB (JLCPCB)
  • 12x TE Connectivity 2329497-2 PCB Spring Fingers for enclosure
  • 1x Linker PCB

The controller (in progress) requires:

  • 1x ESP32 DevKit-C
  • 1x 12V power supply
  • 1x DC-DC stepdown (to power the ESP32)
  • 1x 10K ohm resistor
  • 1x 1n4148 diode
  • 2x SPST pushbuttons (LCSC)

Tools:

  • Soldering iron
  • Reflow oven
  • 3D Printer (for enclosure)
  • J-link EDU programmer
  • Wire strippers / cutters / assorted wire (to make programming harness)
  • Fine tipped tweezers for assembly
  • Blank PVC card to spread solder paste
  • Leaded or lead free solder paste

Order PCBs

The tile PCB was designed in EasyEDA and was sent to JLCPCB for fabrication. I ordered 50 PCBs because it was actually cheaper to order 50 than it was to order only 10 of them. The PCB was split into 3 pieces to keep production costs down.

I used the production options of

  • 1.6mm thickness
  • HASL surface finish
  • 1oz copper
  • White soldermask

I have heard that you can link your JLCPCB and LCSC orders so you only pay shipping once, but I was unable to figure it out. I used the cheapest shipping option and both packages came within two weeks of the order date.

The design is linked here


Prepare Work Area

Place one of the Tile PCBs on a table you don't mind getting dirty and tape two other PCBs next to it to hold it in place like the picture above. Then, tape the stencil down with Kapton tape and make sure the holes are lined up with the exposed pads on the PCB.


Solder Paste

Add solder paste to the top of the stencil. I used this. Spread the solder paste around the stencil using an old credit card or something similar. Make sure that the tiny holes for the microchip get filled in too.

Before you lift the stencil up, try to get as much excess paste back onto the spreader card to reuse if you are making more than one tile.

Lift the stencil up by carefully picking up one corner and peeling the tape off. Once you lift an area up, try not to set it back down as it could smudge some of the paste.

Your PCB should now look like the picture above.


Assembly

Start by placing the microchip on the PCB. Note the tiny dot on one corner of the MCU. This dot lines up with the top left of the chip footprint on the PCB. Next, place the diode above the microchip. The line on the diode should match what is printed on the PCB. After that, add the 10k ohm 8050 resistor above the diode.

Then, place the voltage regulators. The 3.3v regulator is the one closer to the microchip and the 5.0v regulator is closer to the top. Next, place the tantalum capacitors while keeping sure the polarity matches what is printed on the PCB. After that, place all of the ceramic capacitors.


Finally, place the 9 WS2812 leds. Each led has a notch in one of the corners, and the PCB has a triangle printed on one corner of where the LEDs go. Make sure to match these up or you may short out the 5V and GND nets.


Reflow the PCB

For this step, you will need a reflow oven. If you don't have one, you can get the T962 on eBay for $231 at the time of this writing.Personally, I went the route of modifying an off the shelf toaster oven by removing the front panel controls and wiring a solid state relay to the heaters. A diagram of how I wired this is above. To control the relay, I used the Reflow Master oven controller sold on Tindie.

I used a 330 second reflow cycle with a 225C peak temp, a 145C soak temp and a ramp from 20C to 130C over 90 seconds for my preheat phase.

I was able to fit 3 boards in my toaster oven from Target that I built specifically for this project.


Connect Sides of Tile

After reflowing the PCB, separate the sides of the tile by bending and breaking the tabs that hold the different sides in place. Then, sand off any excess PCB left by breaking the tabs so it is easier to fit in the printed enclosure.

Then, find the two sides with the letter "B" and solder all 7 side pads together. The remaining one side can only go in one way and solder that as well.

The tile should look like the above pictures.


Connect Assembled Tile to Programmer

BEFORE CONNECTING THE TILE TO THE JLINK, OPEN JLINK COMMANDER AND TYPE "power on perm" TO ENABLE THE 5V OUTPUT

J-Link Commander is included in the Software and Documentation pack available here

Each tile has a unpopulated header right above the microchip labeled Debug. This header exposes the C2 programming interface which is compatible with the Segger J-Link. I use the EDU version because it is identical to the higher priced versions, but cannot be used for commercial products, which this doesn't fall under. I ordered mine from SparkFun for $72 including shipping.

Pin 1 on the connector is the only one with a square pad on the PCB.


Prepare IDE & Build Firmware Binary

Download Simplicity Studio 4 from here and install it. Sign in or sign up for a Silicon Labs account to get access to the EFM8 toolchain. Then, download the project code from here and import it to the IDE. Then, click the hammer icon in the toolbar and build the project.

You should get a Build Finished message. If a message pops up asking you to enter a license key for the Keil compiler, simply click skip (or you can activate it if you want, its free)


Upload Firmware

Click the button in the toolbar that looks like a stamp over a chip "Flash Programmer." Then, browse for the built .hex file and select that. Click "Program" and accept the terms of the J-Link EDU License. Then, make sure you don't get an error message and the led's on the board should be lit a dim white to let you know that it was successfully programmed.


(Optional) PCB Test

For this step, you will need to enable the Virtual COM port on your J-Link by opening J-Link Configurator and choosing the attached programmer.

Wire the "DAT" line from one of the tile's sides to the circuit attached in the photos above.

Open a serial monitor with 112500 baud 8N1 and use these commands

  • 0x08 0xFF 0xFF 0x00 0xFF 0x0A
  • 0x08 is the "set color" command
  • 0xFF is "all tiles"
  • 0xFF 0x00 0xFF is the color
  • 0x0A is a newline character

The tile should now be purple. If not, double check that the diode is wired correctly and try again.


3D Printing Enclosure

I designed the enclosure to be originally injection molded to save time instead of 3D printing each tile, but when the cost for only 50 enclosures came to be $6000, I just went "nope!" The enclosure was designed in Inventor 2021 and has two parts, a base and the top diffuser. The base has holes in the sides to allow tiles to be connected with the connector PCBs (linked below) or wires. If you go the route of using the connector PCBs, you will need 12 of these per tile to allow the PCBs to connect together.

If you don't have access to a 3D printer, you can show off the engineering behind these tiles by making a kinetic sculpture and linking the tiles together with copper wire. Just make sure that the wires don't short out!


I printed 20 enclosures and I found that these tiles print fine up to 150mm/sec without significant quality degradation, which allows around 60% print time reduction.

I forgot to take pictures of this step, but you just place the completed PCB in the base and snap the top on.


Connecting Tiles

The tile linker PCB is available here. These slot into the enclosures and use these connectors. Make sure that the two sides line up.


Controller

The controller software is work in progress and will be updated here. Follow the schematic diagram to connect your ESP32 to one of the tiles. Upload the software using PlatformIO and connect to the WiFi hotspot to have the tiles connect to your WiFi.


Done!