最简单的ESP8266的Wifi智能小车车教程

一、准备材料(整套下接近80块钱了哦,主要电池贵,也可以用升压模块+充电宝代替【体积感人】)

1、esp8266 NodeMCU Lua V3 物联网开发板一个(CH340)                                        12.8

2、L298N 绿色版,红色版本需要5V的信号驱动,3.3V的板子无法驱动                          14.5

3、18650锂电池,12V2000mAh                                                                                       26.8

4、圆形智能小车底盘                                                                                                        14.68

5、杜邦线公对公、母对母、公对母各一打,跟着其他设备一起买包邮划算点                  10

二、接线方式,如图所示:

三、代码编写

#define ENA    5          // Enable/speed motors Right          GPIO 5(D1)
//#define ENA_2  4          // Enable/speed motors Right_2        GPIO 4(D2)
#define ENB    0          // Enable/speed motors Left           GPIO 0(D3)
//#define ENB_2  2          // Enable/speed motors Left_2         GPIO 2(D4)
#define IN_1  14          // L298N in1 motors Right             GPIO14(D5)
#define IN_2  12          // L298N in2 motors Right             GPIO12(D6)
#define IN_3  13          // L298N in3 motors Left              GPIO13(D7)
#define IN_4  15          // L298N in4 motors Left              GPIO15(D8)
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

/* Wifi ssid and pwd */
const char *ssid = "MY8266CAR";
const char *password = "12345678";

/* your car speed */
int speedCar = 450;         // 0 - 1023.
int speedInterval = 90;     //速度间隔
int speedTrun = 1.5;        //转弯系数

ESP8266WebServer server(80);
String webPage = "";

/* 192.168.4.1 */
void handleRoot() {
  server.send(200, "text/html", "<h1>You are connected</h1>");
}

void setup() {
  webPage += "<div align=\"center\"><h1>ESP8266 CAR</h1>";
  webPage += "<a href=\"FL\"><button style=\"height:200px;width:200px\"><font size=\"20\">FL</font></button></a>";
  webPage += "<a href=\"F2\"><button style=\"height:200px;width:200px\"><font size=\"20\">FW</font></button></a>";
  webPage += "<a href=\"FR\"><button style=\"height:200px;width:200px\"><font size=\"20\">FR</font></button></a><br>";
  webPage += "<a href=\"L2\"><button style=\"height:200px;width:200px\"><font size=\"20\">LT</font></button></a>";
  webPage += "<a href=\"S2\"><button style=\"height:200px;width:200px\"><font size=\"20\">ST</font></button></a>";
  webPage += "<a href=\"R2\"><button style=\"height:200px;width:200px\"><font size=\"20\">RT</font></button></a><br>";
  webPage += "<a href=\"BL\"><button style=\"height:200px;width:200px\"><font size=\"20\">BL</font></button></a>";
  webPage += "<a href=\"B2\"><button style=\"height:200px;width:200px\"><font size=\"20\">BC</font></button></a>";
  webPage += "<a href=\"BR\"><button style=\"height:200px;width:200px\"><font size=\"20\">BR</font></button></a></div>";
  webPage += "<div align=\"center\"><h1>SPEED CHANGE</h1>";
  webPage += "<a href=\"SE1\"><button style=\"height:200px;width:200px\"><font size=\"20\">1</font></button></a>";
  webPage += "<a href=\"SE2\"><button style=\"height:200px;width:200px\"><font size=\"20\">2</font></button></a>";
  webPage += "<a href=\"SE3\"><button style=\"height:200px;width:200px\"><font size=\"20\">3</font></button></a><br>";
  webPage += "<a href=\"SE4\"><button style=\"height:200px;width:200px\"><font size=\"20\">4</font></button></a>";
  webPage += "<a href=\"SE5\"><button style=\"height:200px;width:200px\"><font size=\"20\">5</font></button></a>";
  webPage += "<a href=\"SE6\"><button style=\"height:200px;width:200px\"><font size=\"20\">6</font></button></a><br>";
  webPage += "<a href=\"SE7\"><button style=\"height:200px;width:200px\"><font size=\"20\">7</font></button></a>";
  webPage += "<a href=\"SE8\"><button style=\"height:200px;width:200px\"><font size=\"20\">8</font></button></a>";
  webPage += "<a href=\"SE9\"><button style=\"height:200px;width:200px\"><font size=\"20\">9</font></button></a>";

  // preparing GPIOs
  pinMode(ENA, OUTPUT);
  //digitalWrite(ENA, 0);
  pinMode(ENB, OUTPUT);
  //digitalWrite(ENB, 0);
  pinMode(IN_1, OUTPUT);
  // digitalWrite(IN_1, 0);
  pinMode(IN_2, OUTPUT);
  // digitalWrite(IN_2, 0);
  pinMode(IN_3, OUTPUT);
  // digitalWrite(IN_3, 0);
  pinMode(IN_4, OUTPUT);
  // digitalWrite(IN_4, 0);

  Serial.begin(115200);
  WiFi.softAP(ssid, password);

  server.on("/", []() {
    server.send(200, "text/html", webPage);
  });
  server.on("/FL", []() {
    server.send(200, "text/html", webPage);
    FL();
  });
  server.on("/F2", []() {
    server.send(200, "text/html", webPage);
    F2();
  });
  server.on("/FR", []() {
    server.send(200, "text/html", webPage);
    FR();
  });
  server.on("/L2", []() {
    server.send(200, "text/html", webPage);
    L2();
  });
  server.on("/S2", []() {
    server.send(200, "text/html", webPage);
    S2();
  });
  server.on("/R2", []() {
    server.send(200, "text/html", webPage);
    R2();
  });
  server.on("/BL", []() {
    server.send(200, "text/html", webPage);
    BL();
  });
  server.on("/B2", []() {
    server.send(200, "text/html", webPage);
    B2();
  });
  server.on("/BR", []() {
    server.send(200, "text/html", webPage);
    BR();
  });

  server.on("/SE1", []() {
    server.send(200, "text/html", webPage);
    CS(1);
  });
  server.on("/SE2", []() {
    server.send(200, "text/html", webPage);
    CS(2);
  });
  server.on("/SE3", []() {
    server.send(200, "text/html", webPage);
    CS(3);
  });
  server.on("/SE4", []() {
    server.send(200, "text/html", webPage);
    CS(4);
  });
  server.on("/SE5", []() {
    server.send(200, "text/html", webPage);
    CS(5);
  });
  server.on("/SE6", []() {
    server.send(200, "text/html", webPage);
    CS(6);
  });
  server.on("/SE7", []() {
    server.send(200, "text/html", webPage);
    CS(7);
  });
  server.on("/SE8", []() {
    server.send(200, "text/html", webPage);
    CS(8);
  });
  server.on("/SE9", []() {
    server.send(200, "text/html", webPage);
    CS (9);
  });

  server.begin();
  Serial.println("HTTP server started");
}

/*******************************************/
void FL() {
  analogWrite(ENA, speedCar);
  analogWrite(ENB, speedCar / speedTrun);
  digitalWrite(IN_1, 0);
  digitalWrite(IN_2, 1);

  digitalWrite(IN_3, 0);
  digitalWrite(IN_4, 1);
}

void F2() {
  analogWrite(ENA, speedCar);
  analogWrite(ENB, speedCar);
  digitalWrite(IN_1, 0);
  digitalWrite(IN_2, 1);

  digitalWrite(IN_3, 0);
  digitalWrite(IN_4, 1);

}

void FR() {
  analogWrite(ENA, speedCar / speedTrun);
  analogWrite(ENB, speedCar);
  digitalWrite(IN_1, 0);
  digitalWrite(IN_2, 1);

  digitalWrite(IN_3, 0);
  digitalWrite(IN_4, 1);
}

void L2() {
  analogWrite(ENA, speedCar);
  analogWrite(ENB, speedCar);
  digitalWrite(IN_1, 0);
  digitalWrite(IN_2, 1);

  digitalWrite(IN_3, 1);
  digitalWrite(IN_4, 0);
}

void S2() {
  digitalWrite(IN_1, 0);
  digitalWrite(IN_2, 0);
  digitalWrite(IN_3, 0);
  digitalWrite(IN_4, 0);
}

void R2() {
  analogWrite(ENA, speedCar);
  analogWrite(ENB, speedCar);
  digitalWrite(IN_1, 1);
  digitalWrite(IN_2, 0);

  digitalWrite(IN_3, 0);
  digitalWrite(IN_4, 1);
}

void BL() {
  analogWrite(ENA, speedCar);
  analogWrite(ENB, speedCar / speedTrun);
  digitalWrite(IN_1, 1);
  digitalWrite(IN_2, 0);

  digitalWrite(IN_3, 1);
  digitalWrite(IN_4, 0);
}

void B2() {
  analogWrite(ENA, speedCar);
  analogWrite(ENB, speedCar);
  digitalWrite(IN_1, 1);
  digitalWrite(IN_2, 0);

  digitalWrite(IN_3, 1);
  digitalWrite(IN_4, 0);
}

void BR() {
  analogWrite(ENA, speedCar / speedTrun);
  analogWrite(ENB, speedCar);
  digitalWrite(IN_1, 1);
  digitalWrite(IN_2, 0);

  digitalWrite(IN_3, 1);
  digitalWrite(IN_4, 0);
}

void CS(int NUM) {
  speedCar = 1023 - (9 - NUM) * speedInterval;
  analogWrite(ENA, speedCar);
  analogWrite(ENB, speedCar);
}

/*******************************************/

void loop() {
  server.handleClient();
}

四、实际操作,上面控制方向,下面控制速度,界面很挫,我知道的

五、代码刷写

1、去多加几个8266的群获取arduino的软件,然后新建项目把代码抄过去,去B站看看8266的arduino教程,无非就是首选项添加8266的开发板网址,然后在工具里面开发板管理器里面安装8266的开发板,然后选择NodeMCU 12E的那个板子

2、安装python2.7,然后安装esptool.py,这个是擦除固件的,具体教程自己百度,然后用更改下面第一行路径,编程你自己的python位置,第二行更改一下你自己的端口号,然后复制到文本中,改后缀为bat,以后经常点这个bat清除板子的固件,说实在的我也啥也不懂,清就完事了

cd D:\Python2\Scripts
esptool.py --port COM8 erase_flash
pause

3、擦除完毕之后,将代码复制到arduino里面,然后编译,然后在工具里面选择端口号,然后上穿就行了,最后进度条不动了好了,然后你就可以在手机里面连上你的MY8266CAR,密码12345678,在浏览器输入192.168.4.1,开始玩车车吧!

4、一有擦除不了的或者擦出报错问题,把你的数据线拔了再插,插了再拔,插了再拔……,直到在设备管理器里面有端口号,同时可以擦除固件了

六、特别说明

1、接线需谨慎

2、代码里面的方法名称有点歪,不要随便改,有可能名称都让你控制不了车,我也不知道为啥

3、放心大胆的用12V转5V的那个插孔,放心岔的用

4、顺便说一下,轮子真的很low,那个电机是个圆柱状的,不是扁平的,跑着跑着轮子就飞出去了,要玩高级的,建议花200块买个金属车架,换个好电机,再加个前面带舵机转向的

猜你喜欢

转载自blog.csdn.net/gonepoo/article/details/107453041