0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >汽车电子 > 基于 ESP8266 的 Wi-Fi 车(示意图+代码)

基于 ESP8266 的 Wi-Fi 车(示意图+代码)

来源: 电路城
2021-11-29
类别:汽车电子
eye 16
文章创建人 拍明

原标题:基于 ESP8266 的 Wi-Fi 车(示意图+代码)

基于 ESP8266 的 Wi-Fi 车设计与实现

在物联网技术日益成熟的今天,基于 Wi-Fi 的远程控制设备越来越受到人们的关注。ESP8266 作为一款低成本、高性能的 Wi-Fi 模块,为开发者提供了极大的便利。本文将详细介绍如何基于 ESP8266 设计并实现一款 Wi-Fi 车,包括优选元器件的选型、器件作用、选择理由、元器件功能以及完整的代码实现。

image.png

一、项目概述

本项目旨在设计一款可通过 Wi-Fi 远程控制的智能小车。小车将搭载 ESP8266 模块作为控制中心,负责接收来自手机或电脑的指令,并控制小车的运动。通过该项目,可以深入了解 ESP8266 模块的应用,以及物联网设备的开发流程。

二、优选元器件选型

1. ESP8266 模块

选型:ESP8266 NodeMCU Lua V3 开发板

器件作用:作为小车的控制中心,负责 Wi-Fi 通信、指令接收与处理以及电机控制。

选择理由

  • 低成本:ESP8266 是一款性价比极高的 Wi-Fi 模块,适合预算有限的项目。

  • 高性能:集成了 Wi-Fi 功能和 TCP/IP 协议栈,支持多种开发方式,如 C/C++ 语言和 Arduino IDE。

  • 易开发:拥有丰富的开发资源和社区支持,便于快速上手和开发。

  • 低功耗:专为移动设备和物联网应用设计,具有低功耗特性,适合电池供电的设备。

元器件功能

  • Wi-Fi 通信:支持 IEEE 802.11 b/g/n 协议,可作为 Wi-Fi 客户端或接入点(AP)运行。

  • TCP/IP 协议栈:内置完整的 TCP/IP 协议栈,支持 HTTP、MQTT 等常见网络协议。

  • GPIO 接口:提供多个通用输入输出(GPIO)引脚,用于连接外部设备和传感器。

  • 串口通信:通过 UART 接口与主控制器进行通信,使用 AT 指令集控制 Wi-Fi 连接、数据传输和网络配置。

2. L298N 电机驱动模块

选型:L298N 绿色版

器件作用:驱动小车的电机,实现小车的前进、后退、转弯等功能。

选择理由

  • 高驱动能力:L298N 能够驱动两个直流电机,提供足够的电流和电压以支持小车的运动。

  • 简单易用:具有简单的接口和控制逻辑,便于与 ESP8266 连接和控制。

  • 稳定性好:在实际应用中表现出良好的稳定性和可靠性。

元器件功能

  • 电机驱动:通过控制输入信号来驱动电机的正转、反转和停止。

  • 电流保护:内置过流保护电路,防止电机过载损坏。

  • 电压调节:提供电压调节功能,以适应不同电压的电机。

3. 电机

选型:直流减速电机

器件作用:为小车提供动力,驱动小车前进、后退和转弯。

选择理由

  • 高扭矩:直流减速电机具有较高的扭矩输出,适合驱动小车等负载较重的设备。

  • 低噪音:相比其他类型的电机,直流减速电机在运行过程中产生的噪音较低。

  • 易控制:通过简单的电压或电流控制即可实现电机的正转、反转和停止。

元器件功能

  • 动力输出:将电能转换为机械能,驱动小车运动。

  • 减速功能:通过减速齿轮箱降低电机的转速并增加扭矩输出。

4. 电源模块

选型:18650 锂电池组 + 降压模块

器件作用:为小车提供稳定的电源供应。

选择理由

  • 高能量密度:18650 锂电池具有较高的能量密度,能够提供长时间的续航能力。

  • 可充电性:锂电池可重复充电使用,降低了使用成本。

  • 降压模块:将锂电池的高电压转换为适合 ESP8266 和 L298N 使用的低电压。

元器件功能

  • 电压转换:将锂电池的高电压转换为稳定的低电压输出。

  • 过充过放保护:保护锂电池免受过充和过放的损害,延长电池寿命。

  • 电源管理:提供电源开关、指示灯等功能,便于用户管理电源。

5. 小车底盘

选型:圆形智能小车底盘

器件作用:作为小车的结构支撑,安装电机、轮子等部件。

选择理由

  • 结构稳定:圆形底盘具有良好的稳定性,能够支持小车的各种运动。

  • 易于组装:底盘上预留了安装孔和接口,便于安装和调试电机、轮子等部件。

  • 美观实用:圆形底盘外观美观,适合作为智能小车的结构支撑。

元器件功能

  • 结构支撑:为小车提供稳定的结构支撑,安装和固定电机、轮子等部件。

  • 运动实现:通过底盘上的轮子实现小车的前进、后退和转弯等运动。

三、硬件连接

1. ESP8266 与 L298N 的连接

ESP8266 通过 GPIO 引脚与 L298N 电机驱动模块连接,以控制电机的运动。具体连接如下:

  • ESP8266 GPIO 引脚:D1(GPIO 5)、D2(GPIO 4)、D3(GPIO 0)、D4(GPIO 2)、D5(GPIO 14)、D6(GPIO 12)、D7(GPIO 13)、D8(GPIO 15)

  • L298N 引脚:ENA、ENB、IN1、IN2、IN3、IN4

连接说明:

  • ENA:连接到 ESP8266 的 D1 引脚,用于控制右电机的使能。

  • ENB:连接到 ESP8266 的 D3 引脚,用于控制左电机的使能。

  • IN1:连接到 ESP8266 的 D5 引脚,用于控制右电机的正转。

  • IN2:连接到 ESP8266 的 D6 引脚,用于控制右电机的反转。

  • IN3:连接到 ESP8266 的 D7 引脚,用于控制左电机的正转。

  • IN4:连接到 ESP8266 的 D8 引脚,用于控制左电机的反转。

2. 电源连接

  • 锂电池组:正极连接到降压模块的输入正极,负极连接到降压模块的输入负极。

  • 降压模块:输出正极连接到 ESP8266 和 L298N 的 VCC 引脚,输出负极连接到 GND 引脚。

3. 小车底盘与电机的连接

  • 电机:将两个直流减速电机安装在小车底盘上,并通过联轴器与轮子连接。

  • 轮子:将轮子安装在小车底盘的两侧,确保轮子能够自由转动。

四、软件设计

1. 开发环境搭建

  • 安装 Arduino IDE:从 Arduino 官方网站下载并安装最新版本的 Arduino IDE。

  • 安装 ESP8266 支持包:在 Arduino IDE 中,通过“工具”->“开发板”->“开发板管理器”搜索并安装 ESP8266 支持包。

  • 选择开发板和端口:在 Arduino IDE 中,选择“工具”->“开发板”->“NodeMCU 1.0 (ESP-12E Module)”,并选择正确的端口。

2. 代码实现

以下是基于 ESP8266 的 Wi-Fi 车完整代码实现:


#include <ESP8266WiFi.h>

#include <WiFiClient.h>

#include <ESP8266WebServer.h>



// 定义电机控制引脚

#define ENA D1  // 右电机使能

#define ENB D3  // 左电机使能

#define IN1 D5  // 右电机正转

#define IN2 D6  // 右电机反转

#define IN3 D7  // 左电机正转

#define IN4 D8  // 左电机反转



// Wi-Fi 设置

const char* ssid = "yourSSID";  // 替换为你的 Wi-Fi SSID

const char* password = "yourPASSWORD";  // 替换为你的 Wi-Fi 密码



ESP8266WebServer server(80);  // 创建 Web 服务器,端口号为 80



// 电机控制函数

void motorControl(int enA, int in1, int in2, int enB, int in3, int in4) {

analogWrite(ENA, enA);

digitalWrite(IN1, in1);

digitalWrite(IN2, in2);

analogWrite(ENB, enB);

digitalWrite(IN3, in3);

digitalWrite(IN4, in4);

}



// 停止函数

void stop() {

motorControl(0, 0, 0, 0, 0, 0);

}



// 前进函数

void forward() {

motorControl(1023, HIGH, LOW, 1023, HIGH, LOW);

}



// 后退函数

void backward() {

motorControl(1023, LOW, HIGH, 1023, LOW, HIGH);

}



// 左转函数

void left() {

motorControl(1023, HIGH, LOW, 1023, LOW, HIGH);

}



// 右转函数

void right() {

motorControl(1023, LOW, HIGH, 1023, HIGH, LOW);

}



// 处理根目录请求

void handleRoot() {

String webPage = "";

webPage += "<div align="center"><h1>ESP8266 CAR</h1>";

webPage += "<a href="/forward"><button style="height:200px;width:200px"><font size="20">FW</font></button></a>";

webPage += "<a href="/backward"><button style="height:200px;width:200px"><font size="20">BW</font></button></a><br>";

webPage += "<a href="/left"><button style="height:200px;width:200px"><font size="20">LT</font></button></a>";

webPage += "<a href="/stop"><button style="height:200px;width:200px"><font size="20">ST</font></button>";

webPage += "<a href="/right"><button style="height:200px;width:200px"><font size="20">RT</font></button></a></div>";

server.send(200, "text/html", webPage);

}



// 处理前进请求

void handleForward() {

forward();

server.send(200, "text/plain", "Forward");

}



// 处理后退请求

void handleBackward() {

backward();

server.send(200, "text/plain", "Backward");

}



// 处理左转请求

void handleLeft() {

left();

server.send(200, "text/plain", "Left");

}



// 处理停止请求

void handleStop() {

stop();

server.send(200, "text/plain", "Stop");

}



// 处理右转请求

void handleRight() {

right();

server.send(200, "text/plain", "Right");

}



void setup() {

// 初始化串口通信

Serial.begin(115200);

delay(10);



// 初始化电机控制引脚

pinMode(ENA, OUTPUT);

pinMode(ENB, OUTPUT);

pinMode(IN1, OUTPUT);

pinMode(IN2, OUTPUT);

pinMode(IN3, OUTPUT);

pinMode(IN4, OUTPUT);



// 连接到 Wi-Fi 网络

Serial.println();

Serial.print("Connecting to ");

Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

Serial.println("");

Serial.println("WiFi connected");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());



// 设置 Web 服务器路由

server.on("/", handleRoot);

server.on("/forward", handleForward);

server.on("/backward", handleBackward);

server.on("/left", handleLeft);

server.on("/stop", handleStop);

server.on("/right", handleRight);



// 启动 Web 服务器

server.begin();

Serial.println("HTTP server started");

}



void loop() {

// 处理 Web 服务器请求

server.handleClient();

}

3. 代码说明

  • 电机控制引脚定义:定义了用于控制电机的 GPIO 引脚。

  • Wi-Fi 设置:设置了 Wi-Fi 的 SSID 和密码,用于连接到家庭或办公室的 Wi-Fi 网络。

  • 电机控制函数:定义了用于控制电机运动的函数,包括前进、后退、左转、右转和停止。

  • Web 服务器设置:创建了 Web 服务器,并设置了处理不同 URL 请求的函数。用户可以通过浏览器访问小车的 IP 地址,并点击按钮来控制小车的运动。

  • setup 函数:初始化串口通信、电机控制引脚,并连接到 Wi-Fi 网络。然后启动 Web 服务器。

  • loop 函数:处理 Web 服务器的请求,实现小车的远程控制。

五、调试与测试

1. 硬件调试

  • 检查连接:确保所有元器件之间的连接正确无误,特别是 ESP8266 与 L298N 的连接以及电源连接。

  • 电源测试:使用万用表测试电源模块的输出电压,确保输出电压稳定且符合 ESP8266 和 L298N 的要求。

  • 电机测试:通过手动控制 ESP8266 的 GPIO 引脚,测试电机的正转、反转和停止功能是否正常。

2. 软件调试

  • 编译与上传:将代码编译并上传到 ESP8266 开发板中。

  • Wi-Fi 连接测试:通过串口监视器查看 ESP8266 是否成功连接到 Wi-Fi 网络,并获取到 IP 地址。

  • Web 服务器测试:使用手机或电脑的浏览器访问小车的 IP 地址,测试 Web 服务器的功能是否正常。点击按钮控制小车的运动,观察小车是否按照预期运动。

3. 测试与优化

  • 功能测试:测试小车的所有功能,包括前进、后退、左转、右转和停止。确保每个功能都能正常工作。

  • 性能优化:根据测试结果对代码进行优化,提高小车的响应速度和稳定性。例如,可以调整电机的 PWM 值以改变小车的速度。

  • 稳定性测试:长时间运行小车,观察其稳定性和可靠性。如有必要,可以对硬件或软件进行调整以提高稳定性。

六、总结与展望

本项目成功实现了基于 ESP8266 的 Wi-Fi 车的设计与实现。通过优选元器件的选型和合理的硬件连接,以及详细的软件设计和调试,小车能够稳定地通过 Wi-Fi 进行远程控制。未来可以进一步扩展小车的功能,例如添加传感器以实现自动避障、添加摄像头以实现远程监控等。同时,也可以优化小车的结构和设计,提高其性能和稳定性。

通过本项目的实践,不仅深入了解了 ESP8266 模块的应用和物联网设备的开发流程,还提高了动手能力和解决问题的能力。相信在未来的物联网项目中,这些经验和技能将发挥重要的作用。

责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

标签: ESP8266 Wi-Fi

相关资讯

拍明芯城微信图标

各大手机应用商城搜索“拍明芯城”

下载客户端,随时随地买卖元器件!

拍明芯城公众号
拍明芯城抖音
拍明芯城b站
拍明芯城头条
拍明芯城微博
拍明芯城视频号
拍明
广告
恒捷广告
广告
深亚广告
广告
原厂直供
广告