電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>通過Web服務(wù)器控制雙直流電機和伺服電機

通過Web服務(wù)器控制雙直流電機和伺服電機

2023-06-09 | zip | 0.15 MB | 次下載 | 免費

資料介紹

pcb圖:
pYYBAGSBOb2AJ4BOAAE1BgPlQeE200.png
pYYBAGSBOb-AR5p0AABfaYTc0Wk801.png

描述

通過 Web 服務(wù)器控制雙直流電機伺服電機 - ESP8266 DRV8848 電機驅(qū)動板

在這個項目中,您將看到如何使用 ESP 構(gòu)建一個 Web 服務(wù)器,該服務(wù)器使用四個按鈕和一個滑塊控制雙直流電機方向和一個伺服電機位置。我將使用我上次設(shè)計的基于 ESP8266 的 DRV8848 電機驅(qū)動器開發(fā)板,但該項目的源代碼兼容 L298N 和 L293D 等電機驅(qū)動器。

pYYBAGSBOciAHDswAABH8ySf5cM272.png

如果您需要一款可以驅(qū)動雙直流電機的ESP8266 WiFi開發(fā)板,您可以從PCBWay訂購這款PCB,質(zhì)優(yōu)價廉。您可以從鏈接中了解該板的特性,包括焊接和組裝等所有階段

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

pYYBAGSBOcqACVVWAACBzSycKZE934.png

讓我們看一下允許通過 Web 服務(wù)器控制直流電機方向和伺服電機位置的源代碼。

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

?

#include  #include  #include  #include 

?

已創(chuàng)建名為“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 ; 靜態(tài)常量int sleepPin = 16 ;

?

如果您的驅(qū)動器不包含“睡眠”引腳,請將“睡眠模式”行更改為注釋行。

?

//static const int sleepPin = 16;

?

電機速度已定義,可根據(jù)需要進行更改。

?

#define M1SPEED 200 #define M2SPEED 200

?

用這些行替換您的網(wǎng)絡(luò)詳細(xì)信息。

?

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

?

創(chuàng)建了一個變量來存儲 HTTP 請求的標(biāo)頭。

?

字符串頭;

?

然后又創(chuàng)建了幾個變量,用于從 HTTP 請求中提取滑塊位置。

?

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

?

在“設(shè)置”部分,啟動串行通信并指定連接引腳的模式。如果不使用“sleep pin”,則可以移除該線。

?

序列號.begin(115200); pinMode(M1forwardPin,輸出);pinMode(M1backwardPin,輸出);pinMode(M2forwardPin,輸出);pinMode(M2backwardPin,輸出);pinMode(sleepPin,輸出);myServo.attach(servoPin); 數(shù)字寫入(sleepPin,高);

?

然后 Wi-Fi 連接開始,IP 地址打印在串口監(jiān)視器上。

?

串行。打?。ā斑B接到”); 序列號.println(ssid); WiFi.begin(ssid, 密碼); while (WiFi.status() != WL_CONNECTED) { delay( 500 ); 串行。打印(“?!保? } // 打印本地IP 地址并啟動 Web 服務(wù)器 Serial.println( "" ); Serial.println( “WiFi 已連接。” ); Serial.println( "IP地址:" ); Serial.println(WiFi.localIP()); 服務(wù)器.開始();

?

最后,在進入循環(huán)部分之前,為電機的移動和方向創(chuàng)建了函數(shù)。

?

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 右轉(zhuǎn)() { 模擬寫入(M1forwardPin,M1SPEED);模擬寫入(M2backwardPin,M2SPEED);模擬寫入(M1backwardPin,0);模擬寫入(M2forwardPin,0);} void  stopMotors ()  { analogWrite(M1forwardPin, 0 ); 模擬寫入(M2forwardPin,0);模擬寫入(M1backwardPin,0);模擬寫入(M2backwardPin,0);}

?

在循環(huán)部分,定義了當(dāng)新客戶端首次與 Web 服務(wù)器建立連接時會發(fā)生什么。當(dāng)從客戶端收到請求時,傳入的數(shù)據(jù)將被保存。只要客戶端保持連接,后面的 while 循環(huán)就會運行。

?

WiFiClient client = server.available(); 如果(客戶端){ currentTime = millis(); 上一個時間 = 當(dāng)前時間;Serial.println( “新客戶?!?); 字符串 currentLine = "" ; while (client.connected() && currentTime - previousTime <= timeoutTime) { currentTime = millis(); 如果(client.available()) { char c = client.read(); 串口.write(c); 標(biāo)題 += c; 如果(c == '\n' ) {如果(currentLine.length() == 0 ) {

?

然后生成 Web 服務(wù)器并發(fā)送一些 HTML 文本以顯示網(wǎng)頁。使用“客戶端打印”功能將網(wǎng)頁發(fā)送到客戶端。您必須輸入要作為參數(shù)發(fā)送給客戶端的內(nèi)容。

?

client.println("HTTP/1.1 200 OK"); client.println("內(nèi)容類型:文本/html"); client.println("連接:關(guān)閉"); 客戶端.println(); // 顯示 HTML 網(wǎng)頁 client.println("  < html >< head >< meta  name = \ " viewport \" content = \ " width = device-width,  initial-scale = 1\ "> "); // 按鈕和滑塊的樣式部分。您可以更改自定義設(shè)置,例如顏色等。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;文本對齊:居中;顯示:內(nèi)聯(lián)塊;邊界半徑:5px;字體大?。?6px;邊距:10px  25px;光標(biāo):指針;}"); 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("