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號