FPV motor 用 I2C 接 PCA9685 範例
2022/6/15
ESP32CAM 使用 I2C 來對接 PCA9685 來控制伺服馬達
// 使用 ESP32CAM I2C 來連接 PCA9685 控制 servo by Mason 2022/6/15
// FB : https://www.facebook.com/mason.chen.1420
// 使用 I2C 來連接 PCA9685 控制 servo
#include <Wire.h>
#define I2C_SDA 15 // 對接 PCA9685 - SDA
#define I2C_SCL 13 // 對接 PCA9685 - SCL
#include "esp_timer.h"
#include "img_converters.h"
#include "Arduino.h"
#include "fb_gfx.h"
#include "soc/soc.h" //disable brownout problems
#include "soc/rtc_cntl_reg.h" //disable brownout problems
#include "esp_http_server.h"
#include <EEPROM.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40);
// SG90 Servo PWM Pulse Traveling
const int PWMRES_Min = 0; // PWM Resolution 0
const int PWMRES_Max = 180; // PWM Resolution 180
const int SERVOMIN = 500; // 500
const int SERVOMAX = 2400; // 2400
int FREQ = 50;
void setup() {
Serial.begin(9600);
Wire.begin(I2C_SDA,I2C_SCL);
Wire.setClock(400000);
pwm.begin();
pwm.setPWMFreq(FREQ); // This is the maximum PWM frequency
}
void loop() {
for (int i=0; i<=180; i += 5) {
int pulse_len = int((float(i) / PWMRES_Max * (SERVOMAX - SERVOMIN) + SERVOMIN) / 1000000 * FREQ * 4096);
Serial.println(i);
Serial.println(pulse_len);
pwm.setPWM(0, 0, pulse_len); // 0 表示控制 PCA9685 CH0
delay(200);
}
}