To build this project you'll need the following parts:
- Feather Huzzah ESP8266. You can use other ESP8266 boards like the simpler Huzzah ESP8266, but you'll need more parts like a serial to USB cable to talk to them. Pick up a set of female Feather headers to make connecting wires to the Feather easier.
- NeoPixel Diffused 8mm Through-Hole LED. You can use any NeoPixels but I recommend the large 8mm through-hole LEDs for their large size and brightness. The 3D printed LED holder for this project is designed for the 8mm NeoPixel.
- 5V power supply. The easiest way to power the board is with a 5V power supply plugged into the USB port. You could use a battery like a lipoly pack, but I don't recommend putting a lithium battery near where it can get wet or fall into water. Be careful, electronics and water don't mix! Always plug devices into a GFCI outlet and do not place them where they can fall into water.
- Soldering tools & wire. You'll need to solder headers to the Feather and solder wires to the NeoPixel.
Start by following the Feather Huzzah ESP8266 guide to assemble and test the ESP8266 board. Don't continue until you're sure the board is working and you can upload sketches with the Arduino IDE!
Next solder wires to the NeoPixel. Use a long enough length of wire to place the LED on the rim of the toilet bowl and keep the Huzzah board safely away from the toilet. You'll need to solder wires to the data in, 5V and ground pins (the data out wire is unused):
It helps to tin each wire and pin with solder first, then hold them together with helping hands and apply the soldering iron to flow the solder. Don't forget to slip on some heat shrink tubing too!
Connect the NeoPixel to the Feather Huzzah ESP8266 as follows:
- NeoPixel data in to Huzzah ESP8266 pin #2.
- NeoPixel 5V to Huzzah ESP8266 3.3V power. You can instead use the VUSB pin if you're powering the board from its USB port. Don't power the NeoPixel off the 3.3V power if you're using more than 1 or 2 pixels! Consult the NeoPixel Uber Guide if you have any questions about how to power NeoPixels.
- NeoPixel ground to Huzzah ESP8266 ground.
If you're having trouble getting bare wires to stay inside female headers, tin the wires with solder until they're thick enough to firmly stay in place.
That's all there is to assembling and wiring the hardware for this project!
If you have access to a 3D printer you can print a case for the Feather Huzzah ESP8266, and a bracket to hold the LED to the side of the toilet bowl. These small parts should print on almost any 3D printer and are fine to print with PLA.
The LED bracket is designed to hold a 8mm LED and fit a toilet bowl with a 40mm wide rim. It will probably work for slightly larger and smaller bowls, but you might need to adjust the part or design your own if your toilet is different. You can find the source for this part on Tinkercad and adjust it as necessary.
Download the STL files for these parts from their home on Thingiverse below:
The parts should print without any need for support. For PLA I used 20% infill and 0.02mm layer height with good results, but adjust as needed for your filament, printer, etc.
The Feather Huzzah ESP8266 should snap into place without need for screws, etc. The case can optionally accomodate a slide switch however it is unused in this project.
For the LED holder thread the wires through the side and hole in the top, then pull them through to put the LED into place in the hole. See the photos on the left for more details.
Once assembled your smart toilet light should look something like the following:
Place the clip on the rim of the toilet and make sure it is secure. You can use tape or other means of adhesive if the clip is not held firmly in place (be careful not to use anything too permanent though!). The Feather Huzzah ESP8266 should be placed somewhere secure and near a power source.