Logo
活死人の行知路

Arduino IDE安装


📅 | 📝 531 字
#Arduino

1、下载

Arduino IDE 2.3.9

2、使用

  1. 默认打开界面

  2. 新建 sketch

    • File -> New Sketch

    • 选择开发板

    • 开发板搜索 esp32s3 dev,选择第一个

  3. 代码转换

    #include <stdio.h>
    
    // 程序入口函数(所有C语言程序都从main()函数开始执行)
    int main() {
       // 格式化输出函数,向控制台打印指定内容,\n表示换行符
    
       printf("Hello World!\n");
       printf("欢迎开始学习C语言!\n");
    
       // main函数返回0,表示程序正常结束
       return 0;
    }
    
    // Arduino程序不需要独立的main函数
    // setup()函数在板子启动时执行一次
    
    void setup() {
    // put your setup code here, to run once:
    // 初始化串口通信,设置波特率为9600
       Serial.begin(9600);
    
       // 打印信息到串口监视器
       Serial.println("Hello World!");
       Serial.println("欢迎开始学习 Arduino 语言!");
    }
    
    // loop()函数在setup()执行完后会不断循环执行
    void loop() {
    // put your main code here, to run repeatedly:
    // 这里什么都不做,因为只需要输出一次信息
    // 如果希望重复输出,可以在这里添加代码
    }
    
    • Veriry 结果:

3、舵机程序解读

#include <ESP32Servo.h>    

// 6个舵机连接的引脚
#define SERVO_PIN_1  17
#define SERVO_PIN_2  18
#define SERVO_PIN_3   8
#define SERVO_PIN_4  12
#define SERVO_PIN_5  39
#define SERVO_PIN_6  38

// 创建6个舵机对象
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;

void setup() {
  // 初始化串口,用于调试输出(可选)
  Serial.begin(115200);
  
  // 附加舵机到对应的引脚
  servo1.attach(SERVO_PIN_1);
  servo2.attach(SERVO_PIN_2);
  servo3.attach(SERVO_PIN_3);
  servo4.attach(SERVO_PIN_4);
  servo5.attach(SERVO_PIN_5);
  servo6.attach(SERVO_PIN_6);
  
  // 初始位置设为中间位置(90度)
  servo1.write(90);
  servo2.write(90);
  servo3.write(90);
  servo4.write(90);
  servo5.write(90);
  servo6.write(90);
  
  // 等待舵机到达初始位置
  delay(1000);
}

void loop() {
  // 所有舵机向上转动30度(从90度到120度)
  for (int angle = 90; angle <= 120; angle++) {
    servo1.write(angle);
    servo2.write(angle);
    servo3.write(angle);
    servo4.write(angle);
    servo5.write(angle);
    servo6.write(angle);
    delay(10); // 控制转动速度
  }
  
  // 短暂停顿
  delay(500);
  
  // 所有舵机向下转动30度(从120度到60度)
  for (int angle = 120; angle >= 60; angle--) {
    servo1.write(angle);
    servo2.write(angle);
    servo3.write(angle);
    servo4.write(angle);
    servo5.write(angle);
    servo6.write(angle);
    delay(10); // 控制转动速度
  }
  
  // 短暂停顿
  delay(500);
}

源码属于arudino的代码,用于控制6个舵机。现在将这个代码结构分为四个部分:

1.头文件引入和宏定义

#include <ESP32Servo.h>    

// 6个舵机连接的引脚
#define SERVO_PIN_1  17
#define SERVO_PIN_2  18
#define SERVO_PIN_3   8
#define SERVO_PIN_4  12
#define SERVO_PIN_5  39
#define SERVO_PIN_6  38

作用:

  • #include <ESP32Servo.h>:引入 ESP32 舵机控制库
  • ESP32Servo 的版本选择3.0.9

编译

出现错误:

alt text

/Users/finnley/workspace/Learning/ArduinoLearning/test-1/test-1.ino:1:10: fatal error: ESP32Servo.h: No such file or directory
    1 | #include <ESP32Servo.h>
      |          ^~~~~~~~~~~~~~
compilation terminated.
exit status 1

Compilation error: ESP32Servo.h: No such file or directory

分析:

这个错误提示 No such file or directory 意思是你的 Arduino IDE 找不到 ESP32Servo.h 这个文件,也就是说你的电脑上目前还没有安装这个专用于 ESP32 的舵机库。

解决步骤:

可以按照以下步骤在 Arduino IDE 中安装它:

🛠️ 解决步骤:安装 ESP32Servo 库

  1. 打开库管理器:
  • 如果你使用的是 Arduino IDE 2.x: 点击软件最左侧边栏的 “库管理器” 图标(看起来像一排书)。
  1. 搜索库文件: 在库管理器的搜索框中,输入 ESP32Servo 并回车。

  2. 找到并安装: 在搜索结果中往下翻,找到名为 ESP32Servo 的库(作者通常显示为 Kevin Harrington, John K. Bennett)。 点击它旁边的 安装 (Install) 按钮。 alt text

  3. 重新编译: 等待底部提示“安装成功”后,关闭库管理器。再次点击左上角的 验证 (Verify) 按钮(打钩 ✓ 的图标)重新编译代码。 alt text

alt text

安装完成后,代码就可以顺利通过编译并烧录到你的 ESP32-S3 开发板中了。

#include <ESP32Servo.h>

// 实例化6个舵机对象
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;

// 定义舵机连接的引脚
const int servoPin1 = 17;
const int servoPin2 = 18;
const int servoPin3 = 39;
const int servoPin4 = 38;
const int servoPin5 = 8;
const int servoPin6 = 12;

// 定义运动的角度参数
const int centerAngle = 90; // 中心初始位置
const int offsetAngle = 30; // 上下摆动的角度幅度
const int delayTime = 15;   // 每次角度微调的延迟时间(毫秒),决定摆动速度

void setup() {
  Serial.begin(115200);
  
  // ESP32Servo库建议分配定时器
  ESP32PWM::allocateTimer(0);
  ESP32PWM::allocateTimer(1);
  ESP32PWM::allocateTimer(2);
  ESP32PWM::allocateTimer(3);

  // 绑定舵机引脚
  // 通常标准舵机的脉宽范围是 500us 到 2500us
  servo1.attach(servoPin1, 500, 2500);
  servo2.attach(servoPin2, 500, 2500);
  servo3.attach(servoPin3, 500, 2500);
  servo4.attach(servoPin4, 500, 2500);
  servo5.attach(servoPin5, 500, 2500);
  servo6.attach(servoPin6, 500, 2500);

  // 将所有舵机初始化到90度
  Serial.println("初始化所有舵机至 90 度...");
  setAllServos(centerAngle);
  
  // 等待舵机转到初始位置
  delay(2000); 
}

void loop() {
  // 1. 从 90度 移动到 120度 (中心点 + 30度)
  for (int pos = centerAngle; pos <= centerAngle + offsetAngle; pos += 1) {
    setAllServos(pos);
    delay(delayTime);
  }

  // 2. 从 120度 移动到 60度 (经过中心点,直到 中心点 - 30度)
  for (int pos = centerAngle + offsetAngle; pos >= centerAngle - offsetAngle; pos -= 1) {
    setAllServos(pos);
    delay(delayTime);
  }

  // 3. 从 60度 移动回 90度 (回到中心点)
  for (int pos = centerAngle - offsetAngle; pos <= centerAngle; pos += 1) {
    setAllServos(pos);
    delay(delayTime);
  }
}

// 辅助函数:同时将所有舵机设置到指定角度
void setAllServos(int pos) {
  servo1.write(pos);
  servo2.write(pos);
  servo3.write(pos);
  servo4.write(pos);
  servo5.write(pos);
  servo6.write(pos);
}