×

通过Web服务器控制双直流电机和伺服电机

消耗积分:0 | 格式:zip | 大小:0.15 MB | 2023-06-09

孙成红

分享资料个

pcb图:
pYYBAGSBOb2AJ4BOAAE1BgPlQeE200.png
pYYBAGSBOb-AR5p0AABfaYTc0Wk801.png

描述

通过 Web 服务器控制双直流电机和伺服电机 - ESP8266 DRV8848 电机驱动板

在这个项目中,您将看到如何使用 ESP 构建一个 Web 服务器,该服务器使用四个按钮和一个滑块控制双直流电机方向和一个伺服电机位置。我将使用我上次设计的基于 ESP8266 的 DRV8848 电机驱动器开发板,但该项目的源代码兼容 L298N 和 L293D 等电机驱动器。

pYYBAGSBOciAHDswAABH8ySf5cM272.png

如果您需要一款可以驱动双直流电机的ESP8266 WiFi开发板,您可以从PCBWay订购这款PCB,质优价廉。您可以从链接中了解该板的特性,包括焊接和组装等所有阶段

https://www.pcbway.com/project/shareproject/ESP_12F_DRV88xx_Motor_Driver_Development_Board_bc4e7391.html

pYYBAGSBOcqACVVWAACBzSycKZE934.png

让我们看一下允许通过 Web 服务器控制直流电机方向和伺服电机位置的源代码。

添加了必要的 WiFi 和伺服库以使用 Arduino IDE。

 

#include  #include  #include  #include 

 

已创建名为“My Servo”的伺服对象。

 

伺服我的伺服;

 

定义了连接伺服电机和直流电机的 GPIO 引脚。

 

// 伺服器连接到 GPIO static const int servoPin = 0 ; //电机连接到 GPIO static const int M1forwardPin = 14 ; static const int M1backwardPin = 12 ; static const int M2forwardPin = 5 ; static const int M2backwardPin = 4 ; 静态常量int sleepPin = 16 ;

 

如果您的驱动器不包含“睡眠”引脚,请将“睡眠模式”行更改为注释行。

 

//static const int sleepPin = 16;

 

电机速度已定义,可根据需要进行更改。

 

#define M1SPEED 200 #define M2SPEED 200

 

用这些行替换您的网络详细信息。

 

const  char * ssid = "REPLACE_WITH_YOUR_SSID" ; const  char * password = "REPLACE_WITH_YOUR_PASSWORD" ;

 

创建了一个变量来存储 HTTP 请求的标头。

 

字符串头;

 

然后又创建了几个变量,用于从 HTTP 请求中提取滑块位置。

 

字符串值字符串 = 字符串( 5 ); int pos1 = 0 ; int pos2 = 0 ;

 

在“设置”部分,启动串行通信并指定连接引脚的模式。如果不使用“sleep pin”,则可以移除该线。

 

序列号.begin(115200); pinMode(M1forwardPin,输出);pinMode(M1backwardPin,输出);pinMode(M2forwardPin,输出);pinMode(M2backwardPin,输出);pinMode(sleepPin,输出);myServo.attach(servoPin); 数字写入(sleepPin,高);

 

然后 Wi-Fi 连接开始,IP 地址打印在串口监视器上。

 

串行。打印(“连接到”); 序列号.println(ssid); WiFi.begin(ssid, 密码); while (WiFi.status() != WL_CONNECTED) { delay( 500 ); 串行。打印(“。”); } // 打印本地IP 地址并启动 Web 服务器 Serial.println( "" ); Serial.println( “WiFi 已连接。” ); Serial.println( "IP地址:" ); Serial.println(WiFi.localIP()); 服务器.开始();

 

最后,在进入循环部分之前,为电机的移动和方向创建了函数。

 

void  forward ()  { analogWrite(M1forwardPin, M1SPEED); 模拟写入(M2forwardPin,M2SPEED);模拟写入(M1backwardPin, 0);模拟写入(M2backwardPin, 0);} void  backward ()  { analogWrite(M1backwardPin, M1SPEED); 模拟写入(M2backwardPin,M2SPEED);模拟写入(M1forwardPin, 0);模拟写入(M2forwardPin, 0);} void  turnLeft ()  { analogWrite(M1backwardPin, M1SPEED); 模拟写入(M2forwardPin,M2SPEED);模拟写入(M1forwardPin, 0);模拟写入(M2backwardPin, 0);} void 右转() { 模拟写入(M1forwardPin,M1SPEED);模拟写入(M2backwardPin,M2SPEED);模拟写入(M1backwardPin,0);模拟写入(M2forwardPin,0);} void  stopMotors ()  { analogWrite(M1forwardPin, 0 ); 模拟写入(M2forwardPin,0);模拟写入(M1backwardPin,0);模拟写入(M2backwardPin,0);}

 

在循环部分,定义了当新客户端首次与 Web 服务器建立连接时会发生什么。当从客户端收到请求时,传入的数据将被保存。只要客户端保持连接,后面的 while 循环就会运行。

 

WiFiClient client = server.available(); 如果(客户端){ currentTime = millis(); 上一个时间 = 当前时间;Serial.println( “新客户。” ); 字符串 currentLine = "" ; while (client.connected() && currentTime - previousTime <= timeoutTime) { currentTime = millis(); 如果(client.available()) { char c = client.read(); 串口.write(c); 标题 += c; 如果(c == '\n' ) {如果(currentLine.length() == 0 ) {

 

然后生成 Web 服务器并发送一些 HTML 文本以显示网页。使用“客户端打印”功能将网页发送到客户端。您必须输入要作为参数发送给客户端的内容。

 

client.println("HTTP/1.1 200 OK"); client.println("内容类型:文本/html"); client.println("连接:关闭"); 客户端.println(); // 显示 HTML 网页 client.println("  < html >< head >< meta  name = \ " viewport \" content = \ " width = device-width,  initial-scale = 1\ "> "); // 按钮和滑块的样式部分。您可以更改自定义设置,例如颜色等。client.println(" <样式> "); 客户。显示:块;弹性方向:列;对齐项目:居中;}"); client.println(".slider { width : 275px ; accent-color : #ede100 ; cursor : pointer;}"); client.println(".button-container { display : flex ; flex-direction : column; align-items : center;}"); client.println(".row-container { display : flex; flex-direction : row; justify-content : center; align-items : center;} "); client.println(".button {宽度: 135px ;边界:0;背景色:#ede100;框阴影:插图2px  2px  3px  #b2b2b2,插图 - 2px - 2px  3px  #000;填充:10px  25px;文本对齐:居中;显示:内联块;边界半径:5px;字体大小:16px;边距:10px  25px;光标:指针;}"); client.println(".button:hover {背景颜色:#fff200 ;}"); client.println(".button:active{ box-shadow : inset 2px  2px  3px  #000 , inset - 2px - 2px  3px  #b2b2b2 ;}"); client.println(" footer { text-align : center; margin : 50px ; width : 400px ; background-color : #ede100 ;}"); client.println("  style >>< script  src = \ " https: //ajax.googleapis . com /ajax / libs / jquery / 3.3.1 / jquery.min.js \">   " ) ; // 正文部分。包含按钮和滑块的功能。client.println(" <正文> "); client.println(" < div  class = \ "容器\"> "); client.println(" < div  class = \ " row-container \">< h2 > ESP8266电机控制面板 h2 >"); client.println(" < div >< div  class = \ " button-container \"> "); client.println(" < div  class = \ " row-container \">< button  class = \ "按钮\" id = \ " forward-btn \" onmousedown = \ " btnVal (' forward ')\" onmouseup = \ " btnVal ('停止')\">前进

 

" ) ;client.println(" < div class = \ " row-container \">< button class = \ " button \ " id = \ " left-btn \ " onmousedown = \ " btnVal (' left ' )\" onmouseup = \ " btnVal (' stop ' )\"> Left "); client.println("