合宙esp32c3驱动32路舵机

合宙esp32c3驱动32路舵机

一、安装环境搭建
1、链接:https://pan.baidu.com/s/1NRc4zPPBh0nfEncortR9-w?pwd=1234
提取码:1234
打开Arduino,选择“文件”->‘首选项’

在附加开发板管理器网址输入:https://www.arduino.cn/package_esp32_index.json

点击下方位置,打开缓存目录:
C:\Users\Administrator\AppData\Local\Arduino15

下载离线包,并将其移动到目录:
C:\Users\Administrator\AppData\Local\Arduino15\staging\packages

选择:‘工具’->‘开发板’->‘开发板管理器…’

在搜索框输入:‘ESP’->找到ESP32->选择2.0.4版本->安装->等待安装完成即可

测试程序:先安装Adafruit_PWM库

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

// 创建PCA9685对象
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40, Wire);
Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x41, Wire);
// 定义舵机的最小和最大脉冲宽度(通常舵机的范围是500-2500微秒)
#define SERVOMIN 0 // 舵机最小脉冲宽度(微秒)
#define SERVOMAX 185 // 舵机最大脉冲宽度(微秒)

// 定义舵机频道(PCA9685有16个通道,这里假设使用第0个通道)
#define SERVO_CHANNEL 0
int date = 0 ;
void setup() {
Serial.begin(9600);

// 初始化I2C总线
Wire.begin(4,5);
// 初始化PCA9685
pwm1.begin();
// 设置PWM频率
pwm1.setPWMFreq(60); // 舵机通常工作在60Hz
pwm2.begin();
// 设置PWM频率
pwm2.setPWMFreq(60); // 舵机通常工作在60Hz
}

void loop() {
// for (int i = 0; i <= 180; i++) {
// 计算当前角度的脉冲宽度
// int pulsewidth = map(i, 0, 180, SERVOMIN, SERVOMAX);
date=((4096*((18011)+500)/(20000)+0.5));
// 发送脉冲宽度到舵机
// pwm.setPWM(SERVO_CHANNEL, 0, date);
// Serial.println(date);
// delay(100); // 等待1秒
// }
delay(1000);
// for (int i = 180; i >= 0; i–) {
// 计算当前角度的脉冲宽度
// int pulsewidth = map(i, 0, 180, SERVOMIN, SERVOMAX);
// 发送脉冲宽度到舵机
// date = ((4096
((0*180)+500)/(20000)+0.5));
// 发送脉冲宽度到舵机
pwm1.setPWM(SERVO_CHANNEL, 0, 80);
pwm1.setPWM(2, 0, 80);
pwm2.setPWM(15, 0, 80);
pwm2.setPWM(14, 0, 80);
// Serial.println(date);
//delay(100); // 等待1秒
// }
delay(1000);
date = ((500-80)/2);
pwm1.setPWM(SERVO_CHANNEL, 0, 180);
pwm1.setPWM(2, 0, 180);
pwm2.setPWM(15, 0, 180);
pwm2.setPWM(14, 0, 180);
// Serial.println(date);

delay(1000);
//date = ((4096*((0*180)+500)/(20000)+0.5));
pwm1.setPWM(SERVO_CHANNEL, 0, 500);
pwm1.setPWM(2, 0, 500);
pwm2.setPWM(15, 0, 500);
pwm2.setPWM(14, 0, 500);
// Serial.println(date);
delay(1000);
}
2、地址扫描程序:
#include “Wire.h”

void setup() {
Serial.begin(115200);
Wire.begin(4,5);
}

void loop() {
byte error, address;
int nDevices = 0;

delay(5000);

Serial.println(“Scanning for I2C devices …”);
for(address = 0x01; address < 0x7f; address++){
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0){
Serial.printf(“I2C device found at address 0x%02X\n”, address);
nDevices++;
} else if(error != 2){
Serial.printf(“Error %d at address 0x%02X\n”, error, address);
}
}
if (nDevices == 0){
Serial.println(“No I2C devices found”);
}
}

#define SERVOMIN 102 // 舵机最小脉冲宽度(微秒)
#define SERVOMIN 202 // 舵机最小脉冲宽度(微秒)

#define SERVOMAX 507 // 舵机最大脉冲宽度(微秒)

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
//控制灯亮和灭,每秒一次
// 创建PCA9685对象
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40, Wire);
Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x41, Wire);
// 定义舵机的最小和最大脉冲宽度(通常舵机的范围是500-2500微秒)
#define SERVOMIN 0 // 舵机最小脉冲宽度(微秒)
#define SERVOMAX 185 // 舵机最大脉冲宽度(微秒)

// 定义舵机频道(PCA9685有16个通道,这里假设使用第0个通道)
#define SERVO_CHANNEL 0
int date = 0 ;
void setup() {
Serial.begin(9600);

// 初始化I2C总线
Wire.begin(4, 5);
// 初始化PCA9685
pwm1.begin();
// 设置PWM频率
pwm1.setPWMFreq(60); // 舵机通常工作在60Hz
pwm2.begin();
// 设置PWM频率
pwm2.setPWMFreq(60); // 舵机通常工作在60Hz
}

void loop() {

delay(1000);

pwm1.setPWM(0, 0, 4095); // 4095是12位分辨率下的最大值,对应最大占空比,LED全亮
pwm1.setPWM(1, 0, 4095);
pwm2.setPWM(15, 0, 4095);
pwm2.setPWM(14, 0, 4095); // 4095是12位分辨率下的最大值,对应最大占空比,LED全亮

delay(1000);

pwm1.setPWM(0, 0, 0);
pwm1.setPWM(1, 0, 0);
pwm2.setPWM(15, 0, 0);
pwm2.setPWM(14, 0, 0);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值