Esp8266,L298N手机遥控车

1.前言

这个是从YouTube上搬运来的,如图所示
在这里插入图片描述

2.资料

2.1原理图

1.因为单片机提供的电流不足以驱动电机,所以需要驱动电路,也就是L298N;
2.接线图如下图和表格所示,其中9V电池可以用3.3V的;

在这里插入图片描述
对应接线图
在这里插入图片描述

2.2程序源码

/*
Code Name: Arduino Wifi Control Car 
Code URI: https://circuitbest.com/category/arduino-projects/
Additional Board Manager URL: http://arduino.esp8266.com/stable/package_esp8266com_index.json 
Install: ESP8266 by ESP8266 Community
Author: Make DIY
Author URI: https://circuitbest.com/author/admin/
Description: This program is used to control a robot using a app
that communicates with Arduino through a ESP8266 Module.
App URI: https://drive.google.com/file/d/1pvtWsTeXhcJdpHMfGlFmbGDuH7eoLfoP/view?usp=sharing
Version: 2.0
License: Remixing or Changing this Thing is allowed. Commercial use is not allowed.
*/


#define ENA   14          // Enable/speed motors Right        GPIO14(D5)
#define ENB   12          // Enable/speed motors Left         GPIO12(D6)
#define IN_1  15          // L298N in1 motors Rightx          GPIO15(D8)
#define IN_2  13          // L298N in2 motors Right           GPIO13(D7)
#define IN_3  2           // L298N in3 motors Left            GPIO2(D4)
#define IN_4  0           // L298N in4 motors Left            GPIO0(D3)

#include <ESP8266WiFi.h>
#include <WiFiClient.h> 
#include <ESP8266WebServer.h>

String command;             //String to store app command state.
int speedCar = 800;         // 400 - 1023.
int speed_Coeff = 3;

const char* ssid = "Make DIY";
ESP8266WebServer server(80);

void setup() {
 
 pinMode(ENA, OUTPUT);
 pinMode(ENB, OUTPUT);  
 pinMode(IN_1, OUTPUT);
 pinMode(IN_2, OUTPUT);
 pinMode(IN_3, OUTPUT);
 pinMode(IN_4, OUTPUT); 
  
  Serial.begin(115200);
  
// Connecting WiFi

  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid);

  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);
 
 // Starting WEB-server 
     server.on ( "/", HTTP_handleRoot );
     server.onNotFound ( HTTP_handleRoot );
     server.begin();    
}

void goAhead(){ 

      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
      analogWrite(ENB, speedCar);
  }

void goBack(){ 

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
      analogWrite(ENB, speedCar);
  }

void goRight(){ 

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
      analogWrite(ENB, speedCar);
  }

void goLeft(){

      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
      analogWrite(ENB, speedCar);
  }

void goAheadRight(){
      
      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);
      analogWrite(ENA, speedCar/speed_Coeff);
 
      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
      analogWrite(ENB, speedCar);
   }

void goAheadLeft(){
      
      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
      analogWrite(ENB, speedCar/speed_Coeff);
  }

void goBackRight(){ 

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);
      analogWrite(ENA, speedCar/speed_Coeff);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
      analogWrite(ENB, speedCar);
  }

void goBackLeft(){ 

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
      analogWrite(ENB, speedCar/speed_Coeff);
  }

void stopRobot(){  

      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, LOW);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, LOW);
      analogWrite(ENB, speedCar);
 }

void loop() {
    server.handleClient();
    
      command = server.arg("State");
      if (command == "F") goAhead();
      else if (command == "B") goBack();
      else if (command == "L") goLeft();
      else if (command == "R") goRight();
      else if (command == "I") goAheadRight();
      else if (command == "G") goAheadLeft();
      else if (command == "J") goBackRight();
      else if (command == "H") goBackLeft();
      else if (command == "0") speedCar = 400;
      else if (command == "1") speedCar = 470;
      else if (command == "2") speedCar = 540;
      else if (command == "3") speedCar = 610;
      else if (command == "4") speedCar = 680;
      else if (command == "5") speedCar = 750;
      else if (command == "6") speedCar = 820;
      else if (command == "7") speedCar = 890;
      else if (command == "8") speedCar = 960;
      else if (command == "9") speedCar = 1023;
      else if (command == "S") stopRobot();
}

void HTTP_handleRoot(void) {

if( server.hasArg("State") ){
       Serial.println(server.arg("State"));
  }
  server.send ( 200, "text/html", "" );
  delay(1);
}

2.3 APP下载

https://wwdy.lanzouf.com/ibIId0s6mnhc
密码:d5k6

3. 原视频信息

https://www.youtube.com/watch?v=o_AvH5nuwLg

  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 要使用ESP8266控制L298N直流电机,需要连接以下引脚: 1. ESP8266的GPIO引脚连接到L298N的IN1和IN2引脚,用于控制电机的正反转。 2. ESP8266的PWM引脚连接到L298N的ENA和ENB引脚,用于控制电机的速度。 3. ESP8266的GND引脚连接到L298N的GND引脚,用于共地。 在代码中,需要使用ESP8266的GPIO库和PWM库来控制电机。可以使用digitalWrite函数来控制IN1和IN2引脚,使用analogWrite函数来控制ENA和ENB引脚。 以下是一个简单的示例代码: #include <ESP8266WiFi.h> const int IN1 = 5; // IN1引脚连接到ESP8266的GPIO5 const int IN2 = 4; // IN2引脚连接到ESP8266的GPIO4 const int ENA = 14; // ENA引脚连接到ESP8266的PWM引脚D5 const int ENB = 12; // ENB引脚连接到ESP8266的PWM引脚D6 void setup() { pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT); } void loop() { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); analogWrite(ENA, 255); // 电机转速最大值为255 analogWrite(ENB, 255); delay(500); // 等待5秒 digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); analogWrite(ENA, 255); analogWrite(ENB, 255); delay(500); } 这个示例代码会让电机先正转5秒,然后反转5秒,循环执行。可以根据需要修改电机的转速和转动时间。 ### 回答2: ESP8266是一款广泛使用的基于Wi-Fi的芯片,而L298N则是一款普遍用于直流电机的驱动器。将两者结合在一起,可以实现方便而灵活的电机控制。 首先,我们需要确保ESP8266L298N之间的接线正确。ESP8266可以使用GPIO口来输出控制信号,而L298N则需要连接到ESP8266的三个不同引脚(IN1,IN2和EN),以接收相应的控制信号。此外,我们还需要将L298N连接到适当电源,并将DC电机连接到L298N的输出。 接下来,我们需要编写ESP8266中的代码,以控制L298N并驱动DC电机。该代码可通过许多编程语言来实现,但我们将使用Arduino(或类似)平台来编写代码。以下是一个基本的示例代码,它将以指定速度旋转电机: ``` int enablePin = 0; //连接到EN引脚 int in1Pin = 2; //连接到IN1引脚 int in2Pin = 3; //连接到IN2引脚 int speed = 255; //设置电机转速(0-255之间) void setup() { pinMode(enablePin, OUTPUT); pinMode(in1Pin, OUTPUT); pinMode(in2Pin, OUTPUT); } void loop() { digitalWrite(in1Pin, HIGH); digitalWrite(in2Pin, LOW); analogWrite(enablePin, speed); } ``` 在上面的代码中,我们首先定义了一些变量,以表示ESP8266连接到L298N的引脚和电机的速度。在`setup()`函数中,我们将每个引脚配置为输出。在`loop()`函数中,我们设置IN1为HIGH和IN2为LOW,这对应于将电流引入L298N的一个方向。然后,我们调用`analogWrite()`函数,将指定的速度发送到EN引脚,以驱动电机。 请注意,上述代码仅介绍了基本的电机控制。如果要停止电机,需要将IN1和IN2设置为相同的值(例如,两者都为HIGH或两者都为LOW)。要反转电机运动方向,则需要将IN1和IN2的值互换,并将速度值设置为负值,以便将电流引向另一个方向。 总的来说,ESP8266L298N的结合提供了一种强大的控制方法,可用于许多直流电机应用。通过合理地连接和编程这些组件,可以轻松地控制电机的运动、速度和方向。 ### 回答3: ESP8266靠近互联网,能够直接连接到互联网,实现控制、数据采集和传输。L298N直流电机由于具有广泛的应用范围,成为众多开发者的选择。我们可以使用ESP8266来控制L298N直流电机,从而实现智能控制。 ESP8266控制L298N直流电机需要注意以下几个方面: 首先,我们需要了解L298N直流电机控制板的工作原理。L298N直流电机控制板可以通过两个输入端口来控制直流电机的方向和速度。通过对三个引脚(ENA,ENB和PWM)的控制,可以控制直流电机的旋转方向和转速。 其次,我们需要准备好所需的硬件设备。除了ESP8266L298N直流电机控制板之外,还需要使用电池、直流电机、杜邦线和面包板等。 接着,我们需要连接硬件设备。将ESP8266L298N直流电机控制板通过杜邦线连接起来,连接顺序为IN1至IN4,ENA和ENB,PWM。将电池正极连接到L298N直流电机控制板VCC端口,将电池负极连接到L298N直流电机控制板GND端口。 最后,我们需要编写程序代码来实现控制。首先使用ESP8266连接WiFi网络,然后下载和安装ESP8266的驱动程序和Arduino库。编写程序控制L298N直流电机旋转方向,可以使用 digitalWrite()函数和analogWrite()函数来控制电机速度。 总之,ESP8266控制L298N直流电机需要掌握相关的知识和技能,如硬件的连接和编程代码的编写。在有关方面进行了深入了解和培训后,控制L298N直流电机将变得更加容易。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值