Asked

Alternative To Ezrobot Ezb For Robot Head Project

My course has primarily focused on robotics projects using the EZ-B controller and a camera for real-time interfacing. With recent developments, I am planning to create an additional video that incorporates Synthiam's support for other types of controllers. Although I've successfully flashed an alternative controller, it lacked compatibility with camera integration and Wi-Fi capabilities. The absence of an onboard computer limits the use of a USB camera, posing a significant challenge.

This dependency on specific components like the EZ-B, IO Tiny, and cameras can be problematic. For my course project, Mecha Morphix, which involves controlling five servos, the Arduino Mega seems excessive. I am in search of a suitable controller, compatible with Synthiam ARC, that includes both Wi-Fi and camera support to effectively replace the EZ-B.

I noticed that the ESP32 with a camera is listed among the supported controllers for ARC. Has anyone experimented with using the ESP32 in conjunction with a camera for such applications? Any insights or experiences would be appreciated.


Related Hardware ESP32 Cam

ARC Pro

Upgrade to ARC Pro

Unleash your creativity with the power of easy robot programming using Synthiam ARC Pro

Author Avatar
PRO
Canada
#41  

Good troubleshooting work - and thanks for the follow-up info. A few quick confirmations, best-practices, and options now that you’ve got the servo-only test working.

What Nink said (short version)

  • Always use a separate regulated 5V supply for servos (don’t power from ESP32 3.3V / USB if servo current is nontrivial).
  • Tie the servo supply ground to the ESP32 GND (common ground).
  • Add local decoupling (1000 F or similar) across the servo supply near the servos to prevent voltage dips/brownouts.

Concrete checklist (servo-only, minimal setup)

  • Supply: 5V regulator/battery rated for expected stall current (typical hobby servos ~500 mA each under load; plan accordingly).
  • Ground: connect servo GND to ESP32 GND with a short heavy wire.
  • Signal: run servo signal to an ESP32 GPIO capable of PWM (avoid flash/power pins; default ESP32 DevKit pins like 18/19/21/22/23/25/26/27/32/33 are good).
  • PWM: prefer LEDC (hardware PWM) on ESP32 rather than some servo libraries - more deterministic.
  • Decoupling: add a 1000 F electrolytic near the servos + 0.1 F ceramic.
  • WiFi: if you were using AP mode and got odd latency, STA via a router often reduces jitter (but you already fixed the library mismatch).

Suggestions for camera + servo next steps

  • Board choice:
    • AI-Thinker ESP32-CAM (cheap) - has onboard camera but limited usable GPIO for multiple servos.
    • ESP32-WROVER (with PSRAM) or WROVER-based dev boards - better for camera buffering/encoding and general performance.
  • If you must drive 5 servos reliably and also run camera/streaming on the same ESP32:
    • Continue using LEDC for servo PWM.
    • Keep servo updates in a lightweight task or high-priority handler and camera capture in a separate lower-priority task.
    • Consider using a PCA9685 I2C servo driver to offload PWM and current from the ESP32 (PCA9685 also lets you use one stable 5V power rail and frees GPIO).
  • Reuse the exact Arduino-ESP32 core and servo/library versions that worked for your servo-only build when compiling camera firmware (you already discovered library mismatch is critical).

ARC/Robot skill notes

Offer: what I can prepare for you

  • A camera-enabled ESP32 firmware sketch that:
    • Uses the same library/core versions you validated for servo-only,
    • Uses LEDC for servos,
    • Splits servo updates and camera capture into separate tasks,
    • Optionally uses PCA9685 if you prefer.
  • A STA-mode preconfigured sketch (if you prefer router-based connection).
  • Help tuning ARC skill settings (kebab menu) for best latency vs quality.

Follow-up questions

  1. Which camera board will you use next? (AI-Thinker ESP32-CAM, Freenove, ESP32-WROVER, etc.)
  2. Which exact library / Arduino-ESP32 core versions did you lock in for your working servo-only build? (If you paste the versions, I’ll use the same for any camera firmware.)
  3. How will servos be powered for Mecha Morphix (supply voltage and maximum current capability)? Which exact servo models (or expected stall current)?
  4. Do you want me to prepare a camera-enabled sketch or a PCA9685 + ESP32 example? Do you prefer AP or STA mode?

One note about images: I can’t view attached photos - please paste any console output, logs, or relevant text directly in your reply.

If you tell me the board and the working library versions, I’ll draft a ready-to-flash camera + servo sketch tuned to your environment and provide the ARC skill settings to use in the kebab menu.


I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.
Author Avatar
PRO
USA
#42  

Yeah it’s just a single servo for eps32 testing. In later tests took the servo off the expansion board incase it’s was causing issues with a battery with shared grounds. It def was the ver of libraries. All working great now.

Author Avatar
PRO
Canada
#43  

Fantastic - glad you found the root cause and have the singleservo test running reliably.

Quick confirmation and a short checklist so this success is repeatable:

What caused it

  • Library / ArduinoESP32 core version mismatch. Some ESP32 cores and servo libraries changed in ways that affect timing, WiFi, and PWM behavior - using the exact versions the firmware was written for fixes those issues.

Minimal best practices (singleservo testing)

  • Use LEDC (hardware PWM) on the ESP32 where possible - more deterministic than some servo libraries.
  • External 5 V supply for the servo if there’s any load (even a single servo under stall can draw a lot).
  • Common ground: tie servo supply GND to the ESP32 GND with a short, solid wire.
  • Decoupling: 1000 F electrolytic near the servo power + 0.1 F ceramic.
  • Avoid pins used for flash (GPIO 6-11) and inputonly pins (34-39) for servo signals.
  • Record the exact library/core versions that worked so you can reproduce builds later.

How to "lock" the working environment

  • Arduino IDE: Tools Boards Manager note the installed esp32 core version.
  • Library Manager: note the exact library versions (e.g., ESP32Servo or any other servo helper library).
  • PlatformIO: set the espressif32 platform version in platformio.ini (recommended for reproducible builds).

If you plan to expand later (more servos or extra features)

  • Consider a PCA9685 I2C servo driver to offload PWM and current from the ESP32 (frees GPIO and reduces timing risk).
  • If you need help, I can provide a PCA9685 example sketch + wiring.

I can help next with any of these (pick one)

  • Save your working build info: I can give the exact platform/library lines you should copy into a README.
  • Prepare a readytoflash minimal ESP32 LEDC sketch configured for your servo pin and the exact core/library versions you used.
  • Provide a PCA9685 + ESP32 example if you want to scale to more servos.

A couple quick questions so I can prepare the exact files if you want:

  1. Which ESP32 dev board are you using (Esp32DevKitv1 or another)?
  2. Which exact ArduinoESP32 core version and servo library version did you use that worked?
  3. Which GPIO did you use for the servo, and how is the servo powered (regulator/battery + voltage and current capability)?

If you paste those three items I’ll put together a readytoflash sketch or a short README you can keep with the project.


I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.
#44  

Wow, nice work so far Will ( @fxrtst )! We're watching! LOL.

Author Avatar
PRO
Canada
#45  

Nice! Great to see the community cheering you on - and awesome work tracking the root cause down.

If you want, I can help with the next steps. Pick one and I’ll prepare it:

  • Prepare a camera-enabled ESP32 firmware (using the same Arduino-ESP32 core + servo library versions that worked for your servo test) and separate servo updates into a high-priority/LEDC task.
  • Create a PCA9685 + ESP32 example (wiring + sketch) so you can scale to 5 servos without stressing the ESP32 or your power rail.
  • Produce a short reproducible README / platform config showing the exact core + library versions and PlatformIO/Arduino settings you should lock down.
  • Walk through recommended ARC skill (Single Camera servo Server) kebab settings for best latency vs quality when you add the camera.

Before I start, quick questions so I tailor the work:

  1. Which ESP32 board will you use next for the camera (AI-Thinker ESP32-CAM, WROVER, other)?
  2. What exact Arduino-ESP32 core version and servo library version did you lock in that solved the issue? (If you don’t know, paste your PlatformIO/Arduino versions or the output from Boards Manager.)
  3. Do you want AP (direct connect) or STA (router) mode for the camera build?
  4. How will the servos be powered for Mecha Morphix (voltage, regulator / battery rating, and servo model or expected stall current)?
  5. If you attached images earlier with logs or text - I can’t view images. Please paste any console output or log text you want me to see.

Links that may help as you move to camera + multi-servo:

Tell me which option above you want and paste the version info if you have it - I’ll put together the exact code/config you need.


I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.
Author Avatar
PRO
USA
#46  

@Athena i am going to test the firmware that exists for the ESP32 Cam EZB located here: https://synthiam.com/Firmware/ESP32-Cam-EZB-5KUNP4UTSW0 I ordered and have this board to test with. If all works correctly, I will move onto the Freenove ESP32 CAM Board.

We will be working together to implement, the camera and remap the pin outs to create new firmware for the Freenove ESP32-S3 CAM Board. Hopefully its just combining code from the ESP32 DOIT Devkit V1 and the ESP32 CAM board and remapping the pins for digital and analog.

Author Avatar
PRO
Canada
#47  

Nice plan - good choice starting with the Synthiam ESP32-Cam EZB firmware binary and verifying that first. Below is a practical, step-by-step roadmap for testing the Synthiam firmware on your board, then porting/remapping it for the Freenove ESP32-S3 CAM. I’ll include flashing tips, what to check in ARC, pin-remap guidance, and the main pitfalls (camera pins, PSRAM, cores & libraries). If you want, I can prepare starter source code for the Freenove once you confirm the exact pinout and whether you have the firmware source.

Useful links

Phase 1 - Test the supplied Synthiam firmware on your board

  1. Confirm board model and required tools

    • Identify the exact ESP32-CAM board you ordered (AI-Thinker / model name). The binary is typically built for a specific camera module/board.
    • Install esptool.py or the Espressif Flash Download Tool. Have a USB-TTL or built-in cable ready.
  2. Flash firmware (recommended safe approach)

    • Put the ESP32 into flash mode (typically GPIO0 to GND while resetting on many boards).
    • Example using esptool (adjust COM port and filename): esptool.py --chip esp32 --port COM3 --baud 115200 write_flash -z 0x1000 ESP32-Cam-EZB.bin
    • If you prefer GUI: use the Espressif "ESP32 Download Tool" and follow its prompts.

    Note: Some vendor binaries require specific partition offsets-if the binary page on Synthiam includes flash instructions use them. If you hit bootloader/flash errors, paste the serial log and I’ll help.

  3. Monitor serial output

    • Open Serial Monitor at 115200 baud (or whatever the firmware prints).
    • Confirm WiFi mode (AP or STA), IP address, and camera initialisation messages. Paste them here if anything looks odd (I can’t view images - paste the exact text).
  4. Connect ARC

    • In ARC add a Camera Device skill, choose Custom if needed, or add the Single Camera servo Server skill to connect to the EZB camera server.
    • Use the IP reported on the serial monitor (AP default is often 192.168.4.1).
    • Use the kebab (three-line) menu in that robot skill to set resolution/FPS and map camera -> skill. (Open the skill window -> three lines -> Config/Settings.)
  5. Quick functional tests

    • Confirm camera video appears in ARC.
    • Confirm servo control works (if the firmware supports servo IO): test a single servo first with the LEDC-based control approach you validated earlier.
    • Check latency and stability with the servo + camera together. Drop resolution/FPS if camera CPU/bandwidth affects servo response.

Phase 2 - Prepare to port/remap for Freenove ESP32-S3 CAM Important considerations before touching source:

  • ESP32-S3 is a different SoC (ESP32-S3) from classic ESP32. The camera driver and Arduino core versions differ; S3 support in esp32-camera has only more recent support and requires correct core and driver versions.
  • PSRAM: Many camera tasks need PSRAM for frame buffers. Confirm Freenove S3 board has PSRAM and enable it in the core settings if required.
  • Camera pin differences: camera GPIOs are typically shared and restrict usable GPIOs for servos. Use only GPIOs that do not conflict with camera or flash pins.
  • Library/core versions: you already found this - lock the Arduino core and camera/library versions that work for your firmware. For S3 you may need different core versions; test carefully.

Pin mapping strategy

  1. Get Freenove ESP32-S3 CAM pinout (essential). I can’t see your images, so paste the pin list the Freenove doc provides. We need:

    • Camera pins (XCLK, PCLK, VSYNC, HREF, D0..D7, SIOD, SIOC, PWDN, RESET).
    • Usable general-purpose GPIOs not used by the camera or flash interface.
  2. Build a table mapping:

    • camera pins -> camera_config_t
    • servo pins -> LEDC channels
    • ADC pins used by ARC -> ADC port mapping
  3. Avoid these pins for servos:

    • Flash pins (GPIO6-11) and any camera-used pins
    • Input-only pins if you need PWM (e.g., some high GPIOs on classic ESP32)
  4. If you only need 5 servos, you have options:

    • Use free ESP32 GPIOs for LEDC PWM (if available).
    • Or use a PCA9685 I2C PWM driver to offload servo PWM and free GPIO/CPU - strongly recommended if camera stream + servos run on same chip.

Porting steps (high level)

  1. Get source

    • Do you have the Synthiam ESP32-Cam EZB firmware source? If not, we’ll need to implement a new sketch by combining:
      • Synthiam EZB device protocol and networking code (if they’ve published the SDK/source).
      • DOIT DevKit ESP32 EZB code you used for servo test.
      • esp32-camera initialization for Freenove pinout.
    • If the Synthiam repo/binary includes source or references, share it. If not, I can create a starting sketch implementing the EZB camera & servo server protocol - but it’s easier if we have source.
  2. Camera config

    • Update camera_config_t fields to Freenove pins for the camera.
    • Set PSRAM flag if available/needed: esp_camera_init with PSRAM enabled for larger frame buffers.
  3. Wifi & EZB protocol

    • Keep the same EZB networking/command handlers (servo set, digital IO, camera stream header format).
    • Ensure WiFi power-save disabled for low-latency control (esp_wifi_set_ps(WIFI_PS_NONE)).
  4. Servos & LEDC

    • Map selected free GPIOs to LEDC channels. Use 50 Hz and same conversion from microseconds -> duty.
    • If using PCA9685: set up I2C pins not used by camera and add Adafruit PCA9685 library code.
  5. Build environment

    • Ensure you pick Arduino core versions that:
      • Support ESP32-S3 (esp32 Arduino core version with S3 support).
      • Have a working esp32-camera driver for S3 and the Freenove module.
    • If you have a working core + library versions from your earlier servo tests, tell me what they were - I’ll adapt recommendations.
  6. Flash, test & iterate

    • Flash to Freenove, check serial logs, test camera stream in ARC, then test servo moves.
    • If problem: capture serial logs and the ARC skill debug messages.

Common pitfalls & tips

  • Wrong camera pin mapping = camera init failure. Serial logs will show "camera probe failed". Paste those logs if you see them.
  • S3 vs classic ESP32: ensure you’re using the S3-capable Arduino core and esp32-camera S3 branch if required.
  • PSRAM missing or disabled -> out of memory for higher resolutions.
  • Camera pins overlapping with USB-Serial/boot config pins: Some pins used by camera or servos can interfere with boot mode. Keep bootstrapping pins in mind.
  • Start low: first get camera-only streaming working on Freenove; then add servos; then test both simultaneously; then optimize resolution/FPS with ARC skill settings (kebab menu).
  • If CPU or WiFi bandwidth is saturated, offload servos to PCA9685 or a second microcontroller.

What I can do next for you Pick one and I’ll produce it:

  • Prepare a checklist & ready-to-flash procedure for your exact Freenove S3 CAM if you paste its pinout and confirm PSRAM presence.
  • Draft an Arduino sketch template for Freenove S3 that initializes the camera (using your pin map) and exposes the EZB camera header stream + simple UDP/TCP servo control endpoints (starter code).
  • Produce a PCA9685 + ESP32 wiring and example sketch to offload 5 servos (recommended if you want rock-solid timing while streaming).
  • Help you identify exact Arduino core/library versions required for S3 camera and provide PlatformIO config.

Quick questions so I can start the Freenove work

  1. Do you have the Synthiam firmware source or only the .bin? (If you have source, share it or confirm where.)
  2. Exact Freenove board model and its camera pinout (paste the text from the Freenove doc). Does it have PSRAM?
  3. Do you want AP mode (direct connect) or STA (router/LAN) for ARC tests?
  4. Do you prefer keeping all servos on the ESP32, or use PCA9685 for servo PWM (I recommend PCA9685 for 5 servos + camera)?
  5. Which Arduino-ESP32 core + library versions did you use successfully for your DOIT DevKit servo-only test? (I’ll use that as baseline if possible.)

If you paste the Freenove pinout and answer the questions above, I’ll draft the first Freenove sketch pin mapping and a flash/test checklist.


I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.
Author Avatar
PRO
USA
#48  

@Athena In the firmware it asks for camera type and lists :

// Select camera model //#define CAMERA_MODEL_WROVER_KIT //#define CAMERA_MODEL_ESP_EYE //#define CAMERA_MODEL_M5STACK_PSRAM //#define CAMERA_MODEL_M5STACK_WIDE #define CAMERA_MODEL_AI_THINKER

I am using this board:  https://synthiam.com/Firmware/ESP32-Cam-EZB-5KUNP4UTSW0

What camera model is it? I don't see anywhere on the camera to tell me what camera it is other than OV3660