这篇文章中,我们将在 Arduino 和 Wi-Fi 模块 ESP8266 的帮助下使用 Web 浏览器控制伺服电机。ESP8266 将通过 IP
地址在舵机和网页浏览器之间建立连接,然后通过移动网页上的滑块,舵机就会相应地移动。即使通过在路由器中设置端口转发,您也可以通过互联网从世界任何地方控制
Servo,我们将在本教程后面进行解释。
所需组件:
本项目中使用的组件如下
伺服 (sg90)
Arduino Uno
无线模组 ESP8266
三个 1K 电阻器
连接线
电路图和连接:
首先,我们将 ESP8266 与 Arduino 连接起来。ESP8266 以 3.3V 运行,如果您从 Arduino 为其提供
5V,那么它将无法正常工作,并且可能会损坏。将VCC和CH_PD连接到Arduino的3.3V引脚。ESP8266 的 RX 引脚在 3.3V
下工作,当我们将其直接连接到 Arduino 时,它不会与 Arduino
通信。因此,我们将不得不为它制作一个分压器,将5V转换为3.3V。这可以通过串联三个电阻来完成,就像我们在电路中所做的那样。通过电阻将 ESP8266 的 TX
引脚连接到 Arduino 的引脚 4,将 ESP8266 的 RX 引脚连接到 Arduino 的引脚 5。
ESP8266 Wi-Fi 模块可让您的项目访问 Wi-Fi
或互联网。这是一个非常便宜的设备,使您的项目非常强大。它可以与任何微控制器通信,是物联网平台中最领先的设备。在此处了解有关将 ESP8266 与 Arduino
配合使用的更多信息。
然后将伺服电机与Arduino连接。伺服电机与Arduino的连接非常容易。将伺服电机的VCC和接地引脚连接到5V,将Arduino的接地以及伺服电机的信号引脚连接到Arduino的引脚9。
如何运行它:
要运行它,您必须创建一个将打开网页的 HTML
文件。为此,您必须复制下面给定的HTML代码(向下检查)并将其保存在记事本中。文件末尾应该有“.html”,表示文件必须以“.html”扩展名保存。因此,如果要将文件命名为“servo”,那么它应该为“servo.html”,以便可以轻松地在Web浏览器中打开它。
在此之后,您必须将 jQuery 文件放在放置 html
文件的同一文件夹中。你可以从这里下载HTML文件和jQuery,提取这个zip文件并直接使用它们。jQuery是Java脚本的库,它有许多JS函数,这使得DOM操作(文档对象模型),事件处理和Ajax的使用易于使用。
现在在 Web 浏览器中打开 html 文件,它将如下所示。
现在将Arduino代码粘贴到Arduino
IDE中,并使用您的Wi-Fi网络名称和密码更改Wi-Fi的名称和密码,然后上传代码。您将在串行监视器中获得一个IP地址。在网页上的框中键入此 IP
地址。现在,当您移动滑块时,伺服将根据滑块移动。因此,这就是您使用网页控制伺服的方法。
此Web控制伺服的完整Arduino代码在下面的代码部分中给出。首先,我们将包括软件串行和伺服库。如果您没有这些库,请在上传代码之前安装它。然后定义我们连接 ESP8266 的引脚。“DEBUG true”将在串行监视器上显示 ESP8266 的消息。然后定义伺服引脚并为伺服声明一个变量。
#include <SoftwareSerial.h>
#include <Servo.h>
SoftwareSerial esp(4, 5); //set ESP8266 RX pin = 5, and TX pin = 4
#define DEBUG true //display ESP8266 messages on Serial Monitor
#define servopin 9 //servo 1 on digital port 9
Servo ser; //servo 1
然后告诉Arduino我们已经将舵机连接到哪个引脚并将其设置为最大位置。然后将串行监视器和 ESP8266 的波特率设置为“115200”。
ser.attach(servopin);
ser.write(maxpos);
ser.detach();
Serial.begin(115200);
esp.begin(115200);
下面的代码会将 ESP8266 连接到您在代码中输入的路由器的 Wi-Fi,并告诉您它将与网页通信并接收数据的 IP 地址。
sendData("AT+RST\r\n", 2000, DEBUG); //reset module
sendData("AT+CWMODE=1\r\n", 1000, DEBUG); //set station mode
sendData("AT+CWJAP=\"Arsenal\",\"12345678\"\r\n", 2000, DEBUG); //connect wifi network
while(!esp.find("OK")) { //wait for connection
}
sendData("AT+CIFSR\r\n", 1000, DEBUG); //show IP address
sendData("AT+CIPMUX=1\r\n", 1000, DEBUG); //allow multiple connections
sendData("AT+CIPSERVER=1,80\r\n", 1000, DEBUG); //start web server on port 80
在 void loop() 函数中,ESP8266 会检查数据是否到达。如果数据到达,那么它将读取此数据并将其显示在串行监视器上,并且还将根据此数据移动伺服器。
if (esp.available()) //check if there is data available on ESP8266
{
if (esp.find("+IPD,")) //if there is a new command
{
String msg;
esp.find("?"); //run cursor until command is found
msg = esp.readStringUntil(' '); //read the message
String command = msg.substring(0, 3); //command is informed in the first 3 characters "sr1"
String valueStr = msg.substring(4); //next 3 characters inform the desired angle
int value = valueStr.toInt(); //convert to integer
if (DEBUG) {
Serial.println(command);
Serial.println(value);
}
最后,sendData 函数用于将命令发送到 ESP8266 并检查其响应。
String sendData(String command, const int timeout, boolean debug)
{
String response = "";
esp.print(command);
long int time = millis();
while ( (time + timeout) > millis())
{
while (esp.available())
{
char c = esp.read();
response += c;
}
}
if (debug)
{
Serial.print(response);
}
return response;
}
我们已经设置了一个本地服务器来演示其工作,您可以查看下面的 视频 。但是要从任何地方控制伺服,您需要将端口 80(用于 HTTP 或互联网)转发到设备的本地或私有 IP 地址 (192.168*)。端口转发后,所有传入的连接都将转发到此本地地址,您只需打开给定的HTML文件并在网页上的文本框中输入互联网的公共IP地址即可。您可以通过登录路由器 (192.168.1.1) 并找到设置端口转发的选项来转发端口。
更多回帖