如何使用ESP32从网页控制伺服电机

我们将使用ESP32从网页控制伺服电机,这比使用Arduino容易得多。

在这个项目中,我们将使用ESP32从网页控制伺服电机。从Arduino控制伺服电机非常容易,但是使用ESP32来控制它有点困难,因为ESP32不具有Analogwrite()函数。因此,借助伺服电机的库,我们将能够控制舵机。

硬件

  • 1个 ESP32
  • 1个 伺服马达
  • 1个 连接线

电路原理图

伺服电机的黄线为信号线;将其连接到ESP32的D15引脚。红色线是电源线;红色线是电源线。将其连接到ESP32的3.3V。黑线是地线;黑线是GND。将其连接到ESP32的GND。

代码讲解

首先,我们包含了Wi-Fi和伺服电机的库。对于Arduino,我们对PWM使用了“ analogwrite()”命令,但对于ESP32,“ analogwrite()”命令不起作用。因此,我们使用的库将使我们能够从ESP32引脚获取PWM输出。

#include 

然后,我们存储了Wi-Fi名称和密码,以便以后可以连接。之后,我们选择了将在其中创建服务器的端口80。

const char* wifi_pass = "qutaojiao";    // Your Wifi network password here
WiFiServer server(80);                   // Server will be at port 80

在初始化函数中,我们使用库函数定义了将伺服电机连接到的引脚,并将伺服电机移至90度(已设置为初始位置)。

ledcAttachPin(15, 1);   // GPIO 15 assigned to channel 1
ledcWrite(1, servo_pos); // Moved the servo to 90 degree

然后,使用上面提供的信息将ESP32连接到Wi-Fi网络。如果与Wi-Fi网络的连接成功,则串行监视器上将显示“连接成功”;如果与Wi-Fi网络的连接不成功,它将继续尝试直到连接到Wi-Fi。 Fi网络。

  Serial.print(wifi_name);
  WiFi.begin(wifi_name, wifi_pass);       // Connecting to the wifi network
  while (WiFi.status() != WL_CONNECTED)   // Waiting for the response of wifi network
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Connection Successful");

以下命令将在串行监视器上显示IP地址。这是将在其中创建服务器的IP地址。


以下命令将启动服务器:

server.begin();

在循环函数中,首先我们检查是否有任何客户端请求可用。如果有任何客户请求,我们将阅读该请求并将其存储在字符中。我们将通过发送HTML命令来响应此客户请求,这将在我们控制伺服电机的位置创建网页。

WiFiClient client = server.available();   //Checking if any client request is available or not
  if (client)
  {
    boolean currentLineIsBlank = true;
    String buffer = "";  
    while (client.connected()){
      if (client.available()) {           // if there is some client data available
        char c = client.read(); 
        buffer+=c;                        // read a byte
        if (c == '\n' && currentLineIsBlank) {  // check for newline character
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();    
          client.print("ESP32");
          client.print("
ESP32 Servo Control 

");
          client.print("Left");
          client.print("Right"); 
          client.print("");
          break;      // break out of the while loop:

按下网页上的向左或向右按​​钮时,网页会将信息发送到伺服器将移至的网络服务器:

if(buffer.indexOf("GET /?moveright")>=0)
          {
            if (servo_pos > 8000)
            {
              servo_pos = 8000;
            }
            servo_pos = servo_pos += 1000;
            ledcWrite(1, servo_pos);
            delay(100);
          }
            
          if(buffer.indexOf("GET /?moveleft")>=0)
            {
              if (servo_pos < 0)
              {
                servo_pos = 0;
              }
            servo_pos = servo_pos -= 1000;
            ledcWrite(1, servo_pos);
            delay(100);

完整代码

限制以下用户组阅读此隐藏内容

请先登录

您的用户组:
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论