我们将使用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 "servo.h"
然后,我们存储了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);
已经补充完整了代码
没有完整的吗?
头文件为
和
双引号换成尖括号,文中的被系统防火墙过滤掉了
很赞
有没有网页的教程啊,求
网页相关的教程可以去w3cschool看看
还是说这个可以生成网页?
这个不能生成网页 只是可以打开网页来控制舵机
?
有没有完整的代码