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);

}

}