/b》
網(wǎng)絡(luò)控制伺服電路圖
首先,將ESP8266與Arduino連接。我們使用適配器將esp8266與Arduino連接起來,這將使連接更加容易。適配器具有5至3.3V穩(wěn)壓器,您無需連接任何外部電阻。
將適配器的GND連接到Arduino的GND
將適配器的VCC連接到Arduino的5V電源
將RX從適配器連接到Arduino的引腳2
連接TX引腳從適配器連接到Arduino的引腳3
然后,將伺服電機(jī)連接到Arduino。將伺服電機(jī)與Arduino連接如下:
伺服電機(jī)的黑線連接到Arduino的GND引腳
伺服電機(jī)的紅線連接到Arduino的5V引腳
伺服電機(jī)的黃線到Arduino的引腳8
創(chuàng)建網(wǎng)頁
要通過網(wǎng)頁控制伺服電機(jī),我們必須使用HTML語言制作網(wǎng)頁。我們?yōu)轫?xiàng)目創(chuàng)建的HTML代碼可以從本文末尾下載。如果要重命名文件,請(qǐng)更改文件名,但確保文件名末尾有“.html”。
然后,下載JQUERY文件(也在下面給出)文章)并將此文件放在放置HTML文件的同一文件夾中。之后,打開HTML,網(wǎng)頁將如下所示:
現(xiàn)在,使用Wi更改Arduino代碼中的Wi-Fi名稱和密碼-Fi名稱和密碼。然后上傳代碼。打開串口監(jiān)視器,它將顯示IP地址,如下圖所示:
在網(wǎng)頁上指定的空白處輸入此IP地址?,F(xiàn)在,當(dāng)您移動(dòng)滑塊時(shí),伺服電機(jī)將移動(dòng)。
代碼
#include
#include
SoftwareSerial esp8266(2,3);
#define DEBUG true
#define sg90_pin 8
Servo sg90;
int current_position = 170;
int vel = 10;
int minimum_position = 20;
int maximum_position = 160;
void setup()
{
sg90.attach(sg90_pin);
sg90.write(maximum_position);
sg90.detach();
Serial.begin(9600);
esp8266.begin(9600);
esp8266Data(“AT+RST ”, 2000, DEBUG); //reset module
esp8266Data(“AT+CWMODE=1 ”, 1000, DEBUG); //set station mode
esp8266Data(“AT+CWJAP=\”Tenda_31BC98\“,\”barcelona\“ ”, 2000, DEBUG); //connect wifi network
while(!esp8266.find(“OK”)) { //wait for connection
}
esp8266Data(“AT+CIFSR ”, 1000, DEBUG);
esp8266Data(“AT+CIPMUX=1 ”, 1000, DEBUG);
esp8266Data(“AT+CIPSERVER=1,80 ”, 1000, DEBUG);
}
void loop()
{
if (esp8266.available())
{
if (esp8266.find(“+IPD,”))
{
String msg;
esp8266.find(“?”);
msg = esp8266.readStringUntil(‘ ’);
String command = msg.substring(0, 3);
String valueStr = msg.substring(4);
int value = valueStr.toInt();
if (DEBUG) {
Serial.println(command);
Serial.println(value);
}
delay(100);
//move servo1 to desired angle
if(command == “sr1”) {
//limit input angle
if (value 》= maximum_position) {
value = maximum_position;
}
if (value 《= minimum_position) {
value = minimum_position;
}
sg90.attach(sg90_pin); //attach servo
while(current_position != value) {
if (current_position 》 value) {
current_position -= 1;
sg90.write(current_position);
delay(100/vel);
}
if (current_position 《 value) {
current_position += 1;
sg90.write(current_position);
delay(100/vel);
}
}
sg90.detach(); //dettach
}
}
}
}
String esp8266Data(String command, const int timeout, boolean debug)
{
String response = “”;
esp8266.print(command);
long int time = millis();
while ( (time + timeout) 》 millis())
{
while (esp8266.available())
{
char c = esp8266.read();
response += c;
}
}
if (debug)
{
Serial.print(response);
}
return response;
}
代碼說明
首先,包括軟件序列和伺服的庫。軟件串行庫將幫助我們?cè)贏rduino的其他引腳上使用TX和RX通信。伺服庫將幫助我們輕松移動(dòng)伺服。之后,我們定義了從ESP8266連接RX和TX的引腳,然后我們定義了連接伺服電機(jī)的引腳。
之后,我們定義了從ESP8266連接RX和TX的引腳,然后我們定義了連接伺服電機(jī)的引腳。
#include
#include
SoftwareSerial esp8266(2,3);
#define DEBUG true
#define sg90_pin 8
然后在設(shè)置功能中,我們告訴Arduino我們將伺服電機(jī)連接到哪個(gè)引腳,我們將電機(jī)移動(dòng)到最大位置。然后我們?cè)O(shè)置串行通信的波特率和esp8266的波特率9600.根據(jù)esp8266的波特率設(shè)置esp8266的波特率。您的esp8266可能具有不同的波特率。
然后我們?cè)O(shè)置串行通信的波特率和ESP8266的波特率為9600.您需要根據(jù)ESP8266的波特率設(shè)置ESP8266的波特率。您的ESP8266可能具有不同的波特率。
sg90.attach(sg90_pin);
sg90.write(maximum_position);
sg90.detach();
Serial.begin(9600);
esp8266.begin(9600);
以下命令將ESP8266連接到Wi-Fi網(wǎng)絡(luò),并將網(wǎng)絡(luò)服務(wù)器設(shè)置為IP地址和端口。它將在上傳代碼后在串行監(jiān)視器中顯示。
esp8266Data(“AT+RST ”, 2000, DEBUG); //reset module
esp8266Data(“AT+CWMODE=1 ”, 1000, DEBUG); //set station mode
esp8266Data(“AT+CWJAP=\”Tenda_31BC98\“,\”barcelona\“ ”, 2000, DEBUG); //connect wifi network
while(!esp8266.find(“OK”)) { //wait for connection
}
esp8266Data(“AT+CIFSR ”, 1000, DEBUG);
esp8266Data(“AT+CIPMUX=1 ”, 1000, DEBUG);
esp8266Data(“AT+CIPSERVER=1,80 ”, 1000, DEBUG);
Arduino將查看數(shù)據(jù)是否可用。如果移動(dòng)了網(wǎng)頁上的滑塊,則ESP8266會(huì)根據(jù)移動(dòng)的滑塊將數(shù)據(jù)發(fā)送到Arduino。 Arduino根據(jù)ESP8266給出的值移動(dòng)伺服電機(jī)。
if (esp8266.available())
{
if (esp8266.find(“+IPD,”))
{
String msg;
esp8266.find(“?”);
msg = esp8266.readStringUntil(‘ ’);
String command = msg.substring(0, 3);
String valueStr = msg.substring(4);
int value = valueStr.toInt();
以下函數(shù)將命令發(fā)送到ESP8266,并在串行監(jiān)視器上打印ESP8266的響應(yīng)。
String esp8266Data(String command, const int timeout, boolean debug)
{
String response = “”;
esp8266.print(command);
long int time = millis();
while ( (time + timeout) 》 millis())
{
while (esp8266.available())
{
char c = esp8266.read();
response += c;
}
}
可下載代碼
jquery.js webservo.html
-
伺服電機(jī)
+關(guān)注
關(guān)注
85文章
2053瀏覽量
58034 -
Arduino
+關(guān)注
關(guān)注
188文章
6474瀏覽量
187444 -
ESP8266
+關(guān)注
關(guān)注
50文章
962瀏覽量
45182
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論