It all began with a simple question:
“What if a robot could show what it’s thinking while it moves?”
Crawler robots are excellent at overcoming obstacles, but they often feel silent and purely mechanical. I wanted to give mine something more—a way to express its intentions. To achieve this, I added a 16×16 WS2812B LED matrix to the front of the robot. Rather than serving as a static decoration, the display became the robot’s “face.”
When the robot moves forward, a bold arrow appears. When it turns, the arrow shifts to match its direction. These small visual cues transform the robot from a cold machine into something that feels more like a tiny creature with purpose and awareness.
The robot receives its movement commands wirelessly using the ESP-NOW protocol. At the heart of the system is a Seeed Studio XIAO ESP32-C6 microcontroller, which manages both motion control and display logic. A Toshiba TB6612FNG dual motor driver powers the crawler’s motors, while the 16×16 WS2812B LED dot-matrix panel brings its actions to life with bright, crisp arrow animations.
Hardware RequirementsCrawler Components
- Microcontroller: Seeed Studio XIAO ESP32-C6
- Motor Driver: Toshiba TB6612FNG dual motor driver
- Crawler Kit: SZDOIT TP101 Robot Tank Car Kit
- Dot-Matrix Display: 16x16 WS2812B LED dot-matrix panel
- Rechargeable Ni-MH AA Battery x 4 (4.8V)
Joystick Components
- Microcontroller: Seeed Studio XIAO ESP32-C3
- Joystick: KY-023
- Rechargeable Ni-MH AA Battery x 4 (4.8V)
Crawler Pin Connections
| XIAO ESP32-C6 Pin | TB6612FNG Pin | Dot-matrix display Pin | Battery Pin |
| ----------------- | -------------- | ----------------------- | ----------- |
| D0 | PWMA | - | - |
| D1 | AIN2 | - | - |
| D2 | AIN1 | - | - |
| D3 | BIN1 | - | - |
| D4 | BIN2 | - | - |
| D5 | PWMB | - | - |
| D7 | - | DIN | - |
| D8 | - | - | - |
| D9 | - | - | - |
| D10 | STBY | - | - |
| 3V3 | VCC | - | - |
| GND | GND | GND | GND |
| VBUS | - | - | VBAT |
| - | VM | - | VBAT |
| - | - | 5V | VBAT |Joystick Pin Connections
| XIAO ESP32-C3 Pin | Joystick Pin | Battery Pin |
| ----------------- | ------------ | ----------- |
| A0 | VRX | |
| A1 | VRY | |
| GND | GND | GND |
| VBUS | +5V | VBAT |Crawler Source Code
Project Structure
dotmatrix_crawler_robot/
├── src/
│ └── main.cpp # Main program logic
├── include/
│ ├── constants.h # Pin definitions and configuration
│ ├── motor_controller.hpp # Motor control interface
│ ├── led_display.hpp # LED dot-matrix display interface
│ ├── animation_controller.hpp # Animation manager
│ └── arrow_images.h # Pregenerated arrow image data
├── platformio.ini # PlatformIO configuration
└── README.md # DocumentDependencies
Joystick Source Code
Project Structure
dotmatrix_crawler_joystick/
├── src/
│ └── main.cpp # Main program logic
├── include/
│ └── constants.h # Configuration constants and pin definitions
├── platformio.ini # PlatformIO configuration
└── README.md # DocumentHow to Change the Images
- Open the image with GIMP.
- Click [File] > [Export As...].
- Click [Select File Type (By Extension)].
- Select [C source code].
- Click [Export] button.
- Open the exported file.
- Copy the data section enclosed in double quotation marks and replace the corresponding element in "arrowImg" array within "include/arrow_images.h".









_3u05Tpwasz.png?auto=compress%2Cformat&w=40&h=40&fit=fillmax&bg=fff&dpr=2)
Comments