esp8266和pca9685连接,点灯科技控制

本人新入门人一枚,想用点灯科技控制esp8266控制两个舵机,但是3.3v带不动舵机,又添加了pca9685舵机控制板,找了资料没发现有先前的案例,但找了两个相似的代码,本人对代码不太了解,求兄弟帮我把两串代码整合一下

这是esp8266控制pca9685的代码
借鉴网址:https://blog.csdn.net/freewebsys/article/details/104139532


#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

// 这样调用时,它使用默认地址0x40 
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
// 你也可以用你想要的其他地址呼叫它
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x41);
#define SERVOMIN  150 // 这是“最小”脉冲长度计数 (out of 4096)
#define SERVOMAX  600 // 这是“最大”脉冲长度计数 (out of 4096)
 
// our servo # counter
//uint8_t servonum = 0;

void setup() {
   Serial.begin(9600);
   Serial.println("16 channel Servo test!");

  pwm.begin();
   
   pwm.setPWMFreq(60);  // 模拟伺服在~60 Hz更新时运行
 }

// 如果您想设置脉冲长度(以秒为单位),可以使用此函数
// e.g. setServoPulse(0, 0.001) is a ~1 millisecond pulse width. its not precise!
 void setServoPulse(uint8_t n, double pulse) {
   double pulselength;// 
   
   pulselength = 1000000;   // 1,000,000 us per second 
   pulselength /= 60;   // 60 Hz
   Serial.print(pulselength); Serial.println(" us per period"); 
   pulselength /= 4096;  // 12 bits of resolution 12 
   Serial.print(pulselength); Serial.println(" us per bit"); 
   pulse *= 1000;
   pulse /= pulselength;
   Serial.println(pulse);
   pwm.setPWM(n, 0, pulse);
}

void loop() {
   // Drive each servo one at a time
   //Serial.println(servonum);
     for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) {
     pwm.setPWM(0, 0, pulselen);
     pwm.setPWM(1, 0, pulselen);
     pwm.setPWM(2, 0, pulselen);
     pwm.setPWM(3, 0, pulselen);
     pwm.setPWM(4, 0, pulselen);
     pwm.setPWM(5, 0, pulselen);
     pwm.setPWM(6, 0, pulselen);
     pwm.setPWM(7, 0, pulselen);
     pwm.setPWM(8, 0, pulselen);
     pwm.setPWM(9, 0, pulselen);
     pwm.setPWM(10, 0, pulselen);
     pwm.setPWM(11, 0, pulselen);
     pwm.setPWM(12, 0, pulselen);
     pwm.setPWM(13, 0, pulselen);
     pwm.setPWM(14, 0, pulselen);
     pwm.setPWM(15, 0, pulselen);
   }
   delay(500);
   for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--) {
     pwm.setPWM(0, 0, pulselen);
     pwm.setPWM(1, 0, pulselen);
     pwm.setPWM(2, 0, pulselen);
     pwm.setPWM(3, 0, pulselen);
     pwm.setPWM(4, 0, pulselen);
     pwm.setPWM(5, 0, pulselen);
     pwm.setPWM(6, 0, pulselen);
     pwm.setPWM(7, 0, pulselen);
     pwm.setPWM(8, 0, pulselen);
     pwm.setPWM(9, 0, pulselen);
     pwm.setPWM(10, 0, pulselen);
     pwm.setPWM(11, 0, pulselen);
     pwm.setPWM(12, 0, pulselen);
     pwm.setPWM(13, 0, pulselen);
     pwm.setPWM(14, 0, pulselen);
     pwm.setPWM(15, 0, pulselen);
   }
   delay(5000);

}


这是点灯科技通过esp8266控制舵机的代码
借鉴网址:https://blog.csdn.net/weixin_44695217/article/details/121429305?spm=1001.2014.3001.5502

//整体效果是:滑块控制舵机的位置(0~180),按下按键舵机到达指定位置。
//如果只是由滑块控制舵机详细操作见代码!
#include <Servo.h> 
#define BLINKER_WIFI
 
#include <Blinker.h>
 
char auth[] = "d670f6a1ee59";  //点灯Key
char ssid[] = "Mi_5G";      //wifi名称
char pswd[] = "999999999";     //wifi密码
 
// 新建组件对象(按键+滑块)
BlinkerButton Button1("btn-max");   //位置1 按钮 数据键名
BlinkerButton Button2("btn-close");
BlinkerSlider Slider1("max-num");   //位置1 滑块 数据键名  范围0-180
Servo myservo;
 
int servo_max=180;
int servo_close=0;  

void button1_callback(const String & state) {    //位置1 按钮
    BLINKER_LOG("get button state: ", servo_max);
    myservo.write(servo_max);
    digitalWrite(D3, HIGH); 
    Blinker.vibrate();
}

void button2_callback(const String & state) {    //位置1 按钮
    BLINKER_LOG("get button state: ", servo_close);
    myservo.write(servo_close);
    digitalWrite(D3, LOW); 
    Blinker.vibrate();
    
}
  
void slider1_callback(int32_t value)
{
  BLINKER_LOG("get slider value: ", value);
    servo_max = value;
    Slider1.color("#1E90FF");
    Slider1.print();
    //digitalWrite(D3, value);
    myservo.write(value);//如果包含这句,APP中的按键是不起作用的,只有滑块管用。
}
 
void setup() {
    Serial.begin(115200);    
    BLINKER_DEBUG.stream(Serial);
    Blinker.begin(auth, ssid, pswd);
    Button1.attach(button1_callback);
    Button2.attach(button2_callback);
    Slider1.attach(slider1_callback);
    myservo.attach(D2);
    myservo.write(10);
    pinMode(D3, OUTPUT); 
}
 
void loop() {
  Blinker.run();
 }

其实可以在舵机控制引脚给个上拉电阻,提高驱动能力试试