If you’ve ever parked a vehicle in a tight garage, you know that a few inches can be the difference between closing the garage door smoothly or putting a dent in your bumper. What started years ago as a simple micro-controller project has grown into one of my most requested DIY smart home builds. Yes, you could certainly go "low-tech" with the old tennis ball on a string. But what fun is that? And good luck integrating that tennis ball into your home automation system or using it for vehicle presence!
Today, the original ESP Parking Assistant is getting a complete, ground-up rewrite with new version 0.60!
While the physical hardware and sensor setup remain largely identical to the original design, the software running under the hood has been entirely modernized. Version 0.60 brings a brand-new responsive Web Interface, a seamless 1-click browser flasher (no IDE required!), Wi-Fi captive portal onboarding, and optional dynamic Home Assistant MQTT Discovery (the system is full functionality without Home Assistant).
Whether you're building a unit from scratch or upgrading an existing setup, this guide covers everything you need to know about the updated parts list, wiring adjustments, 1-click firmware installation, and Home Assistant setup.
🛠️ First-Time Builder?If you are building the physical enclosure and mounting hardware for the first time, the physical assembly steps, enclosure tips, and sensor mounting rules remain 95% unchanged. You can check out my original build video, the update video for adding side sensors, and sensor bench test comparisons (original blog article) for deep-dive hardware tests before following this guide for assembly and flashing.
If you built the original system, or if you passed because certain options were not available, you may be interested in the key new features in this version. You can see a preview of the new features in the Parking Assistant Update video. All original features remain, but the new v0.60 adds or updates the following:
- Completely overhauled and rewritten firmware. Designed exclusively for the ESP32 (ESP8266 support was dropped starting with version 0.52).
- One-click install right from the firmware documentation page. No more third-party utilities or requiring the Arduino IDE to flash the firmware!
- Improved onboarding. The onboarding process shows status and success/failure. What's more, if successful, the onboarding process shows you the newly assigned IP address for the system. No more rooting around your router settings to find the system's IP address!
- New web interface. Apply and test colors, effects and distances without rebooting each time! Test combinations and only save when you have the system fine-tuned.
- Use different GPIO pins. GPIO pins are now specified in the app. No need to compile your own version to use different pins for your hardware.
- Full color selection for Zones. You are no longer limited to a list of predefined colors.
- New controller commands. New options will show the contents of your saved configurations or produce a full system information report (ideal for troubleshooting).
- Decluttered main page. By moving hardware and integration settings to their own pages, the main page now only has the most commonly used settings.
- Expanded MQTT (Optional). The old version only offered a few sensors: car presence, front sensor distance and side sensor distance (if installed). The enhanced MQTT now has over 40 state and command topics that allows greater integration with third party systems for enhanced automations.
- New HTTP API. A new API allows many of the same controls as MQTT, but works without a broker or any intermediate systems. Simply send a formatted URL command (e.g http://[controller_ip]/api?ledstate=on) to control the system directly from a REST command or even from a browser.
- Enhanced Home Assistant Discovery (Optional). Add your device to Home Assistant via a single button click! No YAML or manual configuration needed. A new 'dynamic' mode lets you select which entities or groups to include and which to omit. Update or even remove the device at any time without creating duplicate or orphaned entities in Home Assistant.
- New "No WiFi" Option! A much-requested feature, after onboarding you can now set the system to operate without local WiFi. Ideal for situations where your garage (or outbuilding) may not have reliable WiFi.
There are numerous other small 'quality-of-life' updates and fixes under the hood. The enhanced firmware documentation has many more details on the setup and use of these new features, so this guide won't go into the details.
⚠️ SPECIAL NOTICE FOR EXISTING USERSIf you already have a parking assistant and are running firmware version 0.52 or earlier, there are special upgrade instructions when upgrading to version 0.60 and later. See the section at the end of this document.
Basic System Operation
Just to provide some background for the following build instructions, it might help to have a high level understanding of how the system operates. Again, the firmware documentation goes into much more detail than I'll be providing here.
Parking Zones
Many of the options and settings work on the concept that the controller uses four separate "parking zones" as your vehicle moves closer to the sensor:
![]() |
| Click for larger view |
1. Wake Zone: When your vehicle first enters the edge of the wake zone (farthest zone from the sensor), the LED strip will light up in a solid color (set by you - shown as green above) to let you know the system is awake and actively tracking the vehicle.
2. Active Zone: As soon as the vehicle enters the active zone (shown in yellow above, but again, you can specify the color use), the LEDs will use the effect you've selected to indicate the car is approaching the next zone. For example, when using the "Out-In" effect, the LEDs will light up starting on the outside edges and continue lighting up towards the center as the vehicle approaches the desired parking spot. Other effect are available as well, and these are described in the Github wiki.
3. Parked Zone: This is the desired final parked location of the vehicle. When the front edge of the vehicle enters this zone (shown in red above, but again you specify the color), the LEDs will all turn solid. How wide you make this zone will depend upon your particular situation, but if at all possible, a parked zone width of at least 6" is desired. Otherwise, it may be hard to precisely stop between the active and back up zones. Also recall that if the front of your vehicle has some curvature, the reported distance of the sensor may vary based on the left/right position of the car as related to the sensor.
The variance will depend somewhat upon the curvature of your vehicle(s) and how consistently the driver parks the vehicle left/right of the sensor. For this reason, you should make the parking zone as wide as possible while still having the car in the desired parking location. Adding an optional side sensor for lateral guidance can also improve accuracy by assuring the car is in the same left/right position each time.
4. Backup Zone: If the vehicle pulls too far forward, the LEDs will begin to rapidly flash (color of your choice), telling the driver to back up. The LEDs will continue to flash until the vehicle leaves the backup zone.. or until the parking timer expires.
A note on the active zone size and the sensitivity of the LEDs:
Your initial inclination might be to make the active zone as large as possible. But in actuality, a smaller active zone means the LED lights will be more 'sensitive' to changes in distance.
For example, let's say you have a total of 24 LEDs and you set the active zone distance to be a total of 8 feet (96"). This means a new LED will light up for each 4" traveled by the car. However, if the active zone is reduced to 4 feet (48") a new LED will light up for every 2" of travel. The greater sensitivity can be helpful as you approach the parked zone... especially if you have a shallow park zone.
Alternatively, you can use a higher LED count, but you have to be aware of power consumption. Substituting something like 160 LED/m COB WS2812b LEDs will provide approximately 100 LEDs in the same strip length as 36 "regular" LEDs (60 LEDs/m) and consume about the same amount of power.
So, you may want to experiment with different active zone distances and LED counts, but as a general rule, you may want a wider wake zone and a narrower active zone, or more LEDs, to provide better sensitivity for the driver.
Side Sensor (lateral guidance)
If you opt to include a side sensor in your build, as mentioned above, it can assist in overall accuracy as it assures the car is in the same left/right position relative to the main front sensor and can eliminate parked differences due to the curved front of the vehicle.
The above diagram shows the sensor on both sides, but obviously you only need one sensor and the left/right side will be determined by your particular situation and the nearest wall.
System Installation Limitations and Caveats
There are a few limitations and requirements regarding physical installation to successfully use this system. I thought I'd list those here before you read any further!
Front Sensor Location
For the front sensor, you need a location to mount the sensor at approximately bumper level and at least 12" (305 mm) away from the front of the car when parked in its final position.
Side Sensor Location (optional)
If you opt to add lateral guidance (side sensor) to your system, the side sensor needs to be mounted on either the left or right side of the vehicle at approximately mid-door level and within 2- 48" (50 - 1220 mm) of the car when parked.
LED Strip
The LED strip can be mounted vertically or horizontally but should be in full view of the driver when parking.
Power
The system runs off of 5V DC, but needs continuous power. Therefore you will need an AC outlet in the vicinity for powering a 5V transformer or power brick.
WiFi
WiFi is needed for the initial onboarding of the controller, but once complete, you can optionally set the system to no-Wifi mode for routine use. So if WiFi is unavailable in the installed location, simply install and onboard the firmware where WiFi is available, and then disable WiFi and install in the final location.
If your desired installation location cannot meet the above requirements, the system is unlikely to work for your situation.
Parts List
The parts remain basically the same as the original version. There are some changes, such as no longer supporting the ESP8266 and swapping out the level shifter for a better version. But if you have already built a system, as long as it is using an ESP32, no physical modifications are required for this update. Your existing system will fully support the new firmware. Note that not all parts are required and some may be substituted depending upon your specific build and installation. Refer to the notes following the list.
Minimum Required Parts
| Part / Link | Notes |
| ESP32 Mini | Other ESP32 boards possible (see below) |
| TFMini-s LiDAR Sensor | |
| Logic Level Shifter | Highly recommended! |
| ElectroCookie Protoboard | |
| WS2812b 60 LEDs/m Strip -- OR -- | Approx. 2-3 feet long |
| WS2812b 160 LED/m COB Strip | |
| 5V 3A USB Charging Block -- OR -- | For up to 50 standard/120 COB LEDs |
| 5V 5A Power Supply | For up to 100 standard/250 COB LEDs |
| Pin Headers – Male Straight | May be included with ESP32 |
| Pin Headers – Female (8 or 10 pin) | |
| 20 Gauge Solid Core Wire | |
| 20 Gauge Stranded Wire | |
| USB Data Cable | For initial flashing of firmware |
Optional Side Sensor Parts
| Part / Link | Notes |
| VL53L0X Time-of-Flight Sensor | |
| Pin Headers - Male 90° | |
| May be needed for long wire runs | |
| QwiicBus Signal Extenders | (N/A via Amazon: Links to Sparkfun site) |
| Cat 5e Ethernet cable | Or Cat6 – length depends on sensor position |
Wiring, Connector and Mounting Parts
| Part / Link | Notes |
| Aluminum LED Channel | |
| Double-sided Mounting Tape | |
| IC Socket – 14 pin | For mounting level shifter |
| Wago Lever Nuts | |
| Barrel Connector | |
| Dupont Connector Kit | |
| JST Connector Kit (2.54mm) | |
| Crimper | |
| Braided Sleeve | |
| Heat Shrink Tubing |
Additional Bench Testing Parts
| Part / Link | Notes |
| Solderless Protoboard – 3220 point | Or use a couple of standard breadboards |
| Breadboard Jumper Kit | |
| Standard Dupont Leads |
3D Printed Enclosures/Mounts
| Part | Notes |
| Controller Enclosure (Basic) | All .stl files available in Github Repo |
| Controller Enclosure with Mount tabs | |
| VL53L0X Enclosure and Mount | |
| Qwiicbus Extender Mount |
Alternate Parts
ESP32:
While I am using an ESP32 Mini for my build, any standard ESP32, such as the 30-pin NodeMCU-style should work. However, if you wish to use a different ESP32 model (such as the S-series or C-series), you will likely at a minimum, need to recompile the source code for your model and other changes may be required. Unfortunately, due to the large numbers of different board types and my limited time, I cannot officially support any ESP32 boards other than the original WROOM32. This is the only model that has been thoroughly tested.
As long as your dev board uses this actual chip, the system should work as delivered. If you want to use a different ES32, you are most likely on your own!
TFMini-s (front sensor):
Yes, this sensor is a bit pricey (>$40) and will likely cost more than all the other parts combined! But there is a good reason a less expensive sensor (like the ~$3 HC-SR04) is not used. Both the original video and blog article cover my testing of a variety of different sensors and why the TFMini-s was selected. You cannot substitute this item without modifying the firmware source code!
VL53L0X (optional side sensor):
Inclusion of the side sensor is optional, but including one will actually help with the accuracy of the front sensor (see discussion below). However if you do opt to include the side sensor, it must be a VL53L0X. Like the front sensor, you cannot substitute this sensor without modifying the source code. But you can eliminate it without updating the firmware source.
Logic Level Shifter:
The use of a logic level shifter has been debated to death in many of my other LED-related videos and I even have a few dedicated videos on the subject. I'm not going to debate the issue here, but the addition of a shifter will give you a much more flexibility in the placement of the controller in relation to the LED strip. Without a shifter, you will need to keep the controller in very near proximity to the strip... and you may still have flickering or misbehaving LEDs. I'll include a diagram for creating a controller without the shifter, but I do not recommend it! Also note that this version is using a different shifter, better for LEDs. If you want to know more about why I changed shifters, you can watch my Mea Culpa video on the subject.
Other LED Types:
The system is specifically designed for using WS2812b LED strips. While I use a standard 60 LEDs/m version, you can use pretty much any type of linear WS2812b LEDs. While the system recommends between around 25-40 LEDs when using 60 LEDs/m, it will support anywhere from 5 - 600 total LEDs.
So you could substitute something like a WS2812b COB LED strip, which for the version I tested, had 160 LEDs/m.
In fact, the more LEDs you have, the higher the resolution/sensitivity. For a standard strip of approximately 2 feet in length, I could have around 38 LEDs using a standard 60 LEDs/m. But if I use a COB LED strip of the same length, I can have approximately 100 LEDs... more than 2.5 times the total number of LEDs, and greatly increasing the system's sensitivity. I actually plan on upgrading my system to use COB LEDs in the near future. And if you go ahead and place the COB LED strip in the aluminum channel with diffuser, it gives a nice even glow on the strip. But you can certainly use the more common LED strips... I've been using those for years in my parking system without issue.
Regardless of LED type used, you want a strip that is approximately 24-30" long. This is the size strip that I use and it works out fine. Yours can be a little longer or shorter (more LEDs mean more sensitivity, but also require more power).
The only other concern about the number of LEDs is the power (amps) required to fully power them, which I cover below.
To use other types of LED strip (non-WS2812b, like maybe SK6812), you will need to modify the source code and compile your own version, since the LED type is currently hardcoded in the source:
FastLED.addLeds<WS2812B, LED_DATA_PIN, GRB>(LEDs, NUM_LEDS_MAX);
What about 12V or 24V LEDs?
These won't work correctly. Even if the firmware is updated for the proper LED type, 12V LEDs can generally only be controlled in groups of three and 24V LEDs in groups of six. For this project, each individual LED needs to be addressable. This is normally only possible when using 5V addressable strips.
Unfortunately, I do not have the bandwidth to support multiple versions for all the variety of LED strips, so if you opt to use LEDs other than 5V WS2812b, you are once again on your own for the code and support.
Power Supply
More LEDs require a bigger power supply. The actual wattage of the power supply required depends upon both the type and number of LEDs and the brightness at which they are operated. The WLED project has a nice calculator you can use to estimate the total current draw based on number and type of LEDs. The Parking Assistant application also has a current limiter option to limit the number of amps the LEDs draw by reducing the overall brightness. You generally want the power supply approximately 20% larger than the total expected current draw (allowing about 500 mA for the controller itself). So if your expected current draw is 8A, you'd want at least a 10A power supply. If you have a limited number of LEDs (<45 standard or <120 COB), you can probably get away with something like a 3A cell phone charger and running at brightness levels at 50% or less. But I generally don't recommend these if you are expecting to draw close to the max current rating. Running a power supply for extended periods near its peak output will likely lead to an early failure. It is better to have a power supply with higher wattage than needed as opposed to the reverse.
Note: Use the calculator to verify, but because the smaller COB LEDs draw less power, a 24" strip of 160 LED/m COB LEDs will draw about the same amount of power as a standard 60 LEDs/m WS2812b strip.
Base Controller Wiring
I always recommend that you create an initial bench version on a breadboard to test your individual components, wiring and the firmware. There's nothing more frustrating than building and soldering a final version only to find a particular component (like a shifter) is faulty. To build a breadboard version, just recreate the same electrical connections using Dupont jumpers, alligator leads, etc. that is shown for the final soldered version.
Let me start by show the different build designs based on selected options and then I'll break down the assembly process a bit and cover different power options based on total number of LEDs. Note that the diagrams show the default GPIO pins, but with this latest upgrade, you can use other GPIO pins and specify them in the web application. But I recommend avoiding the use of any strapping GPIO pins (those used in the normal boot process). In addition, you cannot use GPIO0 for any components as this is a reserved GPIO number for internal system use.
Full Controller version with All Options
This version shows the controller with the optional side (lateral) sensor and the recommended level shifter.
![]() |
| Click to enlarge |
Controller version without optional Side Sensor
This version is identical, except it eliminates the optional side sensor/lateral guidance. Since a side sensor isn't used, we don't need the 3.3V power rail, but the ground rails still need to be joined to create a ground rail for the level shifter.
While I don't recommend eliminating the shifter, if you keep the controller a short distance from the start of the LEDs, it is possible to get away without it. But it is also possible that your LEDs could flicker or otherwise misbehave due to voltage drop if you eliminate it. This is the most basic version that can be created and still fully function.
For all of the above diagrams, it is assumed the total expected draw of your LEDs is less than about 2.5A. This would be around 40-50 standard WS2812b LEDs or around 100 COB WS2812b LEDS (COB LEDs draw only about 47% of the power). If you are unsure, either directly measure the current draw using a multimeter or you can get a good estimate by using the online WLED Calculator and specifying the number/type of LEDs you are using. Note that the current draw will be significantly less when running at lower brightness and/or single non-white colors. In the case where the expected total current draw is less than about 2.5A, we actually funnel the 5V for the LEDs through the ElectroCookie board. But even this is a little too high for safely running at the maximum current for extended period. As an extra safety precaution, once other wiring is complete, add a couple of "bridge" wires to underside of the 5V power rail.
![]() |
| Click to enlarge |
Simply run an 18 or 20 gauge wire from the start to end of the (+) and (-) power rail. Just assure you are bridging the 5V rail and not the 3.3V power rail! This will allow the system to safely carry a little more current as opposed to just the fine copper traces on the ElectroCookie board itself.
Power Options - High LED Count
If your expected total LED current draw is expected to exceed 2.5A at any point, then you will need to split the incoming power and run parallel legs to the controller and LEDs.
![]() |
| Click to enlarge |
This provides power to the LEDs without passing the current through the ElectroCookie. If you keep the LED strip to around 24" or so and are using standard WS2812 LEDs at 60 LEDs/m or a COB LED strip at 160 LEDs/m, and providing bridging for the 5V power rail, it generally won't be necessary to split the power like this. But it is provided in the event you use a larger number of LEDs that could draw more than 2.5A when fully lit.
Base Controller Assembly
If you are experienced at wiring diagrams and soldering, you can probably skip this section and rely just on the diagrams alone to build your controller. However, if you are a bit newer at DIY electronics, I'll provide a few tips and tricks for creating your controller.
Pin Headers
While you could technically solder your wire connections directly to the through holes, I highly recommend the use of pin headers. If a component fails or needs to be replaced, the use of pin headers allows that component to be swapped out without any desoldering/resoldering.
If using an ESP32 Mini and the VL53L0x side sensor, you will need to solder male pin headers to the component. Note that the ESP32 Mini actually has two rows of through-holes to expose more GPIO pins. However, we are only going to use the inside row, highlighted in white on the board.
Solder male pin headers into at least the 8 through-holes on each side of the board. Optionally, you can use 10-pin headers to include the holes shown in orange. These pins aren't used, but might help with alignment when inserting the ESP32 onto the controller board. Whether you opt for just the 8 pins or 10, you'll just need to match the female header for the same number. Note that the GPIO numbers shown on the bottom, the inner columns align with the inner through holes. Do NOT install any headers to the outside columns. Doing so would electrically connect the GPIO pins together when inserted on a breadboard or ElectroCookie... and that would be a bad thing!
When done, your version should resemble this:
You will also likely need to solder pin headers onto the VL53L0X side sensor, if you are including one in your build.
For this component, you'll need a 6-pin male header. Technically, since the GPIO1 and XSHUT pins aren't used, you could theoretically just use 4 pins. You can use straight male pins like on the ESP32, but depending on if you are going to put the sensor in an enclosure and/or your planned mounting location, you may want to consider 90° pins.
With the header pins attached, we are ready to move on to the ElectroCookie board. And the first thing I like to do here is go ahead and join the ground rails.
Since the ESP32 only has one ground pin on the 5V side, we need a ground on the opposite side for the 3.3V power rail if using either the shifter and/or the VL53L0x sensor. You can solder a small jumper in place or even create a solder bridge to join the ground rails together.
Next, I like to go ahead and solder the female pin headers in place for the ESP32. Again, the female pin header should match the number of male pins you soldered onto the ESP32 (either 8 or 10 per side). If you are planning on placing the controller in an enclosure, be sure to offset the pin headers so that the ESP32 doesn't hang over the edge of the ElectroCookie. For me, using just the 8-pin header, that means the first pin should be aligned with row 3 on the ElectroCookie.
While entirely optional, I also like to 'socket' the level shifter should it fail or be faulty. Again, with the emphasis on making parts replaceable without any desoldering.
![]() |
| Click to enlarge |
Then, I prefer to go ahead and complete all point-to-point wiring on the ElectroCookie. These are the power rail connections, the connections for the level shifter and the data line between the ESP32's GPIO pin and the input channel of the shifter. I generally use 20 gauge solid core wiring for these connections just because they are a bit easier to solder (without splaying the wire out and making an inadvertent connection) and they hold their shape better for the routing.
I often get requests for more detail on wiring up the SN74AHCT125N level shifter, so here is a bit more detail on connecting this particular component.
As you can see, this shifter supports shifting up to four different signals at the same time (hence the "quad" in the name). But we will be using it only to shift the single data line for the LEDs. One very important thing to note... there are no pin outs or pin labels printed on the chip. This means it is very easy to reverse the position of the chip. Instead, there is a small cutout on one end of the chip to provide the orientation. Make sure the chip orientation and your wiring match. If you reverse the chip (or wiring), best case the LEDs simply won't work. Worst case, you could damage or destroy the level shifter.
The data directly from the GPIO pin on the ESP32 (3.3V) will be connected to 1A, or data 1's incoming line. Then a wire connected to 1Y or the data 1's outbound line will run to the LEDs (now shifted to a logical 5V). 5V must be provided to the Vcc pin and a ground connection to GND pin. Note that the ground connections to the other data lines "C" pin technically aren't necessary, but it is a good idea to not leave them in a floating state, so I recommend you connect these to ground as well.
Now it is time to wire up the leads for the primary front TFMini-s sensor, LED data, 5V power and if using one, the VL53L0X side sensor.
![]() |
| Click to enlarge |
I prefer to make these external wire connections from the bottom of the ElectroCookie. This is just due to my enclosure design, which permits external wiring to feed the controller from either the top or bottom.
When mounted on the garage wall, having the external wires on the bottom places them right next to the wall (see photo below). The wire length leads will depend upon your final install location. I like to add connectors such as JST or Dupont to my wire leads. I then leave 6-12" of wire for each connection. More on using connectors below.
Finally, if as discussed above under the power supply options, you are using a number of LEDs that are expected to draw less than around 2.5A, we can run the power for the LEDs through the ElectroCookie. But as a precaution, we'll add a couple of bridge wires to the 5V power rail.
![]() |
| Click to enlarge |
With the bridge wires in place, additional 5V/GND wires can be added that will supply power to the LEDs. This eliminates running separate leads from the power supply directly to the LEDs. But again, this should only be done in this manner for lower expected current draws.
That completes the primary controller. I can now put it in an enclosure, if desired, and just drop in the ESP32 and the level shifter (be sure to maintain proper orientation with the shifter).
Preparing the LEDs
I've covered using WS2812b RGB LED strips in a lot of my other videos, but if you've never worked with them before, you might want to take a peek at the following before proceeding:
YouTube: Using WS2812b RGB Light Strips
Blog Article: RGB LED Strips - A Beginner's Guide
First, cut your LED strip to the desired number of pixels. As mentioned above, and while it is not a requirement, the parking effects work best if you use an even number of pixels (e.g. use 24 or 26 instead of 25).
If the start of your LED strip does not already have a JST connector, you'll need to add wire leads yourself. Solder leads onto the DATA IN end of the strip (indicated by the arrow on the LED strip).
The length of these leads will be dependent upon your installation and where you mount the controller in relation to the LED strip.
I do like to place all of my LED installs in aluminum channel, specifically made for LED strips. Unfortunately the aluminum channel and diffusers (like many other parts) cannot be purchased in individual quantities. The smallest "pack" is either 6 or 10 pieces of 1M (3.3 ft) length. So, if you don't already have some of this channel on hand, you'll have to spring for the pack. Now, you could do away with the aluminum channel and attach the LED strip directly to the wall, using either the LED strip adhesive backing (will likely fail over time) or double-sided tape. But the LED lights themselves can be very intense, especially when looking at them straight on, so I do recommend some sort of diffuser so that the driver isn't blinded when trying to park... especially in a darker garage!
If you are using aluminum channel, cut it and the diffuser to length. I like to put down some double-sided 3M foam mounting tape to assure my LEDs don't come loose over time... especially in the garage where the temperatures can swing pretty high and low in the summer and winter.
Remove the protective tape from both the 3M tape and the back of the LED strip and carefully install the LEDs in the aluminum channel. The 3M protective tape can be a little difficult to get started. I found a pair of sharp point tweezers can help get underneath the backing and get it started.
Once you have the LEDs installed, solder on a JST connector (if needed) to the end of the leads. You can use a male or female connector... just be sure you use the opposite on the lead coming from the controller. I generally standardize on using a female connector for the 'data in' end of an LED strip, but because the male end was just a bit too large to fit through the opening of my 3D printed enclosure, I swapped them for this project.
I placed a little 1/4" braided sleeve and heat shrink tubing over the leads just to make everything look a little neater, but this is totally optional. However, do be sure to use heat shrink tubing, electrical tape or some other insulator over each of your wire connections to be sure that the bare wires or solder joints do not come into contact with each other.
I also added a dab of hot glue to the solder joints at the LED strip. This is just to help reinforce the connection and avoid tearing the copper pads off the LED strip when bending or twisting the lead wires during installation.
Creating Connectors
While optional, I recommend adding connectors of some sort between the controller and the external components (sensor(s), LEDs and power supply).I like everything on my projects to be 'swappable' in case a component needs to be replaced or upgraded, so all the external components will have connectors to attach to the leads from the controller.
TFMini-s Connectors
The TFMini comes with a couple of connectors in the package. I opted to take the one shown in the photo above and cut off one end. THESE TWO ENDS ARE NOT THE SAME! Only one end fits into the TFMini's port and has wiring colors in the order of black, red, white and green. The other end, the one to remove, will not fit in the TFMini and has a different wiring order.
On the cutoff end of the TFMini connector, I added my own female 4-pin Dupont connection. A 4-pin male version was created that contain the leads that will lead back and be soldered to the controller board (per the wiring diagram). Once again, the length of these leads will depend upon the distance between the controller and TFMini for your particular install. Once again, I would come back and add some braided sleeve to make things a bit neater.
A JST connector was already present or we added it to the LED strip in the above step. Now we just need the opposite type of JST connector added to the leads that will be soldered to the controller.
Again, the length of the leads will be dependent on your particular install and the use of the braided sleeve is optional. Leave a little exposed wire for soldering to the controller board (like in the picture for the TFMini lead connection above). Also just be sure to use a female JST connector on the leads if you used a male connector on the LED strip, or vice versa.
Note: The above connector can be used if you are powering the LED strip via the ElectroCookie board (expected LED amp draw < 2.5A). If you have more LEDs or expect the current to exceed 2.5A when at desired brightness, you will not have the LED power leads connected to the controller. Instead, you'll need to create a separate power feed.
Power Supply Connectors
I simply removed the existing connector from the 5V power supply and added standard male barrel connector. The lead to the controller is a female barrel connector. Assure you are observing the correct polarity when connecting the barrel connector to the power supply! If the positive and negative leads aren't clearly labeled on the wiring, you should check the polarity with a multimeter or voltmeter (I'd recommend doing this even if the wiring is labeled!). When positive is connected to the positive lead of your meter, the measurement should show a +5V. If you get a negative voltage reading, the polarity is reversed. If you end up with reversed polarity, very bad things will likely happen to your controller when you plug it in for the first time!
Final Connections
Now that all the connectors are created, you need to solder the ends of each connector to the controller board, again following the wiring diagram shown above. You can make these connections from the top side of the board (soldering underneath) or from the underneath side of the board (soldering on top). This will be somewhat dependent upon your particular enclosure. I made all my lead connections from the underside of the board, soldering on top.
This is how my final controller looks with all the leads connected. Now I can install the individual components in the garage and simply connect everything together. It also allow me to easily remove and replace any individual component should one fail or an upgrade is desired.
Note: The above photo shows the original ESP8266 version, without the secondary sensor for lateral guidance (only available when using the ESP32). If using the lateral sensor, you would have another set of leads that connect the VL53L0X sensor. Similar to the TF-Mini, you'll need the leads to be the proper length for the planned mounting location. I used custom-made Dupont connectors just like I did with the TF-Mini.
But before actually mounting in the garage, I'd recommend one final bench test before putting everything up on the wall. Just connect the components together on the workbench. Note: always connect the power supply last. If this is the first time you've powered up the controller after installing the firmware, you will need to complete the steps to onboard the controller to your wifi before you can access the web settings page and actually see the LEDs respond.
Side Sensor And Wire Distance
For side sensor locations where the total wire length between the controller and VL53L0X is around 10 feet or less, the sensor can probably be wired directly to the controller without issue.
However, if you need a longer cable run, you will likely need to "boost" the voltage/signals due to voltage drop that results in too low a power/signal voltage and the VL53L0X will simply quit (or refuse) to respond. Luckily, there are devices to boost the I2C signal (and operating voltage).
This is a Sparkfun QwiicBus and is specifically designed to boost an I2C signal for longer distances. You need two... one at the start and one at the end of the cable run.
In between the starting and ending QwiicBus, a standard Ethernet cable is used. Here are some tests that I conducted at various Ethernet cable lengths. Note that I have about 18" of leads on each end, so add about 3 feet to the Ethernet lengths below for the total cable run length.
![]() |
| Click to enlarge |
For each test, I measured the VIN voltage at the starting QwiicBus and at the ending QwiicBus (I only measured the SDA/SCL single for the first test... as each measurement caused a board reboot. If the VL53L0X responded, then it is assumed the signal strength is fine).
As you can see from the results, I was successfully able to use a 25 ft (7.6m) Ethernet cable with just the starting and ending QwiicBus and the sensor responded normally. However, at 25 feet, you can just see the voltage at the endpoint begin to drop. And at 50 ft (15.2m), voltage drop became too great and the sensor no longer responded. So, using just two endpoint QwiicBus modules, a cable run of 25'-30' should be possible.
But what if you need an even longer cable run? Well, much like LED strips, this means you need to do "midpoint" injection. Luckily, there's a module for that!
This is a QuiicBus midpoint module. This can be inserted along your cable to extend the overall length. According to the manufacturer's documentation, you can have a cable run of up to 100 feet (30.5m) using a combination of end and midpoint devices. While I didn't test/verify this claim, based on just endpoint testing, I think that you could probably get close to 100 feet with a couple midpoint devices added every 25-30ft along the cable.
This is actually a very similar concept to performing power injection on a longer strip of LEDs. Up to a certain length, you don't need injection. For longer runs, you might just do power injection at the start and end of the strip. But at a certain length, it is also necessary to do 'midpoint' injection. The same concept applies here.
Of course there are other ways to boost the voltage/signal strength, but these QwiicBus modules make it very easy and I've successfully tested a cable run of about 30 feet with just two endpoint modules.
LED Strip Preparation
If you are using new LEDs, odds are that the strip already has a JST connector attached to the start. There is probably an extra male JST connector included as well. If so, then the only prep you need to do is cut the LED strip to length. Just assure you are working with the "start" of the strip and not the "end". LED data signals only travel in one direction:
This is normally indicated by an arrow on the LED strip. Standard LED strips also indicate the "in" of the LED strip based on the type of JST connector:
If your LED strip does not have a JST connector attached to the start of the strip, you can add your own or just solder three wire leads to the GND, DIN and +5V pads and you can add a connector later.
General Mounting and Installation
If you've still been bench testing up to this point... and everything is working, it is time to finally install the parking assistant in the garage! Your installation may vary greatly from mine, based on a number of factors, but I'll cover my install in the event it might help you with yours!
![]() |
| Everything mounted, connected and working! The original Raspberry Pi version of the parking assistant can be seen at the far right. |
Front Sensor Positioning
The first, and probably most important part of the installation will be the mounting location of the TFMini-s distance sensor. Ideally, you want this mounted at a height where it is going to reflect off of a solid portion of the vehicle, like the bumper and not the grill.
I simply measured the height to this part of my vehicle... about 18" in my case. Remember that the TFMini-s only has a 2° field of view, so the 'beam' is pretty narrow.
I then mounted the TFMini at this same height. As far as horizontal distance, ideally the sensor would be mounted so it is pointed at the forward most position of the vehicle (normally the center point), but this somewhat depends on the driver parking the car in the same left-right orientation each time.

As covered in the introductory information on zones, the front sensor can report different values when the car is in a different lateral position, just due to the curvature found on most cars. Adding a side sensor can help eliminate this variance by assisting the driver with lateral guidance so it is also in the same left/right position each time.
Side Sensor Positioning
The optional secondary sensor for lateral guidance may be installed on either the left or right side of the vehicle.
The above diagram shows the sensor on both sides, but obviously you only need one sensor and the left/right side will be determined by your particular situation. It may take some experimentation to find the optimum spot for the side sensor depending upon where lateral guidance is most important for you. Note that the side sensor/lateral guidance is only enabled when a car is in the Active Zone. As a general rule, you probably want the sensor closer to, but not extending into, the parked zone. However, if your particular situation requires guidance earlier in the parking process, the side sensor can be moved back further in the Active Zone towards the Wake Zone.
For height, you want to position the side sensor near the mid-height of the vehicle's body. Too high and it may shoot over the hood or through the window. Too low and it may actually return the distance to the floor or for high ground clearance vehicles, the distance under the vehicle. Again, some experimentation may be required. When determining the side sensor mounting location, you may wish to adjust the left/right detection distances in the settings to make the testing process a bit easier. You can always return to the settings to finalize the actual distances after the sensor is mounted.
LED Strip
The only other somewhat important location for mounting is the LED strip.
You want the LED strip mounted close to eye-level for the driver. Too high and the driver may have to crane their neck to see the LEDs as they near the final parking spot... too low and they may disappear under the hood. Note that if you have limited wall space, you can also mount the LED strip vertically. In fact, the 'full strip' effect can be run in either direction from what would be the top of the strip down, or from the bottom up when the strip is mounted vertically, regardless of which end the wiring is connected to.
Controller and Other Components
The location of the controller and power supply are totally up to you, based on your configuration, location of AC power, etc. Just assure you manage any cable runs so they don't pose a trip hazard if located near a door like mine.
Initial Firmware Installation and Onboarding
Of course you need to load the firmware onto the ESP32 before the system will function. The dedicated firmware documentation site has full step-by-step details, so I'll only provide the basic steps/overview here.
Flash the Firmware to the ESP32
Prior versions required downloading the proper compiled file (.bin) from Github and downloading a local app to interface with the ESP32 and to install the compiled binary. Not anymore! Starting with v0.60 there is now an embedded installer right within the firmware documentation site.
Yep! No more downloading the .bin file or installing questionable third party utilities just to flash the firmware. Now you just need to plug in your ESP32 via USB cable and click the 'Connect & Flash Firmware' button. The documentation site handles the rest for you!
Onboard the Controller To Your WiFi
Once the firmware is installed, the controller will begin broadcasting a local WiFi Hotspot.
You'll join this hotspot with your phone, tablet or laptop. If the portal site does not launch automatically, simply open a browser and enter 192.168.4.1.
After entering in your WiFi information and assigning a unique device name, you will submit the page and a status page will show you the progress. If the system successfully connects to your WiFi, a success message will be shown along with the newly assigned IP address! That's right... no more digging around in your router settings to find the new IP address. In fact, if you reconnect your phone (or tablet/laptop) to your normal WiFi, you can even launch the web app right from the onboarding page! But you probably want to use a desktop browser for configuring the system.
Set Up Your Hardware
Once the system is onboarded, you can visit the web app via any browser on any device on the same network. Before the system will be fully functional, you need to setup your hardware.
Then you specify your zone distances, preferred colors and effect along with other global system settings, such as LED brightness.
Once complete, the system will be ready for use. See the Firmware Documentation for full details on all the options and settings and more information on general use.
⚠️ Special Upgrading Notes for those on v0.52 or earlier
As mentioned earlier, the v0.60 version of the firmware is a complete rewrite, with many new features. Unfortunately, the firmware has grown to the point that it is using 99% of the available sketch space.
This means that if the normal upgrade process is used, even minor future changes, such as bug fixes or library updates, might result in a sketch size that will not fit in the default partition size.
To mitigate this situation and to allow for additional sketch space for bug fixes... and possible future feature enhancements, the underlying partition sizes need to be adjusted. In this case, a little space from the SPIFFS partition (where the configuration files are stored) is stolen and given to the 'sketch' partition. Unfortunately, changing the partition sizes requires flashing via USB and all existing settings, including WiFi credentials, will be erased, requiring an onboarding and setup again. Fortunately, once the migration is complete, there is ample sketch size available for future use.
The Firmware Documentation has complete instructions and options available to migrate your existing system to the new v0.60 partitions.
Wrap Up
This has been a great project and I've heard from a number of you that built and are using the prior version. While there will be some short term pain due to the required migration to this new firmware, hopefully all the new features and space for future expandability make it well worth the effort.
Let me know down in the comments if you have successfully built your own system... or if you have questions! And as always, thanks for reading!
Links and Additional Information
Github Repo (source files, 3D enclosure files, compiled binaries, etc.)
As this system has gone through multiple revisions, there are also original videos and blog articles for the original versions. The update video only provides highlights or a brief overview of these previously covered topics. So if you are building the system for the first time, a review of these previous videos and articles may be of benefit. Just note that some of the details are duplicated while others have changed with this latest release.
Original Video (ESP8266 version, Sensor Comparisons, Overall use)
Update Video 1 (focuses primarily on the addition, setup and use of a side sensor)
Original Blog Article (support information for the above two videos)
Original Firmware Documentation (now obsolete with v0.60)
If you'd like to support future content on this blog and the related YouTube channel, or just say thanks for something that helped you out, you can use any of my Amazon links to make a purchase at absolutely no cost to you. Or if you prefer to say thanks directly, you can buy me a one-off cup of coffee at:























































No comments:
Post a Comment
To help eliminate spam and to keep all conversations civil, submitted comments are moderated. Therefore your post may not show up immediately. Please be patient as most reviews are completed within a few hours.