ESP32 WiFi Package Sorting Robot With Live Camera

by Vazha03 in Circuits > Robots

2190 Views, 22 Favorites, 0 Comments

ESP32 WiFi Package Sorting Robot With Live Camera

0-02-05-bdba29ccdd4e2abac0f06a500413eb0f080cabaef67256d7a3c23ef3ca74aeba_5611d93e381668b3.jpg
0-02-05-f0d9062f0c4fd702dff02879b7ff7ab00ec672709929e6359d81c0703140fcdd_4269465043b1c5f6.jpg

Welcome! In this project, I'll show you how I built a WiFi-controlled package sorting robot using an ESP32, a robotic arm, and an ESP32-CAM for live video streaming.

The robot is designed to remotely pick up and transport small packages while the operator controls it through the Blynk mobile app. The live camera feed allows the robot to be driven from a distance, making it easier to place packages accurately without directly seeing the robot.

The robot features:

  1. A robotic arm capable of picking up and placing packages.
  2. WiFi control using the Blynk app.
  3. Live video streaming with an ESP32-CAM.
  4. An OLED display for robot status information.
  5. Battery-powered operation for completely wireless use.

I built this project to explore how warehouse robots work and to create a compact prototype that combines robotics, wireless communication, and embedded programming into a single system. While this robot is a scaled-down model, it demonstrates many of the same ideas used in automated material-handling systems.

If you'd like to build your own WiFi robotic arm or learn more about ESP32-based robots, this guide will walk you through every step of the process.

Supplies

0-02-05-00ca03ba96a8da6aed323cb9b0dd4629c4df653a0bc238288109addc45988f60_e33a06f926fb29f2.jpg
0-02-05-5d12a20e5f5d986a38fe951f99dca2881cdd695426226cb9fdd1f688fbcf1aa3_413330c65e71ff73.jpg
0-02-05-9ff11990ff45035a886ebbe92bb27673f2ab96f51af65fb1440428c951250630_490bb560f4768ec9.jpg
0-02-05-38a3a2a1fb158b2c55053cb62adfc48524831b291399e669006eb4ced40a7b84_8df06c8c8c31349a.jpg
0-02-05-56ab4e70b72a5b6dbfb082036ed19f2a1f5bf76d4d33b8228038189032396c3f_15bdcc76b7f0f1f4.jpg
0-02-05-73cc9f21efc50d7553216cbb75429fa4d1d84078762425b89dc114f3eee7331a_3791552bb21b0436.jpg
0-02-05-839dc611eb900efe3979934024811ec0b6d9bf9de8777cc1f4e05545f4e2b6d5_85d4edbde4109b2a.jpg
0-02-05-60347df7822e5c2b994acd4e9de63d5ee6051bfc7d0d0628b98fb153700d1fe0_26627ceffc7295b2.jpg
0-02-05-74047ace48cb676e98029058b11837e56b7d6d8d0584995b3cb7d5273d9e1edf_15b95d809b2f6ed4.jpg
0-02-05-6382687a02ba143d73d5820087c547dd76f12c6ab69b0351e21d559031f7d0aa_677ecca5093cd877.jpg
0-02-05-abe8bd7e47090eb86daf457327ffbffd24818f312e961ec7e37f6280a3c76218_ce4c3305adafc883.jpg
0-02-05-cd89c76064017406eee4cf1461e85c368c404f4dbeb78e9b4555f8d1d87fc0d6_b83993b43acf4466.jpg
0-02-05-dd393907d8a722e15fbe4c9c2e97112e3958cebb98462ca64d066de251b3bfdb_b3f1d13d43bfe40.jpg
0-02-05-f4310da1e464de7c2ef55588a31e4040421b517e1f786103037d5febef90efac_bcd5541821c33667.jpg

Electronics

  1. 1 × ESP32 Board
  2. 1 × ESP32-CAM
  3. 1 × PCA9685 16-Channel Servo Driver
  4. 1 × L298N Motor Driver
  5. 2 × DC Gear Motors
  6. 3 × MG90S Servo Motors
  7. 3 × MG996R Servo Motors
  8. 1 × 0.96" SSD1306 I2C OLED Display
  9. 2 × Li-ion Battery (2000mAh each)
  10. 1 × 4700uf Capacitor
  11. 1 × 2S BMS
  12. 1 × Power Switch
  13. Jumper wires
  14. Male/Female header pins

3D Printed Parts

  1. Robot chassis
  2. Robotic arm base
  3. Robotic arm links
  4. Gripper
  5. Camera mount
  6. Electronics mounting brackets

All of these parts are included in the downloadable STL files.

Hardware

  1. M3 screws (various lengths)
  2. M3 nuts
  3. Servo screws
  4. Zip ties (optional)

Software

  1. Arduino IDE
  2. Blynk IoT
  3. Blender (for designing robot)
  4. ESP32 Board Package
  5. Adafruit PWM Servo Driver Library
  6. Adafruit GFX Library
  7. Adafruit SSD1306 Library

Tools

  1. 3D Printer
  2. Soldering Iron
  3. Solder
  4. Screwdrivers
  5. Wire Strippers
  6. Hot Glue Gun (optional)

3D Printing Parts

0-02-05-2ed5d278839c32fabbb89949661b1b6664febd67ddc5c3c72a2e11e6c0102ce8_b0813721332e7bb2.jpg

All of the robot's structural components were designed for 3D printing. Print each part before beginning assembly.

I printed the most parts using PLA. I used PETG for parts, which needs no be strong like the arm. I also used TPU for tires.

After printing, remove any supports and test-fit the parts before assembly.

Building the Robot

0-02-05-36f9f1149700400ff5d6e9e57ccc771eb72085cb4a5f83d39b96435414bfdbf3_772ac8ecfd59ed17.jpg

After printing all parts, start assembling the robot with components. The robot consists of 4 layers and you should build it following the order of the layers.

Layer 1

0-02-05-223527f94c3e13550b7604a1450135d6a99a5a6708bdbc4b8ec6bab63751ce3f_efa89c7691da756d.jpg
0-02-05-414afd6c449f203a45ceb021a0b906611c4b6745de6e81ef25d34d8e30a82f70_e3e066364500ce30.jpg
0-02-05-edc4e54d8da28d880da0552387d76efca1dd8a037c65f1e2ede91cfc1d357ce8_fa9ffef4a2268fd6.jpg

This layer consists of most components, because it must be the heaviest part of the robot, so the COM (center of mass) will be low. This will prevent robot from falling over easily. First start by soldering the two battery holders to the 2s bms. This connects to power positive rail and gnd rail. 3 components are connected to these rails: 5V buck converter (for esp32, oled screen, etc.), 6V buck converter (for servos only) and L298N driver( for two DC motors. Also a switch is connected between 2s bms and power rail, which turn on and off the robot. After electronics, you can attach the wheels to the motors and a 3d-printed caster wheel the robot.

Layer 2

0-02-05-8a6e6cb085aec2ba0c2e02dc2bb42da3dfabafd6a8b5c146cb8f43991de8b2e8_6ce1bc72d682e4a0.jpg
0-02-05-745981e862b31a68a951b3ac39bcad07b0f888683f82b3de5e919fb989079514_4cee7782d925f4b4.jpg

The 2nd layer consists only ESP32 (the brain board), 2nd gnd rail (which must be connected to the first gnd rail) and 5V rail. the ESP32 has an adapter, which makes connecting and disconnecting the wires easier. You can hot glue the rails to the 3d-printed chassis, so connecting the wires will be easier.

Layer 3

0-02-05-871987f9653c5060ac1b3e5a679a4f82a8f7045fd24f2f5e769f3f78b945ab46_1f9fd5ff1071205c.jpg
0-02-05-19fcb9d93107492e2091a8c675a8e7407bf065b648e4be1d427364864e670baa_8741c784fb92f3b5.jpg

The 3rd layer consists of PCA9685 board (where all servo connections take place) and OLED screen (which is mounted on the removable plate on the main chassis of the 3rd layer). I attached a 4700uf Capacitor on the power terminals of PCA9685 board (to minimize the jittering of the servos).

Layer 4

0-02-05-3840711fb202df498f4f472bf74ef4a15a07a2aed034dd48c19a132db267b3e9_79e11545fa20f6df.jpg
0-02-05-d8b6c642c04879d094cdc89477e7a9832dcb5e68d02b6808e8a7297cc6a5a25b_bd0cb3c8c6e3a985.jpg

The last layer consists of ESP32 Cam (the Eye board), FTDI module (to program the ESP32 Cam) and MG90s servo (which rotates the board). The FTDI module is mounted as close as removable plate, so you can easily program the board.

The Arm

0-02-05-e75bea7dc7f0627b9fe7684e7b3af6ef2b01748fe238a478186453504f208bd5_ec57a0e54a091abb.jpg

The arm is made out of 5 servos, three MG996R servos and two MG90s servos. Two MG996R are connected on the sides of the 3rd main chassis, which are the shoulders of the robot. For elbows I used two MG90s. I used the MG996R as the gripper of the robot, because of its high torque and power. Make sure you line up the servo angles correctly before securely screwing them on.

Upload the Software

Screenshot 2026-07-04 234830.png
Screenshot 2026-07-05 011659.png

Upload the control program to the ESP32 and the camera program to the ESP32-CAM.

Install all of the required Arduino libraries before compiling the sketches.

After uploading the code, verify that the motors, servos, OLED display, and camera all operate correctly.

Configure the Blynk App

0-02-05-da534aceaa870e6a4f9ef9448bc91d7de12b6bbc56dca6af7e5d9acbf7037e49_48e6b38aa7f29162.jpg

Create a new Blynk project and add the required buttons and sliders.

Assign each control to the correct virtual pin used in the code.

Once everything is configured, connect the robot to WiFi and verify that every control responds correctly.

Set Up the Live Camera

0-02-05-ef00c57f11d86715dfbfd78276e4593e0cdd6c9ef980636b5f7a73e4c86e5849_7b73d97830953695.jpg

Upload the CameraWebServer example to the ESP32-CAM and connect it to your WiFi network.

Open the camera's IP address in your browser to view the live video stream.

Adjust the camera angle so you have a clear view of the robot's gripper while driving.

Operating the Robot

Turn on the robot and wait for it to connect to WiFi.

Open the Blynk app to control the robot and open the camera stream in your browser for live video.

Use the robotic arm to pick up small packages and transport them to their desired location.

The OLED display provides useful status information while the robot is operating.

Final Results

0-02-05-f0d9062f0c4fd702dff02879b7ff7ab00ec672709929e6359d81c0703140fcdd_4269465043b1c5f6.jpg

After completing the build, the robot is capable of driving wirelessly, streaming live video, and remotely picking up and transporting small packages.

This project combines robotics, wireless communication, embedded programming, and 3D printing into a single compact platform.

I hope this guide helps you build your own version or inspires you to create your own improvements.

Future Improvements

There are many ways this robot can be expanded in the future.

Possible upgrades include:

  1. Autonomous navigation
  2. Line following
  3. Automatic package sorting
  4. Color recognition
  5. Object detection using the ESP32-CAM
  6. Larger robotic arm
  7. Improved battery life
  8. Custom web interface

If you decide to build this robot, I'd love to see your version and any improvements you make!