由于题目中没有给出小车的硬件结构,本回答只提供代码框架和思路,具体的代码需要根据实际情况进行修改。

  1. 配置 WiFi 连接

使用 ESP8266 库中的 WiFi 相关函数进行 WiFi 连接的配置,代码如下:

#include <ESP8266WiFi.h>

const char* ssid = 'car'; // WiFi 名称
const char* password = 'password'; // WiFi 密码
const IPAddress ip(192, 168, 2, 1); // IP 地址

void setup_wifi() {
  WiFi.mode(WIFI_AP); // 将 ESP8266 设置为 AP 模式
  WiFi.softAPConfig(ip, ip, IPAddress(255, 255, 255, 0)); // 设置 AP 的 IP 地址
  WiFi.softAP(ssid, password); // 开启 AP
}
  1. 控制 L298n

使用 ESP8266 的 GPIO 输出信号控制 L298n 模块的 IN1,IN2,IN3 和 IN4 引脚,使得两个电机可以实现前进、后退、左转和右转的功能。同时可以通过 PWM 调整电机的速度。代码如下:

const int ENA = D1; // 电机 A 的 PWM 控制引脚
const int IN1 = D2; // 电机 A 的正转控制引脚
const int IN2 = D3; // 电机 A 的反转控制引脚
const int ENB = D4; // 电机 B 的 PWM 控制引脚
const int IN3 = D5; // 电机 B 的正转控制引脚
const int IN4 = D6; // 电机 B 的反转控制引脚

void setup_motor() {
  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(ENB, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}

// 前进
void forward(int speed) {
  analogWrite(ENA, speed); // 电机 A 的 PWM 控制
  analogWrite(ENB, speed); // 电机 B 的 PWM 控制
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}

// 后退
void backward(int speed) {
  analogWrite(ENA, speed);
  analogWrite(ENB, speed);
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
}

// 左转
void left(int speed) {
  analogWrite(ENA, speed);
  analogWrite(ENB, speed);
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}

// 右转
void right(int speed) {
  analogWrite(ENA, speed);
  analogWrite(ENB, speed);
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
}

// 停止
void stop() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}
  1. 控制 LED 灯

使用 ESP8266 的 GPIO 输出信号控制 LED 灯的亮灭,代码如下:

const int LED = D7; // LED 灯控制引脚

void setup_led() {
  pinMode(LED, OUTPUT);
}

void light_on() {
  digitalWrite(LED, HIGH);
}

void light_off() {
  digitalWrite(LED, LOW);
}
  1. 接收 WiFi 指令并控制小车

使用 ESP8266 的 WiFiServer 库监听指定端口的 TCP 连接,接收控制小车的指令并调用相应的函数控制小车的运动和 LED 灯的状态。代码如下:

#include <WiFiServer.h>

const int PORT = 80; // 监听的端口号
WiFiServer server(PORT); // 创建一个 WiFiServer 对象

void setup() {
  Serial.begin(115200);
  setup_wifi();
  setup_motor();
  setup_led();
  server.begin(); // 启动 WiFiServer
}

void loop() {
  WiFiClient client = server.available(); // 等待客户端的 TCP 连接
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        String request = client.readStringUntil('\r'); // 读取客户端发送的指令
        Serial.println(request); // 将指令打印到串口,方便调试
        if (request.indexOf('forward') != -1) {
          forward(255);
        } else if (request.indexOf('backward') != -1) {
          backward(255);
        } else if (request.indexOf('left') != -1) {
          left(255);
        } else if (request.indexOf('right') != -1) {
          right(255);
        } else if (request.indexOf('stop') != -1) {
          stop();
        } else if (request.indexOf('speed') != -1) {
          int speed = request.substring(request.lastIndexOf('=') + 1).toInt();
          analogWrite(ENA, speed);
          analogWrite(ENB, speed);
        } else if (request.indexOf('light_on') != -1) {
          light_on();
        } else if (request.indexOf('light_off') != -1) {
          light_off();
        }
      }
    }
    client.stop(); // 断开客户端连接
  }
}

至此,我们就完成了一个简单的 WiFi 小车控制程序。用户可以通过连接到“car”热点,并在浏览器中输入“192.168.2.1”来控制小车的运动和 LED 灯的状态。例如,用户可以在浏览器中输入“http://192.168.2.1/?forward”来让小车前进,输入“http://192.168.2.1/?speed=127”来调整小车的速度,输入“http://192.168.2.1/?light_on”来开启 LED 灯。

ESP8266 WiFi 小车控制程序:前进、后退、转向、调速、开灯

原文地址: https://www.cveoy.top/t/topic/nKUz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录