用esp8266单片机在arduino的环境下写一辆WiFi小车的程序。WiFi名称为carWiFi密码为passwordIP地址为19216821控制L298n控制两个电机实现小车的前进后退左转右转pwm调速开灯的功能。
由于题目中没有给出小车的硬件结构,本回答只提供代码框架和思路,具体的代码需要根据实际情况进行修改。
- 配置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
}
- 控制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);
}
- 控制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);
}
- 接收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灯
原文地址: https://www.cveoy.top/t/topic/dKiy 著作权归作者所有。请勿转载和采集!