<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Simon</title>
    <description>The latest articles on DEV Community by Simon (@stuffandting).</description>
    <link>https://dev.to/stuffandting</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F310655%2F31b53569-2c90-49e8-8f36-7ab60c715f34.jpg</url>
      <title>DEV Community: Simon</title>
      <link>https://dev.to/stuffandting</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/stuffandting"/>
    <language>en</language>
    <item>
      <title>I Built a Wireless ESP32 Control Network for my Car</title>
      <dc:creator>Simon</dc:creator>
      <pubDate>Mon, 24 Aug 2026 13:36:56 +0000</pubDate>
      <link>https://dev.to/stuffandting/i-built-a-wireless-esp32-control-network-for-my-car-56km</link>
      <guid>https://dev.to/stuffandting/i-built-a-wireless-esp32-control-network-for-my-car-56km</guid>
      <description>&lt;p&gt;I've owned my kit car (an MK Indy) for about 20 years. It's got a motorcycle engine (Honda Fireblade CBR900RR), is road-legal, and gets casual track-day use.&lt;/p&gt;

&lt;p&gt;It has electronic paddle gear-shift and a removable steering wheel, but the spiral cable connecting the wheel to the car regularly got tangled on the paddles. So, I hatched a plan to make it wireless.&lt;/p&gt;

&lt;p&gt;Before I go into the detail of the implementation, this is it in action...&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/mEDsJDEoQ0o"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  The Idea
&lt;/h2&gt;

&lt;p&gt;I have been tinkering with ESP32 devices for a while in various projects (home automation, lighting, media streaming etc), and my thought was to use a pair of these - one on the steering wheel and one in the car.&lt;/p&gt;

&lt;p&gt;The initial requirements were simple: -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No wires connecting the steering wheel to the car.&lt;/li&gt;
&lt;li&gt;No batteries in the steering wheel to worry about charging.&lt;/li&gt;
&lt;li&gt;Reliable gear-shifting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first prototype met these requirements, but it's grown somewhat since the initial idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "Final" Product
&lt;/h2&gt;

&lt;p&gt;I say "final", but this project is constantly evolving. However, this is what it looks like today...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk70v7rdial7mkvvxlrmb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk70v7rdial7mkvvxlrmb.png" alt="Steering wheel with display unit" width="768" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's a 3D printed case housing the controller and power module, a 128x64 OLED display and a pair of rotary encoders for control. Why does it need controls? It's evolved beyond the original requirements! It now has configuration menus...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffirh0fgub970efrpuzp4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffirh0fgub970efrpuzp4.png" alt="Menu" width="320" height="200"&gt;&lt;/a&gt;&lt;br&gt;
...and a G-Force meter...&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp6bclu2vzmum4turv5i6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp6bclu2vzmum4turv5i6.png" alt="G-Force Meter" width="320" height="200"&gt;&lt;/a&gt;&lt;br&gt;
...and features such as GPS and data logging, so the display shows the status of those features.&lt;/p&gt;

&lt;p&gt;This is the menu in action (together with an Easter Egg for those that grew up in the 1980s!): -&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/2o_xQgoZTxo"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;

&lt;p&gt;In terms of the architecture, this is a network of ESP32 controllers and peripherals. Below is a block diagram of the concept: -&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd2z1bzc7akwb1v5eiw19.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd2z1bzc7akwb1v5eiw19.png" alt="Block Diagram" width="627" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Essentially there is a central control unit which is hard-wired to the car, the steering wheel which communicates over ESP-NOW, and a number of satellite controllers which send telemetry from sensors throughout the car.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Steering Wheel
&lt;/h3&gt;

&lt;p&gt;The steering wheel unit comprises: -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A custom designed 3D enclosure.&lt;/li&gt;
&lt;li&gt;An ESP32-C3 Super Mini for the brain (chosen for low power consumption).&lt;/li&gt;
&lt;li&gt;A wireless power receiver, providing 5v to the controller.&lt;/li&gt;
&lt;li&gt;An i2c 128x64 pixel OLED display.&lt;/li&gt;
&lt;li&gt;A pair of rotary encoders for control.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is a wireless power transmitter mounted at the steering column, which provides power with no wires at all to the steering wheel once the wheel is mounted. It basically works like a wireless phone charger.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Controller
&lt;/h3&gt;

&lt;p&gt;The controller unit comprises: -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ESP32-S3 Dev Kit (chosen because it's talking to multiple units, so benefits from the extra power).&lt;/li&gt;
&lt;li&gt;A relay breakout board to interface with the actual gear shift hardware.&lt;/li&gt;
&lt;li&gt;A BE-220 GNSS/GPS module which works at 18 Hz for track day recording.&lt;/li&gt;
&lt;li&gt;A BMI160 Inertial Measurement Unit (IMU) for recording cornering, acceleration and braking G-Force.&lt;/li&gt;
&lt;li&gt;An SD-Card slot for recording telemetry.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the controller hardware, in a custom 3D printed case: -&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fez8ehkww6onocgectycz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fez8ehkww6onocgectycz.png" alt="Control Unit" width="799" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Coding
&lt;/h2&gt;

&lt;p&gt;I've been programming ESP32 devices for a couple of years, using Arduino IDE, and this follows the same process. I debated whether to start looking at using the ESP-IDF Framework, but when you're working with i2c OLED screens, IMUs and other elements, the draw of the libraries is too great for now! I will venture there at some point, but for now I favour rapid evolution. After all, this is a hobby project and not a commercial product.&lt;/p&gt;

&lt;h3&gt;
  
  
  Learning
&lt;/h3&gt;

&lt;p&gt;Speaking of rapid evolution, my first few iterations were entirely written by hand and learn-as-you-go: -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I initially learned about Bluetooth Low Energy (BLE), creating services and characteristics etc, but then learned about and pivoted to the ESP-NOW. There's less overhead with this protocol and it just works better when you're only communicating between ESP32 devices.&lt;/li&gt;
&lt;li&gt;I created the initial graphics using base Adafruit GFX libraries, but then refactored to use the u8g2 libraries to support the larger and slightly esoteric OLED display.&lt;/li&gt;
&lt;li&gt;I added a third unit (initially for SD card recording before I built this into the central controller) and wrote 3-way networking.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It was a great learning exercise, and I strongly believe that the best way to learn is to try, fail, make mistakes, and fix them.&lt;/p&gt;

&lt;p&gt;However...&lt;/p&gt;

&lt;h3&gt;
  
  
  Agentic Development
&lt;/h3&gt;

&lt;p&gt;Whilst this project was progressing, I'd separately started to tinker with using Artificial Intelligence (AI) for coding. I'd heard of the likes of Claude Code, but having recently bought a Google Pixel phone, it came with a years subscription to Gemini Pro, so I started playing with Gemini CLI, and more recently, Antigravity.&lt;/p&gt;

&lt;p&gt;Since those initial concepts, I've started using AI to evolve this project further. It's allowed me to achieve a number of things I simply wouldn't have been able to without weeks of sweat and tears. Some examples of evolution I've made with this include: -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Moved from using hard-coded MAC addresses for the ESP-NOW network to support automatic pairing and discovery of new/changed modules. This also includes negotiation of encryption keys for a fully encrypted wireless network.&lt;/li&gt;
&lt;li&gt;Replaced the original fixed size struct messages between devices to use a more dynamic &lt;a href="https://en.wikipedia.org/wiki/Type%E2%80%93length%E2%80%93value" rel="noopener noreferrer"&gt;Tag-Length-Value (TLV)&lt;/a&gt; message structure which makes communications a lot more extensible and dynamic to support things like logging, new sensors and telemetry.&lt;/li&gt;
&lt;li&gt;Made better use of task offloading using FreeTOS background processing to keep the main loop clean of blocking activity such as SD-card writes.&lt;/li&gt;
&lt;li&gt;Improved SD-Card logging to support low frequency data (temperatures, pressures etc) and high frequency data (GPS, G-Force, Throttle etc).&lt;/li&gt;
&lt;li&gt;Built a full wireless web dashboard for the central controller to provide aggregated view of logs from all modules for diagnostics, allow wireless download of GPS logs etc.&lt;/li&gt;
&lt;li&gt;Implemented OTA update capability, orchestrated from the steering wheel menu to ease updating the wheel, the controller and satellite units, without dismantling or struggling to connect USB cables in hard-to-reach areas.&lt;/li&gt;
&lt;li&gt;Added double-pass Exponential Moving Average (EMA) filtering to the G-Force meter to dial out vibration noise.&lt;/li&gt;
&lt;li&gt;Started to prototype new features for sensors, for example tapping into speedometer and engine pulse generator to calculate speed and rpm.&lt;/li&gt;
&lt;li&gt;Refactored code into modules and away from monolithic files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The progress you can make using AI for development is staggering. I'm not blind to the risks of not understanding what is changing and how it works, but I ensure I understand as much as possible each and every change.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(I use the term Agentic Development in this case, rather than Vibe Coding. Whilst I'm not, and never have been, a professional software engineer, I've coded enough over the years to understand what's good and what's bad. Whenever a change is made, I read and understand the changes. I also use AI to scan my codebase for bad practices, redundant code, security flaws, refactor as it evolves etc.)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Hardware Evolution
&lt;/h2&gt;

&lt;p&gt;The first prototypes were simply modules soldered to each other with wires. For example, the steering wheel looked like this: -&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2wn5fow7sv5bj1vx1254.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2wn5fow7sv5bj1vx1254.png" alt="First prototype with loose wires" width="640" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Which worked, but was always going to be sensitive to vibration. So it evolved to a custom PCB: -&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdbuv6xxsxontht0p5yl1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdbuv6xxsxontht0p5yl1.png" alt="Evolution with PCB" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fabricating the PCB was a fun and significant part of the process, and will be a topic for a future post.&lt;/p&gt;

&lt;p&gt;All 3D enclosures were designed using &lt;a href="https://www.tinkercad.com/" rel="noopener noreferrer"&gt;Tinkercad&lt;/a&gt;. This is an example of the rear section of the steering wheel housing the wireless power receiver, and the steering column section housing the power transmitter: -&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpcqtxt8ozy5vm1f6e6gf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpcqtxt8ozy5vm1f6e6gf.png" alt="3D Designs" width="480" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Techniques
&lt;/h2&gt;

&lt;p&gt;During this build I've had to learn new skills and techniques, and build capabilities that will help with future projects. Some of these include: -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Designed and 3D printed various enclosures.&lt;/li&gt;
&lt;li&gt;Modified 3D printer to enable etching of custom PCBs.&lt;/li&gt;
&lt;li&gt;Modified 3D printer to enable &lt;em&gt;drilling&lt;/em&gt; of custom PCBs.&lt;/li&gt;
&lt;li&gt;Coding custom software to enable PCB creation.&lt;/li&gt;
&lt;li&gt;PCB acid etching.&lt;/li&gt;
&lt;li&gt;Agentic development.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm writing a separate post on the PCB elements as this is a whole topic in itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;The project is now working with the features described earlier, but there's still work to do. A few ideas for future iterations include: -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tap into Speedometer and RPM signals to provide engine an gear telemetry.&lt;/li&gt;
&lt;li&gt;Build pedal position sensors to see accelerator and brake position during track days.&lt;/li&gt;
&lt;li&gt;Tyre temperature sensors using multi-pixel infrared sensors to get temperatures across the tyre width.&lt;/li&gt;
&lt;li&gt;Integration with tyre pressure sensors.&lt;/li&gt;
&lt;li&gt;Software to process my telemetry to support the video overlay process.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What other sensors or features could I add to this project? Has anyone done anything similar to this? Let me know in the comments.&lt;/p&gt;

</description>
      <category>esp32</category>
      <category>3dprinting</category>
      <category>hardware</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
