

The Adafruit PCA9685 PWM Servo Breakout is a 16-channel, 12-bit PWM driver designed for precise control of servos, LEDs, and other devices. It communicates via the I2C protocol, making it easy to integrate with microcontrollers like Arduino, Raspberry Pi, and others. This breakout board is ideal for robotics, automation, and lighting projects where multiple PWM outputs are required.








The Adafruit PCA9685 breakout board has the following key pins:
| Pin Name | Description |
|---|---|
| VCC | Logic voltage input (2.3V to 5.5V). Powers the PCA9685 chip. |
| GND | Ground connection. |
| SDA | I2C data line. Connect to the SDA pin of your microcontroller. |
| SCL | I2C clock line. Connect to the SCL pin of your microcontroller. |
| OE | Output enable pin. Active low; pull low to enable PWM outputs. |
| V+ | External power input for driving servos or high-power devices (up to 6V). |
| PWM Outputs | 16 PWM output pins (labeled 0 to 15). Connect to servos, LEDs, or other loads. |
Below is an example of how to control a servo using the Adafruit PCA9685 library:
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
// Create an instance of the PCA9685 driver
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
#define SERVOMIN 150 // Minimum pulse length count for the servo
#define SERVOMAX 600 // Maximum pulse length count for the servo
void setup() {
Serial.begin(9600);
Serial.println("Initializing PCA9685...");
pwm.begin(); // Initialize the PCA9685
pwm.setPWMFreq(50); // Set PWM frequency to 50 Hz for servos
Serial.println("PCA9685 ready.");
}
void loop() {
// Sweep servo on channel 0 from minimum to maximum position
for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) {
pwm.setPWM(0, 0, pulselen); // Set PWM signal on channel 0
delay(10); // Small delay for smooth movement
}
// Sweep servo back from maximum to minimum position
for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--) {
pwm.setPWM(0, 0, pulselen); // Set PWM signal on channel 0
delay(10); // Small delay for smooth movement
}
}
No Response from the Board:
Servos Not Moving:
I2C Communication Errors:
Overheating or Power Issues:
Q: Can I use this board with a Raspberry Pi?
A: Yes, the PCA9685 is compatible with Raspberry Pi. Use the appropriate I2C pins (SDA, SCL) and libraries like Adafruit_PCA9685 in Python.
Q: How many boards can I chain together?
A: Up to 62 PCA9685 boards can be chained on the same I2C bus by configuring unique I2C addresses.
Q: What is the maximum current the board can handle?
A: Each channel can handle up to 25 mA for LEDs. For servos, the current is limited by the external power supply connected to V+.
Q: Can I control DC motors with this board?
A: Yes, but you will need an additional motor driver circuit to handle the higher current requirements of DC motors.