Connecting a webcam to an ACEBOTT ESP32 Smart Car

blog

With a PS3 style controller connected to an Acebott ESP32 Smart Car my next task was getting the add QD002 ACEBOTT ESP32 Camera Expansion pack for Smart Car working.

I had previously tried to get an Arducam Mega 3MP working and failed miserably, but was highly motivated to overcome that setback with a purpose built camera add on in the Acebott QD002.

Things did not get off to a great start because the connection process required the camera to be connected to the UART port of the driver board.

Screenshot 2025-12-31 222556

The problem with that is the UART port conflicts with the serial port for uploads and monitoring. This mean hat I needed to disconnect the camera UART connection every time I wanted to update my code and then with it reconnected there was no real way to monitor the result. I either need to go to great lengths to program up and connected a different UART on the board or find another solution.

The easiest solution was to simply upload the code on the ESP32 camera to enable a web server to stream the code directly from the camera board. You’ll find that code here:

https://github.com/directorcia/Azure/blob/master/Iot/Acebott/Smartcar/QD002/ACEBOTT%20QD002%20Camera%20Car%20V3.8/webcam.cpp

and the documentation for it here:

https://github.com/directorcia/Azure/blob/master/Iot/Acebott/Smartcar/QD002/ACEBOTT%20QD002%20Camera%20Car%20V3.8/webcam.md

Thus, the camera board will boot, connect to WiFi, run a web server, report that IP address to the serial console of the web camera board and then stream the camera video there.

I cannot tell you how satisfying it was to finally seeing streamed images on my screen. It had taken a long time to to get here but now, finally, I was ready to finish assembly of the car and mount camera onto it!


Tamiya 1/35 German King Tiger Tank (Ardennes Front)

Screenshot 2025-12-29 092710

Tamiya 1/35 German King Tiger Tank (Ardennes Front) Scaled Plastic Model Kit

Paints

Recommended by Tamiya

TS-1 Red Brown

TS-2 Dark Green

TS-3 Dark Yellow

TS-46 Light Sand

X-10 Gloss Gun Metal

X-11 Gloss Chrome Silver

X-18 Semi-Gloss Black

XF-1 Flat Black

XF-10 Flat Brown

XF-15 Flat Flesh

XF-16 Flat Aluminium

XF-27 Flat Black Green

XF-5 Flat Green

XF-52 Flat Earth

XF-56 Flat Metallic Grey

XF-60 Flat Dark Yellow

XF-61 Flat Dark Green

XF-63 Flat German Grey

XF-64 Flat Red Brown

XF-65 Flat Field Grey

Connecting a joystick controller to an ACEBOTT ESP32 Smart Car

blog

After being able to control the Acebott ESP32 Smart car via a web server my next aim was to control it using am Xbox/Playstation style joystick controller.

Initially I thought hat I could use an older Xbox style controller. Turns out these use 2.4Ghz wireless and a proprietary connection. Then I thought I could use a newer style Xbox controller that is Bluetooth, but it turns out they use Bluetooth 5 and use proprietary encryption. I did see a few of these working on the Internet but for the life of me I couldn’t get it to work.

I therefore asked AI which controller would be the easiest to get working and was told to get:

8BitDo Ultimate 2C Bluetooth Controller for Switch/Switch 2, Wireless Controller with 6-Axis Motion Control, Rumble Vibration, Refined D-Pad and Bumpers, and Hall Effect Joysticks (Blue)

This launched me into a world a hurt and failure (thanks AI). In short, this 8BitDo controller appears to also only be Bluetooth 5 and the Acebott ESP32 only supported Bluetooth 4.2 LE (Low Energy).

Making the same mistake twice (what’s the definition of stupidity again?) I asked AI to recommend a different ESP32 board that would work with the 8BitDo and was told that a “ESP32-C3 DevKit” would be the most reliable. I then went and bought an ESP32-C3 Mini Development Board. Even after being ‘100% sure’ that it would work, the AI could not make it work either.

I then came across the ACEBOTT Bluetooth Controller Expansion for QD001, which is designed for the Acebott Smart Car.

image

With this I finally could get the controller talking to the ESP32 on the Smart Car. However, to pair the controller and the ESP32 I needed to specific the MAC address of the controller, which is conveniently on the bottom of the controller. But to get the ESP32 to pair back to the controller I needed to embed the MAC address of the ESP32 Bluetooth connection into the controller. To do this it recommended using a Sixasix Pair tool. For the life of me, I couldn’t get this to work but with my Controller at least paired to the ESP32 I could send commands which is all I really wanted.

I got AI to rewrite the code to allow the PS3 style controller to control the movement of the SmartCar. I have uploaded the code here:

https://github.com/directorcia/Azure/blob/master/Iot/Acebott/Smartcar/QD010/car-ps3.cpp

I also needed to add some speed trimming of the motors because the car was veering off in one direction. The documentation for the above code is here:

https://github.com/directorcia/Azure/blob/master/Iot/Acebott/Smartcar/QD010/car-ps3-overview.md

This whole process proved much harder that I expected and getting a Bluetooth working initially as extremely frustrating given teh different versions and controllers, but now the ‘generic’ PS3 style controller works well!

ACEBOTT ESP32 Smart Car with web control

image

Now that I had my robot car working with IR I upgraded the code to also allow control via a web server hosted on the ESP32.

You’ll find the code for the controller here:

https://github.com/directorcia/Azure/blob/master/Iot/Acebott/Smartcar/with-web-serve.cpp

and documentation here:

https://github.com/directorcia/Azure/blob/master/Iot/Acebott/Smartcar/with-web-serve.md

More controller updates coming.

ACEBOTT ESP32 Smart Car with IR Control

Screenshot 2025-08-28 080437

I got my ACEBOTT ESP32 Smart Car Starter Kit with Mecanum Wheel all wired and so the next challenge was to get it to move. Luckily, the kit comes with an Infra Red Remote control. I therefore wrote this code:

https://github.com/directorcia/Azure/blob/master/Iot/Acebott/Smartcar/irbuttonmap.cpp

To show me what all the buttons on the controller mapped to on the ESP32.

With that complete, I now wrote this code:

https://github.com/directorcia/Azure/blob/master/Iot/Acebott/Smartcar/irmovecontrol.cpp

to get the Smart Car to move by using the IR control. I documented the code here:

https://github.com/directorcia/Azure/blob/master/Iot/Acebott/Smartcar/irmovecontrol.md

The next step will be to run a small web server on the ESP32 and connect to that via local WIFI to move the car.