A lightweight ESP32-powered robotics platform for learning sensor integration and control through Python.
- Background
- Introduction
- Getting Started
- Known Limitations
- Why DickerBot?
- Contributing
- Acknowledgements
DickerBot was born out of my love for robotics and a desire to make learning sensor integration more accessible. I noticed that most approaches required diving deep into complex systems like ROS or low-level embedded C — which, while powerful, could be overwhelming for beginners just trying to understand the basics.
At the time, I was heavily using the ESP32 and was consistently impressed by how much you could do with such a cheap and small chip. I saw an opportunity: create a small robot with minimal hardware complexity, but powerful enough to teach core robotics concepts using Python.
DickerBot is a simple robot car built around the ESP32 that sends real-time data (IMU, distance sensor, and camera) to a host machine. The host runs a Python WebSocket server that receives this data and allows users to send control commands back. The focus is on learning how to work with sensor data in a higher-level environment without needing to deep-dive into embedded code or install large frameworks.
The inspiration for the robot’s name and initial design came from my professor, Dr. Dickerson, whose Cyber-Physical Systems class used similar hardware, but with a deeper focus on embedded systems and C. DickerBot aims to be higher-level to that approach.
Below is a basic demonstration of the DickerBot showcasing movement and sensor polling in real-time.
The DickerBot is split between two PCBs:
- Communicator: Handles the ESP32-CAM
- Controller: Handles the ESP32-WROOM, ultrasonic sensors, motors, motor controller, IMU, and power.
See the video below for some tips on the PCB assembly process.
You can download the latest release of the PCB from here.
For images of the PCB and schematics, please refer to images/.
The enclosure is very basic, using screws to join all parts. The parts can be assembled as seen in the image below:
You can download the latest release of the enclosure from here.
For images of the final assembled robot using the enclosure and PCB, please refer to images/.
The robot code is split between two ESP32 WROOM microcontrollers:
- Communicator (ESP32-CAM): Handles video streaming and sensor data transmission.
- Controller (ESP32-WROOM): Manages motor control and hardware interactions.
For detailed documentation and demo videos, please refer to the DickerBotCommunicator README and DickerBotController README.
The host application is responsible for syncing Wi-Fi credentials and robot data between the computer and the robot. It also manages starting the WebSocket server, hosted on the computer, which allows a Python script to connect and communicate with the robot.
For detailed documentation and demo videos, please refer to the DickerBotHost README.
This client library provides an interface for interacting with a socket-based system. It is designed to facilitate seamless communication and data exchange with the DickerBot service.
For detailed documentation and demo videos, please refer to the DickerBotClient README.
- Camera:
- Camera captures 96x96 grayscale images and transmits them serially, which is incredibly slow (currently ~10Hz).
- Can be improved via JPEG compression and tweaking esp23-cam settings.
- Camera captures 96x96 grayscale images and transmits them serially, which is incredibly slow (currently ~10Hz).
- PCB:
- Header holes on Controller board are very low tolerance.
- Molex connectors should be used for quick connections.
This is a platform for learning, not performance. The goal is to provide a friendly, hackable entry point into robotics using affordable hardware and intuitive Python code, hopefully inspiring others the same way this project inspired me.
| Category | Cost |
|---|---|
| Components | $27.5 |
| PCB | $10 |
| Enclosure | $3 |
DickerBot is an open-source project, and contributions are welcome! Whether it's reporting bugs, suggesting new features, or submitting pull requests for code updates, your input is highly valued. Feel free to open an issue or contribute directly by creating a pull request. Let's build and improve DickerBot together!
This project would not have taken shape without the influence of Dr. Dickerson, whose teachings and guidance were instrumental in shaping the ideas behind DickerBot.




