Lesson Note

第6节课日志

日期:2026-04-11 · 主题:WiFi、舵机控制与综合Demo

本节目标

掌握ESP32连接WiFi的方法,学习舵机角度控制,最终实现一个网页端控制舵机角度的综合小Demo。

学习记录

1. WiFi连接与网络服务

使用ESP32的STA模式连接路由器,串口打印本机IP,并通过WebServer搭建基础HTTP服务。

2. 舵机基础控制

使用ESP32Servo库完成舵机初始化,设置50Hz和脉宽范围,通过write接口控制舵机在0~180度间转动。

3. 综合小Demo:WiFi控制舵机

将Web接口与舵机控制逻辑组合,通过浏览器访问不同路由即可切换舵机角度,实现远程控制效果。

项目代码(节选)

下面展示核心逻辑:连接WiFi、注册控制路由、设置舵机角度。

#include <WiFi.h>
#include <WebServer.h>
#include <ESP32Servo.h>

const char* WIFI_SSID = "YOUR_WIFI_SSID";
const char* WIFI_PASSWORD = "YOUR_WIFI_PASSWORD";

WebServer server(80);
Servo myServo;

static const int SERVO_PIN = 4;
static const uint16_t SERVO_MIN_US = 500;
static const uint16_t SERVO_MAX_US = 2500;
int currentAngle = 90;

void handleSetAngle(int angle) {
    angle = constrain(angle, 0, 180);
    currentAngle = angle;
    myServo.write(currentAngle);
    server.send(200, "text/plain", "Servo angle set to " + String(currentAngle));
}

void setup() {
    Serial.begin(115200);

    myServo.setPeriodHertz(50);
    myServo.attach(SERVO_PIN, SERVO_MIN_US, SERVO_MAX_US);
    myServo.write(currentAngle);

    WiFi.mode(WIFI_STA);
    WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
    while (WiFi.status() != WL_CONNECTED) {
        delay(300);
    }

    server.on("/", HTTP_GET, []() {
        server.send(200, "text/plain", "Use /servo/0 /servo/90 /servo/180");
    });
    server.on("/servo/0", HTTP_GET, []() { handleSetAngle(0); });
    server.on("/servo/90", HTTP_GET, []() { handleSetAngle(90); });
    server.on("/servo/180", HTTP_GET, []() { handleSetAngle(180); });

    server.begin();
    Serial.println(WiFi.localIP());
}

void loop() {
    server.handleClient();
}