16-Channel 12-bit PWM/Servo Driver I2C interface PCA9685 for Arduino Raspberry Pi

  • 🔁 16-channel PWM control (12-bit resolution)
  • 🔌 I2C interface – only 2 pins needed
  • 🧠 Chain up to 62 modules (992 outputs total)
  • ⚙️ Adjustable PWM frequency (up to 1.6 kHz)
  • ⚡ 3.3V and 5V logic compatible
  • 🔧 Output enable pin for quick shutdown
  • 🛡️ Reverse polarity protection
  • 💡 Power indicator LED
  • 🧩 Plug in up to 16 servos directly

Apple Shopping Event

Hurry and get discounts on all Apple devices up to 20%

230,00 EGP

5 People watching this product now!

Payment Methods:

Description

If you want to make a robot which has lots of moving parts or if you want to control too many LEDs with PWM outputs,  then the limited PWM outputs of your microcontroller would be a big problem for you. To overcome this problem, the only thing you should do is to get a 16-Channel 12-Bit PWM/Servo Driver.

You can control 16 free-running PWM outputs with 16-Channel 12-Bit PWM/Servo Driver using only 2 pins. You can even chain up 62 breakouts to control up to 992 PWM outputs.

It’s an I2C-controlled PWM driver with a built-in clock. That means you do not need to continuously send it to signal to tie up your microcontroller, it is completely free running!

It is 5V compliant, which means you can control it from a 3.3V microcontroller and still safely drive up to 6V outputs. This is good when you want to control white or blue LEDs with 3.4+ forward voltages. 6 address select pins so you can wire up to 62 of these on a single I2C bus, a total of 992 outputs.


Features :

  1. Adjustable frequency PWM up to about 1.6 KHz
  2. 12-bit resolution for each output – for servos, that means about 4us resolution at a 60Hz update rate
  3. Configurable push-pull or an open-drain output
  4. The output enable pin to quickly disable all the outputs
  5. Terminal block for power input
  6. Reverse polarity protection on the terminal block input
  7. Green power-good LED
  8. 3 pin connectors in groups of 4 so you can plug in 16 servos at once
  9. Chainable design
  10. A spot to place a big capacitor on the V+ line
  11. 220-ohm series resistors on all the output lines to protect them, and to make driving LEDs trivial.
  12. This board/chip uses I2C 7-bit address between 0x60-0x80, selectable with jumpers.

Package Includes :

1 x 16-Channel 12-bit PWM/Servo Driver
🔌
Pin Connections
1 Table
Pin Connections Table 1
BoardSensor PinConnection
PCA9685VCC/GND/SDA/SCL3.3-5V logic / GND / board SDA / board SCL (servo power comes from the board's separate V+ terminal)
📟
16-Channel 12-bit PWM/Servo Driver I2C interface PCA9685 for Arduino Raspberry Pi
7 Examples • C/C++ | Boards: Arduino Uno, Arduino Nano, Arduino Mega, ESP32, ESP8266, STM32, Raspberry Pi Pico
16-Channel 12-bit PWM/Servo Driver I2C interface PCA9685 for Arduino Raspberry Pi - Arduino Uno
16-Channel 12-bit PWM/Servo Driver I2C interface PCA9685 for Arduino Raspberry Pi - Arduino Nano
16-Channel 12-bit PWM/Servo Driver I2C interface PCA9685 for Arduino Raspberry Pi - Arduino Mega
16-Channel 12-bit PWM/Servo Driver I2C interface PCA9685 for Arduino Raspberry Pi - ESP32
16-Channel 12-bit PWM/Servo Driver I2C interface PCA9685 for Arduino Raspberry Pi - ESP8266
16-Channel 12-bit PWM/Servo Driver I2C interface PCA9685 for Arduino Raspberry Pi - STM32
16-Channel 12-bit PWM/Servo Driver I2C interface PCA9685 for Arduino Raspberry Pi - Raspberry Pi Pico
📄 File: 16-channel_12-bit_pwm/servo_driver_i2c_interface_pca9685_for_arduino_raspberry_pi_-_arduino_uno.inoArduino Uno
550 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// I2C wiring for Arduino Uno: A4=SDA, A5=SCL
6#include <Wire.h>
7#include <Adafruit_PWMServoDriver.h>
8
9Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
10
11void setup() {
12 Serial.begin(115200);
13 Wire.begin();
14 pwm.begin();
15 pwm.setPWMFreq(50); // 50Hz for standard servos; use ~1500Hz for motor/LED PWM instead
16}
17
18void loop() {
19 for (int ch = 0; ch < 16; ch++) {
20 pwm.setPWM(ch, 0, 300); // ~1.5ms pulse - servo center position, on every channel in turn
21 }
22 delay(1000);
23}
📄 File: 16-channel_12-bit_pwm/servo_driver_i2c_interface_pca9685_for_arduino_raspberry_pi_-_arduino_nano.inoArduino Nano
551 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// I2C wiring for Arduino Nano: A4=SDA, A5=SCL
6#include <Wire.h>
7#include <Adafruit_PWMServoDriver.h>
8
9Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
10
11void setup() {
12 Serial.begin(115200);
13 Wire.begin();
14 pwm.begin();
15 pwm.setPWMFreq(50); // 50Hz for standard servos; use ~1500Hz for motor/LED PWM instead
16}
17
18void loop() {
19 for (int ch = 0; ch < 16; ch++) {
20 pwm.setPWM(ch, 0, 300); // ~1.5ms pulse - servo center position, on every channel in turn
21 }
22 delay(1000);
23}
📄 File: 16-channel_12-bit_pwm/servo_driver_i2c_interface_pca9685_for_arduino_raspberry_pi_-_arduino_mega.inoArduino Mega
553 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// I2C wiring for Arduino Mega: D20=SDA, D21=SCL
6#include <Wire.h>
7#include <Adafruit_PWMServoDriver.h>
8
9Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
10
11void setup() {
12 Serial.begin(115200);
13 Wire.begin();
14 pwm.begin();
15 pwm.setPWMFreq(50); // 50Hz for standard servos; use ~1500Hz for motor/LED PWM instead
16}
17
18void loop() {
19 for (int ch = 0; ch < 16; ch++) {
20 pwm.setPWM(ch, 0, 300); // ~1.5ms pulse - servo center position, on every channel in turn
21 }
22 delay(1000);
23}
📄 File: 16-channel_12-bit_pwm/servo_driver_i2c_interface_pca9685_for_arduino_raspberry_pi_-_esp32.inoESP32
552 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// I2C wiring for ESP32: GPIO21=SDA, GPIO22=SCL
6#include <Wire.h>
7#include <Adafruit_PWMServoDriver.h>
8
9Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
10
11void setup() {
12 Serial.begin(115200);
13 Wire.begin();
14 pwm.begin();
15 pwm.setPWMFreq(50); // 50Hz for standard servos; use ~1500Hz for motor/LED PWM instead
16}
17
18void loop() {
19 for (int ch = 0; ch < 16; ch++) {
20 pwm.setPWM(ch, 0, 300); // ~1.5ms pulse - servo center position, on every channel in turn
21 }
22 delay(1000);
23}
📄 File: 16-channel_12-bit_pwm/servo_driver_i2c_interface_pca9685_for_arduino_raspberry_pi_-_esp8266.inoESP8266
546 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// I2C wiring for ESP8266: D2=SDA, D1=SCL
6#include <Wire.h>
7#include <Adafruit_PWMServoDriver.h>
8
9Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
10
11void setup() {
12 Serial.begin(115200);
13 Wire.begin();
14 pwm.begin();
15 pwm.setPWMFreq(50); // 50Hz for standard servos; use ~1500Hz for motor/LED PWM instead
16}
17
18void loop() {
19 for (int ch = 0; ch < 16; ch++) {
20 pwm.setPWM(ch, 0, 300); // ~1.5ms pulse - servo center position, on every channel in turn
21 }
22 delay(1000);
23}
📄 File: 16-channel_12-bit_pwm/servo_driver_i2c_interface_pca9685_for_arduino_raspberry_pi_-_stm32.inoSTM32
546 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// I2C wiring for STM32: PB7=SDA, PB6=SCL
6#include <Wire.h>
7#include <Adafruit_PWMServoDriver.h>
8
9Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
10
11void setup() {
12 Serial.begin(115200);
13 Wire.begin();
14 pwm.begin();
15 pwm.setPWMFreq(50); // 50Hz for standard servos; use ~1500Hz for motor/LED PWM instead
16}
17
18void loop() {
19 for (int ch = 0; ch < 16; ch++) {
20 pwm.setPWM(ch, 0, 300); // ~1.5ms pulse - servo center position, on every channel in turn
21 }
22 delay(1000);
23}
📄 File: 16-channel_12-bit_pwm/servo_driver_i2c_interface_pca9685_for_arduino_raspberry_pi_-_raspberry_pi_pico.inoRaspberry Pi Pico
562 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// I2C wiring for Raspberry Pi Pico: GPIO4=SDA, GPIO5=SCL
6#include <Wire.h>
7#include <Adafruit_PWMServoDriver.h>
8
9Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
10
11void setup() {
12 Serial.begin(115200);
13 Wire.begin();
14 pwm.begin();
15 pwm.setPWMFreq(50); // 50Hz for standard servos; use ~1500Hz for motor/LED PWM instead
16}
17
18void loop() {
19 for (int ch = 0; ch < 16; ch++) {
20 pwm.setPWM(ch, 0, 300); // ~1.5ms pulse - servo center position, on every channel in turn
21 }
22 delay(1000);
23}
I2C 16-channel PWM driver - drives up to 16 servos (or LEDs/motors) from just 2 I2C pins.

Specification

Specification

WeightWeight1 g
Dimensions1 × 0,6 × 0,5 cm
ControllerPCA9685
Channels16
Resolution12-bit PWM
InterfaceI²C
Operating Voltage3.3–5V DC
MaterialPCB with electronic components
UsageServo control, LED dimming, robotics, Arduino/Raspberry Pi projects

Customer Reviews