Esp32

Esp32 by Espressif

Control ESP32 boards with Synthiam ARC: EZB-like firmware for GPIO, PWM/servos, serial, WiFi modes, safe pins, wiring and power tips.
Connection Type
Wi-Fi
Number of Servos
Varies
Audio Support
No
Camera Support
No
UARTs
Varies
I2C Support
No
ADC Ports
Varies
Digital Ports
Varies

The ESP32 is a small, low-cost microcontroller without a camera onboard. Think of a microcontroller as a tiny computer whose job is to control hardware. It can:

  • Read inputs (buttons, distance sensors, switches, analog modules, etc.)
  • Control outputs (LEDs, relays, motors/servos using PWM, buzzers, etc.)
  • Communicate over Wi‑Fi (and Bluetooth, though ARC connection is typically Wi‑Fi)
*Note: This page is for the ESP32 that does not have an onboard camera. For ESP32s with onboard cameras, see the ESP32-Cam document.

The ESP32 is also generic hardware—many companies sell boards based on the same ESP32 chip. You may see board names like DevKit v1, DOIT, NodeMCU‑32S, etc. These boards can look slightly different, but the setup concepts in this guide are the same.

When you install the Synthiam ESP32 firmware onto your ESP32 board, it will behave like an EZ‑B controller. That means Synthiam ARC can connect to it and control: digital I/O, PWM/servo signals, serial ports, and more—similar to how ARC works with other EZB-type controllers.

Beginner tip (names can be confusing):
  • ESP32 = the chip family (the “brain”).
  • DevKit / DOIT / NodeMCU = different boards built around the ESP32 chip.
  • GPIO = the pin names printed on the board (example: GPIO2, GPIO23).
  • ARC ports (D0–D23) = the port names ARC shows you. These map to specific ESP32 GPIO pins.
ESP32‑Cam is different: The ESP32‑Cam uses different hardware, pin availability, and setup steps. This page is for ESP32 boards without the camera (DevKit v1 / NodeMCU‑style boards).
Servo note (important): If you will control servos, use these commonly recommended “safe” pins:
2, 4, 12–19, 21–23, 25–27, 32–33

Why does this matter? Some ESP32 pins are used during boot (startup) or have special functions. Using the wrong pins can cause:
  • jittery/unstable servo movement
  • random reboots/resets
  • the ESP32 failing to boot until you disconnect the servo
Tip: If something behaves strangely, move the signal wire to a different “safe” pin first.
Power warning (read before using servos): The ESP32 board cannot safely power multiple servos from USB. Servos can pull a lot of current, especially when starting or under load.
  • Use a separate regulated 5V supply for servos (with enough amps for your servo count).
  • Critical: connect the servo power supply GND (−) to the ESP32 GND so they share a common ground.
If you skip the shared ground, servos may twitch, not respond, or ARC control can act “random.”

What You Need (Beginner Checklist)

  • An ESP32 breakout board
    Examples: DevKit v1, DOIT, NodeMCU‑32S. (Not ESP32‑Cam.)
  • USB cable that supports data
    Some cables are “charge-only” and will power the board but cannot upload firmware.
  • Windows PC (for Synthiam ARC)
  • Synthiam ARC installed
  • Synthiam ESP32 firmware installed on the ESP32
    This firmware is what makes the ESP32 act like an EZB controller.
  • A Wi‑Fi plan (choose one):
    • AP Mode: your PC connects directly to the ESP32’s Wi‑Fi (no router required)
    • Client Mode: the ESP32 joins your home/office Wi‑Fi router
  • If using servos:
    • Regulated 5V power supply with enough amps
    • Wires to connect servo GND to ESP32 GND
  • Optional but helpful:
    • Breadboard and jumper wires (makes beginner wiring much easier)
    • A basic multimeter (helpful for checking 5V/3.3V and ground connections)
How many amps do servos need? It depends on the servo model and the load. As a beginner rule, budget ~1 amp per small servo (more for larger servos). If servos stall, twitch, or the ESP32 resets when servos move, your power supply is usually too weak.

Video Tutorial

This video shows a step-by-step walkthrough of connecting an ESP32 to ARC and confirming communication. If something doesn’t work, the most common causes are: wrong Wi‑Fi mode, wrong IP address, incorrect firmware, using a charge-only USB cable, or power/wiring problems.


Wi‑Fi Modes (How ARC Connects)

The Synthiam firmware supports two Wi‑Fi connection modes. Pick the one that matches how you want to use your robot. In both modes, ARC communicates with the ESP32 over the network.

AP Mode (Access Point / Hotspot)

In AP Mode, the ESP32 creates its own Wi‑Fi network (similar to a phone hotspot). You connect your PC/tablet to that Wi‑Fi, then ARC connects to the ESP32.

  • Best for: quick testing, portable robots, demos, no router available.
  • Gotcha: your PC may lose Internet while connected to the robot Wi‑Fi.
  • Gotcha: Windows may auto-switch back to your normal Wi‑Fi, which disconnects ARC.
Tip: If ARC keeps disconnecting in AP Mode, check whether your computer is jumping between Wi‑Fi networks.
Client Mode (Join Your Router)

In Client Mode, the ESP32 connects to your existing router Wi‑Fi like a normal device. ARC connects to the ESP32 using its IP address on that network.

  • Best for: longer range, multiple computers/tablets watching, keeping Internet access.
  • Gotcha: you must know the ESP32’s current IP address.
  • Gotcha: “Guest Wi‑Fi” often blocks devices from seeing each other.
Tip: If the IP address keeps changing, set a DHCP reservation in your router so it stays the same.
How to find the IP address (easy method):
  1. Connect the ESP32 to your PC by USB.
  2. Open the Arduino IDE (or another serial terminal program).
  3. Go to Tools > Serial Monitor.
  4. Set baud rate to 115200.
  5. Reset the ESP32 (press EN or unplug/replug) and read the messages.
The firmware prints Wi‑Fi status and the current IP address in the Serial Monitor.
Beginner notes:
  • Baud rate is the serial “speed.” If you see random symbols, set it to 115200.
  • If the ESP32 never shows a valid IP in Client Mode, double-check your Wi‑Fi name/password and whether your router blocks new devices.

Connecting from ARC (Beginner Steps)

  1. Plug the ESP32 into your PC with USB.
    You should see a power LED. If nothing lights up, try a different cable or USB port.
  2. Confirm the firmware is installed.
    If the board doesn’t behave as expected, re-flash the Synthiam ESP32 firmware.
  3. Decide your Wi‑Fi mode: AP or Client.
    If you’re unsure, AP Mode is usually easiest for first-time testing.
  4. Make sure your PC is on the correct Wi‑Fi network.
    • AP Mode: connect Windows Wi‑Fi to the ESP32’s Wi‑Fi network.
    • Client Mode: connect Windows Wi‑Fi to the same router network the ESP32 joined.
  5. Open ARC and add the ESP32/EZB connection that matches the Synthiam firmware.
    Then enter the IP address (Client Mode) or connect while on the ESP32 Wi‑Fi (AP Mode).
  6. Connect and verify communication.
    If ARC shows “Connected,” you’re ready to control pins and add skills.
  7. Test with something simple:
    • Toggle a digital output (e.g., LED module on a GPIO pin)
    • Move one servo on a recommended “safe” pin (with proper external 5V servo power)
If it won’t connect: Double-check (1) ARC version, (2) you’re on the correct Wi‑Fi network, (3) the IP address is correct (Client Mode), (4) Windows firewall/router is not blocking local network connections, and (5) the ESP32 is not rebooting due to power issues.

Port Configuration (ARC D0–D23 vs ESP32 GPIO)

In ARC, digital ports are often shown as D0–D23. On ESP32 boards, the physical pins are labeled GPIO (example: GPIO2, GPIO4, GPIO23). These do not run in perfect order down the board, and some GPIO numbers may not exist on your particular ESP32 breakout.

How to use the mapping: If ARC tells you to use D4, you must wire your device to the correct GPIO that matches D4 using the mapping of the firmware. In other words: ARC port name and board pin label are different systems.

Pins labeled TX and RX are used for serial communication (UART). Many boards connect these to the ESP32’s main serial port (often called UART0 / Serial0), which is also commonly used for USB programming/serial logs.

Important: Some ESP32 pins have special boot-time behavior. If a pin won’t output correctly, causes rebooting, or makes servos jitter, move to a recommended “safe” pin:
2, 4, 12–19, 21–23, 25–27, 32–33
ESP32 to ARC digital port mapping
Quick Wiring Basics
  • GND to GND: Most sensors (and all servo signal systems) need a shared ground.
  • Signal to GPIO: The control/data wire goes to the GPIO pin you select in ARC.
  • Power to the correct pin: Many sensors use 3V3; some modules use 5V/VIN.
Typical sensor labels:
  • VCC = power in
  • GND = ground
  • OUT / SIG / DATA = signal to a GPIO pin
Voltage Levels (Very Important)
  • ESP32 GPIO logic is 3.3V. A “HIGH” signal is about 3.3V.
  • Some modules are powered from 5V but still output a safe 3.3V logic signal (depends on the module).
  • If a device outputs 5V into an ESP32 GPIO pin, you may need a level shifter (or voltage divider) to avoid damaging the ESP32.
When in doubt: look up the module’s “logic level” or “output voltage” in its documentation.
Servo Wiring (Typical)
Do not power servos from the ESP32 3V3 pin. Most servos require 5V and more current than the ESP32 can provide.
Servo signal
Usually white/yellow/orange
→ ESP32 GPIO (recommended safe pin)
Servo power +5V
Usually red
→ External regulated 5V supply (+)
Servo ground
Usually brown/black
→ External supply (−) and also to ESP32 GND

If the ESP32 resets when a servo moves, that is almost always a power problem (voltage drop). Use a stronger 5V supply and keep servo power wires short and thick when possible. For multiple servos, consider a dedicated servo power distribution board.
Beginner “first project” suggestion: Before wiring motors or many servos, start with one simple test: connect an LED (with a resistor) or a ready-made LED module to a safe GPIO pin and toggle it in ARC. Once that works, add one servo with external 5V power.

Upgrade to ARC Pro

Join the ARC Pro community and gain access to a wealth of resources and support, ensuring your robot's success.

Author Avatar
PRO
Synthiam
#33  

I wouldn't bother with the adafruit servo controller because the communication is slow and a little wonky with i2c.

You'd get more out of an Arduino with a servo shield. Simply connect the Arduino's RX and TX to the TX and RX of the ESP32 cam.

Once you do that, the firmware change is minor on the esp32. All you need to do is a while () loop that passes TCP to the UART and vice versa. All of the EZB code is removed.

#35  

To compile on Arduino IDE 2.0.3 I had to change line 591 to: analogWrite(translateaDigitalPort(port), (uint16_t) map(pos, 0, 100, 0, 255));

I'm assuming here it is supposed to use the included analogWrite and not the Arduino included one?

Author Avatar
PRO
Synthiam
#36  

I don't think an Arduino analog write exists for the ESP Arduino library. At least at the time of the firmware creation, there wasn't. It shouldn't matter which one you use if there happens to be an Arduino AnalogWrite installed with the ESP package.

But i think you need to be casting the value to a uint8_t not a uint16_t. Because it's only a byte from 0-255. I mean, the 16bit int will work but it's unneeded extra bits:)

#37  

Gotcha. I commented out analogWrite and moved the files out of the project and it compiled. Looks like it was included November 2021 since version 2.0.1 so after the firmware was written.

esp32/hardware/esp32/2.0.6/cores/esp32/esp32-hal.h:void analogWrite(uint8_t pin, int value);

Aside from that error the rest of the firmware compiled fine.

Author Avatar
PRO
Synthiam
#38   — Edited

that's good to know - i might have to revisit that firmware and remove the analogwrite.h to use the built-in one.

so you got it working then?

#39  

Yeah I'm just sitting at my bench with multimeter testing the PWM's on the pins. Works great.

p.s. nabu'er here as well :-) actually that's how I found ARC. It's just a hobby of mine and learning ros2 was not fitting into my schedule anytime soon.

Author Avatar
PRO
Canada
#40  

I was really impressed how well the ESP32 worked with ARC.  I think if someone sat down and built a free 3D printed opensource series of robots like a robot humanoid, robot hexapod, robot car etc based on the ESP and called it something like ES-Robot, it would be a huge success for schools and hobbyists  :)