Finito! MX-5 Rear LED Strip Console Controller
Wanting to have more control of the Miata’s rear LED strip sequences and features (see my Phase I build), the next step was to build a controller into the center console unit that allows me to control them and also display state and status info. As I didn’t want to run wires through the car, the Master controller communicate wirelessly to the Slave unit. The details documented here builds on Phase I by adding the Master Control unit, and updating the Slave unit hardware to a NodeMCU ESP8266, and of course code updates for both as well.
Check out the video below for a demo of the features, then read on below for build details.
How it Works:
Both Master and Slave units use NodeMCU Mini ESP8266 MCUs and are setup to communicate to each other using Espressif’s ESP-NOW protocol. This saved the mess of having to run wiring through the car. The Master consists of the controller, a display, button and a few photoresistors. All of which are mounted into the front console unit. The Slave has the same MCU and an Adafruit NeoPixel LED strip with some other bits to monitor the brake signal. The Master unit allows scrolling through a number of different light sequences by way of the button. Short presses scroll the modes, a long-press initiates the selected mode.
As the OLED covers up LEDs on the main console PCB board and status LEDs, I used a few photoresistors to “watch” both the Seatbelt and Airbag warning LEDs, and when they turned on, the OLED displays the relevant icon graphic. Yes, I’m aware of my blackout decal goof, but it can’t be seen at driving height angle 😉
Progress build pictures showing different parts of the console mods, fitting the OLED, controller, 3D printed case, etc.
Demonstrating component testing and some early ideas before the final build:
Master Unit: A little simpler, this consists of the NodeMCU Mini ESP8266, the OLED, and the photoresistors. For the OLED, I have to throw a ‘facepalm’ out there as I didn’t document the SCL/SDA pins – which also aren’t called out in the code (don’t need to). So, I basically forgot to note it after I hooked it all up and threw it in the car. I’ll update one day if I ever have to pull it out, but try using a combo of D5/D4 between the two to see which will work. Could also be D7/8 but D6 was not used. Sorry about that… For the sensing of the Seatbelt/Airbag alerts, I went a different route with the photoresistors due to there only being one Analog pin on this MCU. I’m using a multiplexing approach in the code. Basically each photoresistor is connected to a Digital pin which briefly powers up in alternating sequence, then through the resistor/diode combo the output is read via A0. The code does all this and reads the output of each effectively allowing 2 sensors on 1 (analog) pin. If you are using an MCU with > 1 Analog port, you can just break them out and read separately (also won’t need the diodes).
As for powering the master unit. I want to be able to upload code changes in the future. To do this, a USB cable is needed. Since USB also can provide power, and in the case of the master not much is needed, I just hacked up a USB cable in 2 parts. One cable is used to take 12V from the car Accessory fuse and drop it to 5V. The end of that cable is a USB female connector. Then I plug a standard USB cable from there into the NodeMCU. When I need to do code updates, I just unplug the USB cable, and plug into my tablet to update. The picture below shows the unit from fuse panel to USB female plug.
Slave Unit: The below schematic was updated from the Phase I build to include the NodeMCU Mini ESP8266 and remove the manual mode button. For specifics on that build, see the link above. The rest of the components are the same – the Opto to monitor the brakes, the LED strip connection, and switching voltage regulator. The Status LED is optional as it offers a way to monitor the Slave unit while mounted in the trunk. The code just sends a heartbeat blip to it.
|Master Unit||Slave Unit|
|NodeMCU Mini (you need 2) (3 pack here)||NodeMCU Mini (3 pack here)|
|OLED Display (AliExpress)||See Phase I build for other components|
|Pushbutton: This or these (12mm recommended)||LED Silicone Light Tube (optional). Varies depending|
on LED strip. For this project, T0410 was
used (5mm wide LED strip).
|Photoresistors (2)||Custom 3D Printed clips to hold the light tube and wiring|
|Various resistors (10K)|
|Power: Need to switch from 12V (vehicle) to 5V USB. |
I modified a USB cable with this in between.
The code for the original (Phase I) Slave unit build has been updated for the MCU change to the NodeMCU Mini as well as other tweaks and changes including new sequences as well as comms for ESP-NOW. The Master code of course is new.
Source code, schematics and build information is provided to maintain the spirit of open source. Per that model, you are authorized to re-use, change, modify and update the code as long as original credits are maintained and published for public consumption. If blogging, posting videos etc, proper credit must be provided. It may not be used for commercial, re-sale or other for-profit purposes unless written consent is provided. Please also consider donating as it helps me with future projects and of course providing these write-ups 😉
Usage & Code: Please see my Disclaimer page.
|Master Unit||Slave Unit|
I’m already thinking of new ideas. One thing that bugs me is the visibility of individual LED “pixels” when looking at the back of the car. I’m going to take a stab at using the below LED light channel. It has an semi-opaque side where the LEDs face which blends the light from each pixel, which makes the LEDs flow from one to another. I’m waiting on an order of another set of the LED strip which I’ll then install into this unit, do some testing and mount to the car.
IPS Watch Display: Already thinking about this! The current OLED mono display was essentially the ONLY unit I could find that fit the console opening. It works, but the lack of colour and high resolution bugs me. I was initially searching for a colour IPS display in the same form factor, but after exhausting that, I don’t think they exist. Everything is too tall. I decided to think outside the box and consider these round watch displays. It won’t fit the console but I’ll look at 3D printing a casing of sorts and look for mounting options around the console area. Stay tuned for that!