PCA9685 Servo Controller by Adafruit
If you’re building a robot or project with lots of servos (hexapods, animatronics, kinetic art, pan/tilt arrays, etc.), the PCA9685 makes it much easier. Instead of trying to plug many servos directly into an Arduino’s limited pins, the PCA9685 provides up to 16 servo outputs using a simple two‑wire connection (I2C) to the Arduino.
This setup is commonly used with Arduino boards that accept shields such as the Uno, Leonardo, Mega, or ADK. We recommend the Arduino Uno for beginners because it’s compact, inexpensive, and works great with ARC when loaded with the correct EZB firmware.
-
You load EZB firmware onto the Arduino.
This turns the Arduino into a controller that ARC can talk to. -
The Arduino talks to the PCA9685 board.
The Arduino sends I2C commands (usually over pins SDA/SCL). The PCA9685 generates stable servo pulses for up to 16 channels. -
ARC controls the servos.
In ARC you add servo controls/scripts and ARC sends commands through the Arduino (EZB firmware) to the PCA9685 outputs.
-
Servo power: Servos often need more power than USB can provide. In most builds you will use a separate 5–6V power supply for servos.
Tip: Many servo issues (jittering, resetting, random movement) are power-related.
- Common ground: If you use a separate servo power supply, make sure the GND (ground) of the servo power supply is connected to the GND of the Arduino/PCA9685 system.
- Servo count: The PCA9685 provides 16 channels. You can often stack or chain boards in some setups, but start with one board until everything works.
- Firmware choice matters: Different firmware builds exist for different Arduino + PCA9685 configurations. If one firmware does not match your hardware layout, ARC may connect but servo channels may not respond as expected.
Choose one of the firmware packages below. If you’re unsure which one to use, start with the newest official-looking option first, then try the others if needed.
-
ESP32Cam
For ESP32 Camera
-
Mickey's Firmware (Mar 4, 2019)
Useful if you have a similar build to Mickey’s original shield-based configuration.
-
EZ-Genuino_Uno_Adafruit_16_Servo_Shield.zip (Dec 11, 2022)
Newer firmware option for Arduino Uno + Adafruit 16-Channel PWM/Servo Shield style setups.
-
Miller's Generic PCA9685 EZB_UNO_PCA9685.zip
Generic PCA9685 firmware option (often helpful for non-shield PCA9685 breakout boards).
After downloading the firmware, follow the step-by-step tutorial to install it on your Arduino: https://synthiam.com/Tutorial/17526
What you will do in the tutorial:
- Install and open the Arduino IDE.
- Open the firmware project you downloaded (ZIP file).
- Select your Arduino board type (ex: Uno) and correct COM port.
- Upload the firmware to the Arduino.
- Connect ARC to the Arduino running EZB firmware.
- Add servo controls in ARC and test a single servo first (one channel) before connecting all servos.
- If a servo moves the wrong direction or doesn’t reach the expected range, use ARC servo configuration options (such as reverse and limits) to fine-tune motion.
- If servos jitter or ARC disconnects, re-check your power supply and ensure all grounds are connected together.

Hi just wanted to know if there was any support for using this servo controller with raspberry pi and an Arduino
Install ARC on a windows pc. Install the ezb firmware on this servo controller and connect to it. The instructions are above
I don't have a Adafruit's popular PWM/Servo Breakout, sorry
I use the PCA9685 for many servos
2 for 14.79 https://www.amazon.com/pca9685/s?k=pca9685
Ive been trying to use this with uno and adafruit break out board. Will not work at all in ARC, no issues with running all ports in arduino.ide and IC2... I have done the above suggestions with no avail. I must be overlooking something? But with almost 9 hours into it, cannot find a solution.
Trying to bring an old Manoi PF01 back to life, cannot use the KRS skill as the uno reports as not compatible. While I'm here, anyone been able to use ARC to talk with the Kondo RCB-3HV controller?
May have to wait and nab one of ez-robot controllers and hope for the best. Thanks in advance for any help offered. - Tom
I am using an Arduino uno with a PCA9685 for 8 servos in this video.
Make sure you use a separate power (5 V to 7.4 V) for the PCA9685
I am also using the Auto position, speech recognition, some scripts and the audio toolbox plug-in for the Mark voice you hear.
I Works best with a IOTiny, Wi-Fi https://youtu.be/CFk0pAUx_gw
I don't think you need an ezrobot controller for this. From what I understand how it works, you need an Arduino.
What stage are you stuck at?
Program the arduino with the source above (Mickeys firmware)
Connect ARC to the arduino
Move servos (I'm guessing they're going to be D0-D15?)
Hey DJ,
I've programmed my UNO with Mickeys firmware, and a PCS9685 (adafruit). Connecting to ARC is no issue, it see's my board, I can do other functions with it, just not operate any servos. Yes, I've addressed them as D0-D15, then just focused on getting only one port to communicate, addressing differently, trying other hobby servos, others codes and suggestions, nada.
Tried with the KONDO skill, errors for "Hardware UART TX/RX with DMA buffer and adjustable baud rate - not supported on EZB device"
So scratched using that skill and tried many obvious things to troubleshoot why I cant control, or possibly better explain, why I cant access the breakout board over I2C with ARC on 2 different boards using PWM. When I reflash the UNO's with stock firmware and run the adafruit lib in IDE, all servos (KRC-4024) function with all boards.
I'm left to believe the problem is between ARC/ UNO and breakout, (even though ARC sees it too), getting nothing on the scope on the I2C ports while using ARC... I've tried assigning ports to the board which work, then to the breakout, tried another UNO and still can't get them to talk. 2 Different UNO's and 2 adafruit breakouts. Totally could be something I've missed...
The reason for shifting towards EZRobot controller was size and built in modes of communication, AI Etc. Really wanting to use auto gait, etc instead of coding movements for weeks. I will say I've used ARC with UNO's before but with wheel/tracked/arm builds without issue, using no expansion/breakout boards.
Sorry for the delay, work has been keeping me busy. And do appreciate you reaching out, love what you are doing and bring the live hacks back, pro subscription coming. -Tom
Hi Tom,
With my Arduino I also had no servo movements action UNTIL I added a separate power supply to the PCA9685 - 5v to 7.4v will do
Maybe you are doing this, but you did not state this above.