| 
 
| 使用网页控制L298N电机前言本项目最终目标是实现Firebeetle 2 ESP32-S3 的实时摄像头小车制作,请参考: 所需材料
Firebeetle2 ESP32-S3L298N模块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/14L298N IN4:Firebeetle 2 ESP32-s3的D11/13L298N GND:Firebeetle 2 ESP32-s3的GND + 外接5V电源的负极L298N 12V:外接5V电源的正极
  完整代码#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() {
  // 在这里可以执行其他操作
}
 代码说明
引入所需的库: 
#include <WiFi.h>: 导入用于连接Wi-Fi网络的库。#include <ESPAsyncWebServer.h>: 导入异步Web服务器库,用于处理Web请求和响应。
定义Wi-Fi连接信息: 
const char *ssid = "eva";: 设置Wi-Fi网络的SSID(网络名称)。const char *password = "12345678";: 设置Wi-Fi网络的密码。
定义引脚连接: 
const int motorDirection1 = 13;: 指定连接到L298N电机驱动模块的IN1引脚的Arduino引脚号。const int motorDirection2 = 14;: 指定连接到L298N电机驱动模块的IN2引脚的Arduino引脚号。
创建AsyncWebServer对象: 
AsyncWebServer server(80);: 创建一个基于ESPAsyncWebServer库的Web服务器对象,监听端口80。
设置电机状态变量: 
bool motorRunning = false;: 创建一个布尔变量motorRunning,用于跟踪电机的运行状态。
setup()函数:
 
配置引脚:
pinMode(motorDirection1, OUTPUT);和pinMode(motorDirection2, OUTPUT);设置motorDirection1和motorDirection2引脚为输出模式,以便控制电机的方向。初始化串行通信:
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地址。
设置路由和Web页面: 
使用 server.on("/", HTTP_GET, ...)创建根路由处理程序。此路由用于处理根目录的HTTP GET请求。在处理程序中,生成一个包含HTML界面的字符串,显示电机控制按钮。按钮通过JavaScript函数调用与电机的控制状态交互。通过内联JavaScript函数 startMotorForward(),startMotorBackward(), 和stopMotor()启动或停止电机,并通过fetch发送HTTP请求来控制电机。最后,使用 request->send(200, "text/html", html);发送HTML响应。
创建三个额外的路由: 
/startForward,/startBackward, 和/stopMotor分别用于控制电机的正转、反转和停止操作。这些路由的处理程序使用 digitalWrite控制引脚状态,并通过HTTP响应返回状态信息。
启动服务器: 
server.begin();启动Web服务器,开始监听来自客户端的HTTP请求。
loop()函数:
 总之,这段代码创建了一个通过Wi-Fi连接的Web服务器,允许用户通过浏览器控制一个电机的运动方向。通过点击按钮,用户可以启动正转、反转和停止电机的运动。这是一个简单的示例,可以扩展和改进以适应更复杂的项目。 成果
 点击对应按钮启动电机
 
  | 
 | 
|  | 
|
|  | 
|  |  |