电机控制
直播中

李丹

7年用户 1426经验值
私信 关注
[文章]

如何使用Arduino和Wi-Fi的Web浏览器控制伺服电机?

这篇文章中,我们将在 Arduino 和 Wi-Fi 模块 ESP8266 的帮助下使用 Web 浏览器控制伺服电机。ESP8266 将通过 IP

地址在舵机和网页浏览器之间建立连接,然后通过移动网页上的滑块,舵机就会相应地移动。即使通过在路由器中设置端口转发,您也可以通过互联网从世界任何地方控制

Servo,我们将在本教程后面进行解释。

所需组件:

本项目中使用的组件如下

伺服 (sg90)

Arduino Uno

无线模组 ESP8266

三个 1K 电阻器

连接线

电路图和连接:

网络控制伺服使用Arduino和wifi电路

首先,我们将 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 文件,它将如下所示。

Web-control-servo-using-Arduino-and-wifi-网页

现在将Arduino代码粘贴到Arduino

IDE中,并使用您的Wi-Fi网络名称和密码更改Wi-Fi的名称和密码,然后上传代码。您将在串行监视器中获得一个IP地址。在网页上的框中键入此 IP

地址。现在,当您移动滑块时,伺服将根据滑块移动。因此,这就是您使用网页控制伺服的方法。

Arduino代码解释:

此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) 并找到设置端口转发的选项来转发端口。

更多回帖

发帖
×
20
完善资料,
赚取积分