34949浏览
查看: 34949|回复: 0

[ESP8266/ESP32] Firebeetle 2 ESP32-S3 新手笔记3-带你学会用网页服务器控制电机

[复制链接]

使用网页控制L298N电机

前言

本项目最终目标是实现Firebeetle 2 ESP32-S3 的实时摄像头小车制作,请参考:

所需材料

  • Firebeetle2 ESP32-S3
  • L298N模块
  • TT马达
  • 计算机(用于编程)
  • Arduino IDE

准备工作

了解硬件

L298N电机驱动介绍

L298N电机驱动是一种常用的电机控制模块,用于控制直流电机的转动和方向。它提供了双H桥电路,允许您独立控制两台直流电机。

基本原理

L298N电机驱动的核心原理是通过调整电流方向和大小,控制连接到它的电机的旋转方向和速度。这是通过H桥电路实现的,其中包括四个开关(通常是晶体管或MOSFET)。

使用场景

L298N电机驱动非常适合用于小型机器人、遥控车、自动门和其他需要控制电机的项目。它允许您通过编程控制电机的运动,包括正转、反转和速度控制。

引脚配置

通常,L298N电机驱动模块有以下引脚:

  • EN (Enable):用于启用或禁用电机驱动。通常,将其连接到Arduino的数字引脚以启用或禁用电机。

  • IN1和IN2:这两个引脚用于控制第一个电机的方向。通过将它们设置为不同的状态,您可以使电机正转、反转或停止。

  • IN3和IN4:这两个引脚用于控制第二个电机的方向,工作方式与IN1和IN2相同。

  • OUT1、OUT2、OUT3和OUT4:这些引脚用于连接到电机的正极和负极,以控制电机的转向。

硬件连接

  • L298N OUT3:马达红(红黑不代表正负,电机没有正负)
  • L298N OUT4:马达黑
  • L298N IN3:Firebeetle 2 ESP32-s3的D10/14
  • L298N IN4:Firebeetle 2 ESP32-s3的D11/13
  • L298N GND:Firebeetle 2 ESP32-s3的GND + 外接5V电源的负极
  • L298N 12V:外接5V电源的正极
    Firebeetle 2 ESP32-S3 新手笔记3-带你学会用网页服务器控制电机图2

完整代码

#include <WiFi.h>
#include <ESPAsyncWebServer.h>

const char *ssid = "eva";
const char *password = "12345678";

const int motorDirection1 = 13;  // 连接到L298N模块的IN1引脚
const int motorDirection2 = 14;  // 连接到L298N模块的IN2引脚

AsyncWebServer server(80);

bool motorRunning = false;

void setup() {
  pinMode(motorDirection1, OUTPUT);
  pinMode(motorDirection2, OUTPUT);

  // 初始化串行通信
  Serial.begin(115200);

  // 连接到Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println(WiFi.localIP());

  // 设置路由
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
    String html = "<html><body>";
    html += "<h1>Motor Control</h1>";

    // 检查电机状态并显示相应的按钮
    if (motorRunning) {
      html += "<p>Motor is running. <button onmouseup='stopMotor()'>Stop</button></p>";
    } else {

      html += "<p><button onmousedown='startMotorForward()' ontouchstart='startMotorForward()' onmouseup='stopMotor()' ontouchend='stopMotor()'>Forward</button></p>";
      html += "<p><button onmousedown='startMotorBackward()' ontouchstart='startMotorBackward()' onmouseup='stopMotor()' ontouchend='stopMotor()'>Backward</button></p>";
    }

    html += "<script>function startMotorForward() {";
    html += "  motorRunning = true;";
    html += "  fetch('/startForward');";
    html += "}";

    html += "function startMotorBackward() {";
    html += "  motorRunning = true;";
    html += "  fetch('/startBackward');";
    html += "}";

    html += "function stopMotor() {";
    html += "  motorRunning = false;";
    html += "  fetch('/stopMotor');";
    html += "}";

    html += "</script>";

    html += "</body></html>";
    request->send(200, "text/html", html);
  });

  server.on("/startForward", HTTP_GET, [](AsyncWebServerRequest *request) {
    digitalWrite(motorDirection2, LOW);
    digitalWrite(motorDirection1, HIGH);
    request->send(200, "text/plain", "Motor Forward");
  });

  server.on("/startBackward", HTTP_GET, [](AsyncWebServerRequest *request) {
    digitalWrite(motorDirection1, LOW);
    digitalWrite(motorDirection2, HIGH);
    request->send(200, "text/plain", "Motor Backward");
  });

  server.on("/stopMotor", HTTP_GET, [](AsyncWebServerRequest *request) {
    digitalWrite(motorDirection1, LOW);
    digitalWrite(motorDirection2, LOW);
    request->send(200, "text/plain", "Motor Stopped");
  });

  // 启动服务器
  server.begin();
}

void loop() {
  // 在这里可以执行其他操作
}

代码说明

  1. 引入所需的库:

    • #include <WiFi.h>: 导入用于连接Wi-Fi网络的库。
    • #include <ESPAsyncWebServer.h>: 导入异步Web服务器库,用于处理Web请求和响应。
  2. 定义Wi-Fi连接信息:

    • const char *ssid = "eva";: 设置Wi-Fi网络的SSID(网络名称)。
    • const char *password = "12345678";: 设置Wi-Fi网络的密码。
  3. 定义引脚连接:

    • const int motorDirection1 = 13;: 指定连接到L298N电机驱动模块的IN1引脚的Arduino引脚号。
    • const int motorDirection2 = 14;: 指定连接到L298N电机驱动模块的IN2引脚的Arduino引脚号。
  4. 创建AsyncWebServer对象:

    • AsyncWebServer server(80);: 创建一个基于ESPAsyncWebServer库的Web服务器对象,监听端口80。
  5. 设置电机状态变量:

    • bool motorRunning = false;: 创建一个布尔变量 motorRunning,用于跟踪电机的运行状态。
  6. setup() 函数:

    • 配置引脚:
      • pinMode(motorDirection1, OUTPUT);pinMode(motorDirection2, OUTPUT); 设置 motorDirection1motorDirection2 引脚为输出模式,以便控制电机的方向。
    • 初始化串行通信:
      • Serial.begin(115200); 启动串行通信,用于在串行监视器上打印调试信息。
    • 连接到Wi-Fi:
      • WiFi.begin(ssid, password); 启动Wi-Fi连接,使用指定的SSID和密码。
      • 使用 while (WiFi.status() != WL_CONNECTED) 等待Wi-Fi连接成功,期间每隔1秒输出连接状态信息。
      • 一旦连接成功,通过 Serial.println(WiFi.localIP()) 打印ESP32的局域网IP地址。
  7. 设置路由和Web页面:

    • 使用 server.on("/", HTTP_GET, ...) 创建根路由处理程序。此路由用于处理根目录的HTTP GET请求。
    • 在处理程序中,生成一个包含HTML界面的字符串,显示电机控制按钮。按钮通过JavaScript函数调用与电机的控制状态交互。
    • 通过内联JavaScript函数 startMotorForward(), startMotorBackward(), 和 stopMotor() 启动或停止电机,并通过 fetch 发送HTTP请求来控制电机。
    • 最后,使用 request->send(200, "text/html", html); 发送HTML响应。
  8. 创建三个额外的路由:

    • /startForward, /startBackward, 和 /stopMotor 分别用于控制电机的正转、反转和停止操作。
    • 这些路由的处理程序使用 digitalWrite 控制引脚状态,并通过HTTP响应返回状态信息。
  9. 启动服务器:

    • server.begin(); 启动Web服务器,开始监听来自客户端的HTTP请求。
  10. loop() 函数:

    • 此函数通常为空,允许您在主循环中执行其他操作。

总之,这段代码创建了一个通过Wi-Fi连接的Web服务器,允许用户通过浏览器控制一个电机的运动方向。通过点击按钮,用户可以启动正转、反转和停止电机的运动。这是一个简单的示例,可以扩展和改进以适应更复杂的项目。

成果



点击对应按钮启动电机
Firebeetle 2 ESP32-S3 新手笔记3-带你学会用网页服务器控制电机图1
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail