ESP32 + PCA9685(16通道 PWM 扩展模块)来驱动多个 9g 舵机
PCA9685的引脚定义等详细信息参考这个链接
接线参考
| PCA9685 引脚 | 接线说明 |
|---|---|
| VCC | 接 ESP32 的 3.3V |
| GND | 接 ESP32 的 GND |
| SDA | 接 ESP32 的 SDA(例如 GPIO21) |
| SCL | 接 ESP32 的 SCL(例如 GPIO22) |
| V+ | 接舵机电源 5V(推荐独立供电) |
通常这些插槽的排布是这样的(以常见的 3 排舵机接口为例):
每个插槽从左到右:
[ GND | V+ | PWM ]
所以插入舵机时:
- 棕色/黑色线(GND) → 接 GND
- 红色线(VCC) → 接 V+(舵机电源,推荐 5V 外部电源)
- 黄色/橙色线(信号/PWM) → 接 PWM 通道输出
通道编号说明
第 0 路(通道 0)
第 1 路(通道 1)
......
第 16 路(通道 16)
你可以在代码中直接操作1~ 16号通道控制16个舵机。
示例代码:控制左边 4 个舵机
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
#define SERVO_MIN 150
#define SERVO_MAX 600
int angleToPulse(int angle) {
return map(angle, 0, 180, SERVO_MIN, SERVO_MAX);
}
void setup() {
Serial.begin(115200);
Wire.begin(21, 22); // ESP32 默认 I2C
pwm.begin();
pwm.setPWMFreq(50); // 50Hz 是舵机控制标准
delay(1000);
}
void loop() {
// 控制 0~3 四个舵机来回摆动
for (int angle = 0; angle <= 180; angle += 5) {
for (int ch = 0; ch < 4; ch++) {
pwm.setPWM(ch, 0, angleToPulse(angle));
}
delay(30);
}
for (int angle = 180; angle >= 0; angle -= 5) {
for (int ch = 0; ch < 4; ch++) {
pwm.setPWM(ch, 0, angleToPulse(angle));
}
delay(30);
}
}
有些同学可能会想要了解实现这个控制的底层封装 or 对寄存器的操作?etc 这里不多赘述了!

浙公网安备 33010602011771号