Skip to content

嵌入式单片机 ESP32 Arduino 遥控小车(wifi版)

Notifications You must be signed in to change notification settings

liyinchigithub/esp32-wroom-car

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 

Repository files navigation

基于ESP32 开发板(MCU)遥控小车

嵌入式单片机ESP32Arduino 遥控小车(蓝牙版)

image

材料

ESP32主板1个、步进器1个(电机驱动)、3.7V电池1个(18000mAh)、车身架1个、2个轮胎和2个小马达、跳线若干。

小车主板

  • image

一、ESP32 NodeMCU 单片机

image

拓展板

由于ESP32引脚数量有限,使用拓展板来引出更多引脚

引脚图

esp32 wroom

Arduino IDE 安装ESP32Audio库

  1. 打开Arduino IDE。

  2. 在菜单栏中,选择Sketch -> Include Library -> Manage Libraries...。

  3. 在弹出的库管理器窗口中,输入ESP32库到搜索框中。

  4. 在搜索结果中找到ESP32,点击Install按钮进行安装。

选择开发板

  1. 打开Arduino IDE。

  2. 安装开发板

image
  1. 在菜单栏中,选择工具 -> 开发板 -> 选择 ESP32 Dev Module 或者ESP32-WROOM-DAModule
image image

选择端口

烧入程序引导

image

驱动安装

image

二、(可变速)L2898N直流电机(步进器电机驱动板)

L298N电机驱动板通常需要四个控制引脚来驱动一个双电机:

  • 两个用于控制电机A的方向,另外两个用于控制电机B的方向。
  • 还有两个使能引脚(一个用于电机A,一个用于电机B),可以用来控制电机的速度,通常通过PWM信号实现。
  1. OUT1和OUT2 电池1、OUT3和OUT4 电池2
  1. 12V电源正极(暂不用)、GND电源负极接到esp32电源负极 、+5V接到esp32电源正极极
  1. ENA:电机1PWM调速引脚

注意:不使用调速引脚,那两个塑料不要拔起来,拔起来后需要用“母对母”跳线连接

  1. ENB:电机2PWM调速引脚
  1. IN1和IN2:电机1 正反转/停止控制
  1. IN3和IN4:电机2 正反转/停止控制
  • image
  • image

8.左右电机控制

9.引脚对接

(1)esp32

L298N引脚 ESP32引脚
IN1 23
IN2 22
IN3 19
IN4 18
ENA 21
ENB 5

(2)esp8266

B站视频1 B站视频2

三、(不可变速)L9110S直流电机(步进器电机驱动板)

遥控按钮

虚拟网页按键

1.程序烧入ESP32主板后,生成wifi热点:“遥控小车”; 2.使用手机或平板连接热点密码:12345678 3.浏览器地址:http://192.168.4.1

image

实体键

要实现一个ESP32作为遥控器端(esp32_wroom_car_client.ino),需要连接4个按钮到ESP32的GPIO引脚,并且当按钮被按下时,发送HTTP POST请求到另一个作为服务器端的ESP32(esp32_wroom_car_server.ino)。

  1. 连接每个按钮的一个引脚到ESP32的GPIO引脚,另一个引脚连接到GND。
  2. 在客户端代码中配置WiFi连接,以便它可以连接到服务器端ESP32创建的热点。
  3. 为每个按钮设置GPIO引脚模式为输入,并启用内部上拉电阻。
  4. 在主循环中检测按钮是否被按下,并发送相应的HTTP POST请求到服务器端。

常见问题

一、如果你已经将引脚设置为高电平,但是马达没有运动,可能有以下几个原因:

解决办法:

  1. 电流不足:ESP32的GPIO引脚只能提供很小的电流(大约12mA),这可能不足以驱动马达。可能需要一个马达驱动器或者一个适当的晶体管来放大电流。

  2. 连接问题:检查你的马达是否正确连接到ESP32和电源。

  3. 马达问题:你的马达可能有问题。试着用另一个马达,或者直接用电源给马达供电,看看马达是否能运动。使用专门的马达控制板(如L293D或者L298N)来驱动你的马达。

  4. 代码问题:检查你的代码是否正确设置了GPIO引脚为输出模式,并且设置了高电平。

二、引脚不够

解决办法:使用esp32 wroom 30pin 拓展板

三、不想使用USB type-c 数据线烧入

解决办法:使用usb to tll 引脚连接esp32

在连接ESP32-WROOM模块到USB to TTL转换器时,你需要按照以下方式连接引脚:

  • 3V3 (或标记为VCC的USB to TTL转换器上的3.3V输出) 连接到ESP32的3V3引脚。
  • GND (地线) 连接到ESP32的GND引脚。
  • RXD (接收数据) 连接到ESP32的TXD引脚(通常是GPIO3)。
  • TXD (发送数据) 连接到ESP32的RXD引脚(通常是GPIO1)。

确保连接时不要接错RXD和TXD,因为RXD接收数据,应该连接到ESP32的发送引脚(TXD),反之亦然。此外,不要将5V连接到ESP32,因为这可能会损坏模块。

四、调小旋转的幅度

要调整旋转的幅度,可以通过修改controlCarWithJoystick函数中判断摇杆位置的阈值来实现。

代码中,摇杆的X轴值小于1700时判断为左转,大于2400时判断为右转。你可以将这些阈值调整得更接近中心值(通常为2048),以减小识别为旋转的幅度。

例如,可以将阈值调整为:

  • 左转的阈值从1700调整为1900
  • 右转的阈值从2400调整为2200

这样,只有当摇杆更接近极端位置时,才会触发旋转命令,从而减小旋转的幅度。

修改后的controlCarWithJoystick函数如下:

void controlCarWithJoystick() {
  int xValue = analogRead(joystickXPin); // 读取X轴值
  int yValue = analogRead(joystickYPin); // 读取Y轴值
  bool buttonPressed = digitalRead(joystickButtonPin) == LOW; // 读取按钮状态

  // 根据摇杆位置决定动作
  if (yValue < 1700) { // 前进
    Serial.println("前进");
    sendCommand(3);
  } else if (yValue > 2400) { // 后退
    Serial.println("后退");
    sendCommand(5);
  } else if (xValue < 1900) { // 左转
    Serial.println("");
    sendCommand(1);
  } else if (xValue > 2200) { // 右转
    Serial.println("");
    sendCommand(2);
  }
  else if (buttonPressed) { // 按钮被按下
    sendStopCommand();
  } 
  else {
    sendStopCommand(); // 摇杆在中间位置时停止
  }
}

About

嵌入式单片机 ESP32 Arduino 遥控小车(wifi版)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages