PCA9685的引脚定义等详细信息参考这个链接
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 600int angleToPulse(int angle) {return map(angle, 0, 180, SERVO_MIN, SERVO_MAX);
}void setup() {Serial.begin(115200);Wire.begin(21, 22); // ESP32 默认 I2Cpwm.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 这里不多赘述了!
