Esp32-S3电机驱动器——Arduino IDE编程

一.概述

我们提供基于Arduino平台的ESP32示例代码,提供了蓝牙手柄、ps2手柄的无线连接示例,以及对直流电机、舵机、编码器电机、电压传感器、陀螺仪和OLED显示屏等设备的使用案例。

我们使用PlatformIO环境对各种类型的遥控器和的电机控制做了一些具体实现,可以找客服要源码。

二.基础准备

1.下载并安装Arduino IDE

Arduino新手程序安装三板斧

2.下载库文件

3.导入库文件

项目 – 导入库 – 添加.ZIP库,选择上一步下载的压缩包

Esp32-S3电机驱动器——Arduino IDE编程

如果后期库有更新,您可以先在目录C:\Users\yourName\Documents\Arduino\libraries 目录下删除文件夹QGP_EVMotor,然后再次导入库即可实现更新。

4.使用示例代码

选择 文件 – 示例 – QGP_EVMotor,可以看到有多个示例文件,打开任意一个,另存在你的工作目录

5.烧录

请使用usb线Type-C端插在开发板上,Type-A端插在电脑上

选择 工具 – 开发板 – esp32 下选择开发板“ESP32S3 Dev Module”

然后点击下图中的红框,选择正确的USB端口,就可以上传程序了

Esp32-S3电机驱动器——Arduino IDE编程

三.代码分析——蓝牙手柄

1.引用库文件

#include "StickCB.h"

2.定义全局变量

BLEControlStick _joy;

3.初始化

void setup() 
{
  Serial.begin(115200);
  // 初始化蓝牙手柄
  _joy.setStickCallback(new StickCB());
  _joy.begin();
  Serial.println("启动完毕");
}

4.使用

void loop() 
{
  _joy.update();
  if (_joy.Button(BTN_DPAD_UP))
  {
    //按下向上键时...
  }else if (_joy.Button(BTN_DPAD_DOWN))
  {
    //按下向下键...
  }
}

5.遥控器按键对照图

Esp32-S3电机驱动器——Arduino IDE编程

四.代码分析——直流电机

1.引用库文件

#include "EMotionPI.h"

2.定义全局变量

EMotionPI emo;
/**定义4个普通电机*/
EMO_DCMotor *enMotor1=emo.getMotor(M1);
EMO_DCMotor *enMotor2=emo.getMotor(M2);
EMO_DCMotor *enMotor3=emo.getMotor(M3);
EMO_DCMotor *enMotor4=emo.getMotor(M4);

3.使用电机

void loop() 
{
  _joy.update();

  //按遥控器的上、下键
  if (_joy.Button(BTN_DPAD_UP))
  {
    // 4个电机向前转
    enMotor1->run(FORWARD); enMotor1->setSpeed(100);
    enMotor2->run(FORWARD); enMotor2->setSpeed(100);
    enMotor3->run(FORWARD); enMotor3->setSpeed(100);
    enMotor4->run(FORWARD); enMotor4->setSpeed(100);
  }else if (_joy.Button(BTN_DPAD_DOWN))
  {
    //4个电机向后转
    enMotor1->run(BACKWARD); enMotor1->setSpeed(100);
    enMotor2->run(BACKWARD); enMotor2->setSpeed(100);
    enMotor3->run(BACKWARD); enMotor3->setSpeed(100);
    enMotor4->run(BACKWARD); enMotor4->setSpeed(100);
  }
}

4.代码解释

enMotor1->run(BACKWARD); 控制电机转向,FORWARD前进 BACKWARD后退;

enMotor1->setSpeed(100); 控制电机转速,取值0至100,注意部分电机数值过低可能会转不动;

enMotor1->brake(100); 电机主动刹车,取值0至少100。

五.代码分析——舵机控制

1.引用库文件

#include "EMotionPI.h"

2.定义全局变量

/**定义4个舵机*/

EMO_Servo* servo1=emo.getServo(S1);

EMO_Servo* servo2=emo.getServo(S2);

EMO_Servo* servo3=emo.getServo(S3);

EMO_Servo* servo4=emo.getServo(S4);

3.使用舵机

void loop() 
{
  _joy.update();

  //舵机1
  if (_joy.Button(BTN_DPAD_UP))
  {
    if(servo1->read() < 175)
      servo1->write(servo1->read()+1);
  }else if (_joy.Button(BTN_DPAD_DOWN))
  {
    if(servo1->read() > 5)
      servo1->write(servo1->read()-1);
  }
}

4.代码解释

servo1->read(); 读取舵机当前角度;

servo1->write(100); 控制舵机旋转角度,具体数值请不要大于你舵机支持的角度。

六.代码分析——编码器电机

1.引用库文件

#include "EMotionPI.h"

2.定义全局变量

EMotionPI emo;
/**定义4个编码器电机*/
EMO_EncoderMotor *enMotor1=emo.getEncoderMotor(M1);
EMO_EncoderMotor *enMotor2=emo.getEncoderMotor(M2);
EMO_EncoderMotor *enMotor3=emo.getEncoderMotor(M3);
EMO_EncoderMotor *enMotor4=emo.getEncoderMotor(M4);

3.初始化

void setup() 
{
  Serial.begin(115200);
  // 初始化蓝牙手柄
  _joy.setStickCallback(new StickCB());
  _joy.begin();
  delay(100);
  emo.begin();
  enMotor1->begin(90);  //该电机齿数比是1:90
  enMotor2->begin(90);
  enMotor3->begin(90);
  enMotor4->begin(90);
  Serial.println("启动完毕");
}

4.使用

void loop() 
{
  _joy.update();
 
  int speed = 0;
  //左侧摇杆控制车子前进后退 
  if (_joy.Analog(BPSS_LY) < 125)
  {
    speed = map(_joy.Analog(BPSS_LY), 125, 0, 30, cur_speed);
    enMotor1->run(FORWARD); enMotor1->setSpeed(100);   //控制电机先前转
    enMotor2->run(FORWARD); enMotor2->setSpeed(100);
    enMotor3->run(FORWARD); enMotor3->setSpeed(100);
    enMotor4->run(FORWARD); enMotor4->setSpeed(100);
  }else if (_joy.Analog(BPSS_LY) > 130){
    speed = map(_joy.Analog(BPSS_LY), 130, 255, 30, cur_speed);  
    enMotor1->run(BACKWARD); enMotor1->setSpeed(100);
    enMotor2->run(BACKWARD); enMotor2->setSpeed(100);
    enMotor3->run(BACKWARD); enMotor3->setSpeed(100);
    enMotor4->run(BACKWARD); enMotor4->setSpeed(100);
  }
  if(millis() - gp_time > 1000){
    gp_time = millis();
    int rpm = enMotor1->getRPM();
    long pos = enMotor1->getEncoderPos();
    float laps = pos/48;
    Serial.printf("转速: %d/min,",enMotor1->getRPM());
    Serial.printf("位置: %d,",enMotor1->getEncoderPos());
    Serial.printf("第 %0.f圈 \n",laps);
  }
}

5.代码解释

enMotor1->getRPM() 获取当前电机的转速,单位是:圈/分钟;

enMotor1->getEncoderPos() 获取当前电机的位置,传感器一圈有48个触点,无论正传还是反转,每触发1个触点就自增1,因此霍尔感器检测到48时电机刚好转一圈。

原创文章,作者:奇果派,如若转载,请注明出处:https://www.7gp.cn/archives/1409

(4)
上一篇 2025年4月24日 下午5:41
下一篇 2025年4月26日 下午5:41

相关推荐

  • Esp32-S3电机驱动器——硬件文档

    一、概述 这是基于Esp32平台开发智能小车的完美解决方案 开发板内置了Esp32-S3模组,32位 LX7 双核处理器,支持 240MHz 的时钟频率,集成Wi-Fi &…

    2025年4月26日
  • 【奇果派】金属版麦克纳姆轮小车安装教程

    示例程序下载:点击下载 电机驱动器详细资料请访问:《Arduino MotorShiled电机驱动器说明》

    2022年3月11日
  • 视频车组装教程-带4G模块

    【奇果派】视频遥控小车安装教程-带4G模块 点击查看开发板资料 下载App 目前仅支持安卓版App 4G版-步骤1: 配对车子 如购买的是4G版套餐,发货清单会有一个4G通讯模组,…

    2024年5月31日
  • 程序烧录工具

    一.概述 该工具是针对奇果派驱动板提供的程序烧录功能,您可以在不写代码的情况下刷上我们的示例代码。 注意,该工具仅可在windows上运行,支持我们的几款主要产品:Arduino …

    2025年3月1日
  • I2C五路巡线模块LineFollowerArray5s使用说明

    介绍 该巡线模块由I2C接口通讯,不占用开发板额外端口。模块包含5路巡线传感器。预留2路IO接口,支持INPUT/OUTPUT,可用于扩展IO端口使用。 注意: 硬件总览 原理图(…

    2021年1月11日
  • 树莓派电机驱动板

    一、概述 这是基于树莓派制作运动机器人非常完美的解决方案,这款电机驱动器足够强大,可以驱动4个直流电机或2个步进电机,并且额外提供4路全速PWM控制,可以控制4路舵机。自带稳压电路…

    2021年1月2日
  • 奇果派S1机甲战车使用手册

    安装发射器 安装底座 底盘安装 《麦克纳轮V2底盘安装》 麦克纳姆轮车架底盘安装请访问以上链接 集成版底盘车架的安装 发射器接线注意事项: 发射器电流比较大,电源供电功率需要足够大…

    2021年1月11日
  • MotorShiled电机驱动器 – Arduino

    这是基于Arduino开发运动机器人非常完美的解决方案,这款电机驱动器足够强大,可以驱动4个直流电机或2个步进电机,并且额外提供8路全速PWM控制,可以控制8路舵机。支持PS2无线手柄,充分发挥PS2手柄的强大功能。

    2024年11月6日
  • 16路PWM舵机驱动板(PCA9685)的使用说明(更新中)

    一、概述 用Arduino类库驱动舵机并不是一件难事,如果需要驱动很多电机,就需要要占用更多的引脚,也会影响到Arduino的处理能力。专门的舵机驱动板很好的解决了这个问题。 此舵…

    2021年1月4日
  • Esp32-S3电机驱动器——物联网远程控制

    一.概述 本片介绍物联网协议Mqtt控制设备 需要准备Mixly米思奇和我们的S3驱动板,米思奇的安装配置请参考下方链接 二.米思奇代码 1.下载的插件文件夹先解压,然后打开Exa…

    2025年3月30日