WeMos下实现小车避障与手机控制

参考:WeMos下实现小车避障与手机控制
作者:爱学习的小王呀
发布时间:2020-10-02 10:17:45
网址:https://blog.csdn.net/hongliwong/article/details/108900048?spm=1001.2014.3001.5501

目录

  • 前言
  • 一、项目软硬件平台及开发环境
    • 1.硬件平台介绍
    • 2.开发环境介绍
    • 3.开发环境配置支持Wemos
  • 二、驱动演示
    • 1.蜂鸣器
    • 2.Wemos串口通信
    • 3.Wemos和wifi
    • 4.Wemos和超声波测距
    • 5.Wemos和L9110s步进电机控制器
    • 6.安卓APP控制小车
  • 三、项目整合
    • 1.相关函数
    • 2.代码整合

前言

通过WeMos D1开发板、超声波模块、蜂鸣器、L9110s步进电机实现:小车方向控制,如果小车距离障碍物的距离小于10厘米 ,再按前进蜂鸣器就会报警,并后退一定的距离 。

一、项目软硬件平台及开发环境

1.硬件平台介绍

在这里插入图片描述
特性
1.基于ESP-8266EX
2.Arduino兼容,使用rduino IDE来编程
3.11 x I/O 引脚
4.1 x ADC 引脚(输入范围0-3.3V)
5.板载5V 1A开关电源(高输入电压24V)
工作中:
和stm32模块开发类似,集成度高
STM32方案也更经济便宜

2.开发环境介绍

在这里插入图片描述

ArduiNo开发环境,和keil对比
优点:
集成很多开发库如串口,网络,sg90等
各种硬件开发接口,迅捷开发
自带串口调试工具
缺点: 程序编译速度慢

3.开发环境配置支持Wemos

在这里插入图片描述

二、驱动演示

1.蜂鸣器

在这里插入图片描述

//基础控制:蜂鸣器叫唤和不叫唤
void setup()
{
pinMode(D5, OUTPUT); //设置引脚为输出引脚
}void loop()
{
digitalWrite(D5, HIGH); // 输出高电平,蜂鸣器闭嘴
delay(1000); //这一秒内都得闭嘴
digitalWrite(D5, LOW); //输出低电平,蜂鸣器吼起来
delay(1000); //吼一秒(延时期间,蜂鸣器控制引脚属于低电平)
}

2.Wemos串口通信

串口有关的函数:在这里插入图片描述
串口与wemos的简单通信:
在这里插入图片描述
在这里插入图片描述
串口控制蜂鸣器代码:

#define BEEP D5void setup() {
Serial.begin(115200); //初始化串口,设置波特率为115200
pinMode(BEEP, OUTPUT); //设置引脚为输出引脚
digitalWrite(BEEP, HIGH); // 上电不让蜂鸣器响起
}void loop()
{
int cmd;
if ( Serial.available() > 0 )
{ //检测串口是否有数据
cmd = Serial.read(); // 读取串口数据
Serial.println(cmd);
if (cmd == 1) { //如果读取的数据是1
digitalWrite(BEEP, LOW); // 蜂鸣器响起
}
else
{
digitalWrite(BEEP, HIGH); // 否则(读取数据非1)蜂鸣器不响
}
}
}

3.Wemos和wifi

**板载无线网卡:支持AP(路由), sta(上网设备)模式**
  • 1

在这里插入图片描述
作为设备接入wifi(STA模式)

#include <ESP8266WiFi.h>
char* ssid = “TENK-888; //“wifi热点名称”
char* passwd =12345678; //”wifi热点密码”void initWifiSta()
{
WiFi.mode(WIFI_STA); // 设置STA模式
WiFi.begin(ssid, passwd); //连接网络
while (WiFi.status() != WL_CONNECTED) //判断WiFi接入状态
{
Serial.print(".");
delay(500);
}
}
void setup() {
//初始化串口
Serial.begin(115200);
//初始化wifi
initWifiSta();}void loop() {
Serial.println(WiFi.localIP()); //通过串口打印wemos的IP地址
delay(500);
}

由串口打印出wemos的IP地址:192.168.1.5
在这里插入图片描述
手机调试工具发送指令控制蜂鸣器:
在这里插入图片描述
编程代码:
#include <ESP8266WiFi.h>

#define BEEP D5

char* ssid = “TENK-888”; //“wifi热点名称”
char* passwd = “12345678”; //”wifi热点密码”
int port = 8888; //端口号
WiFiServer server(port); // 设置服务器端口号

void initWifiSta()
{
WiFi.mode(WIFI_STA); // 设置STA模式
WiFi.begin(ssid, passwd); //连接网络
while (WiFi.status() != WL_CONNECTED) //判断WiFi接入状态
{
Serial.print(".");
delay(500);
}
Serial.println(WiFi.localIP()); //通过串口打印wemos的IP地址
delay(500);
}

void initBeep()
{
pinMode(BEEP, OUTPUT); //设置引脚为输出引脚
digitalWrite(BEEP, HIGH); // 输出高电平,蜂鸣器闭嘴
}

void setup() {

initBeep(); //初始化蜂鸣器
Serial.begin(115200); //初始化串口
initWifiSta(); //初始化wifi
server.begin(); //启动服务器

}

void loop() {

char cmd;

WiFiClient client = server.available(); //服务初始化
while (client.connected())
{
while (client.available() > 0) //等待客户端连接
{
cmd = client.read();//读取数据
if(cmd == ‘1’)
{
digitalWrite(BEEP, LOW);
}
else
{
digitalWrite(BEEP, HIGH);
}

        }
  • 1

}
}

4.Wemos和超声波测距

超声波测距原理:
在这里插入图片描述
超声波测距编程实现(距离小于10触发蜂鸣器发出声音):

#define Echo D2
#define Trig D8
#define BEEP D5long getTime()
{
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);return pulseIn(Echo,HIGH);
}void initChaoShengBo()
{
pinMode(Echo,INPUT);
pinMode(Trig,OUTPUT);
}void initBeep()
{
pinMode(BEEP,OUTPUT);
digitalWrite(BEEP,HIGH);
}void setup()
{
initChaoShengBo();
initBeep();
Serial.begin(115200);
}void loop()
{
//获取距离
long dis;
dis = getTime()/58;
Serial.print(dis);
Serial.println(“cm”);
if(dis < 10)
{
digitalWrite(BEEP,LOW);
}
else
{
digitalWrite(BEEP,HIGH);
}
delay(500);
}

在这里插入图片描述

5.Wemos和L9110s步进电机控制器

L9110s步进电机控制器:
在这里插入图片描述
串口控制小车主要代码:

#define Dong1 D6
#define Dong2 D7
#define Zhuan1 D3
#define Zhuan2 D4void initL9110s()
{
pinMode(Dong1,OUTPUT);
pinMode(Dong2,OUTPUT);
pinMode(Zhuan1,OUTPUT);
pinMode(Zhuan2,OUTPUT);
}void qian()
{
digitalWrite(Dong1,HIGH);
digitalWrite(Dong2,LOW);
}void hou()
{
digitalWrite(Dong1,LOW);
digitalWrite(Dong2,HIGH);
}void zuo()
{
digitalWrite(Zhuan1,LOW);
digitalWrite(Zhuan2,HIGH);
}void you()
{
digitalWrite(Zhuan1,HIGH);
digitalWrite(Zhuan2,LOW);
}void setup()
{
initL9110s();
Serial.begin(115200);
}void loop()
{
char cmd;if(Serial.available() > 0)
{
cmd = Serial.read();
switch(cmd)
{
case ‘q’: qian();break;
case ‘h’: hou();break;
case ‘z’: zuo();break;
case ‘y’: you();break;
}
}
}

6.安卓APP控制小车

6.1 Android开发环境搭建
编程软件下载,解压。
Android导入程序包
在这里插入图片描述
在这里插入图片描述
Android修改代码支持你的Wemos
在这里插入图片描述
在这里插入图片描述

三、项目整合

1.相关函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.代码整合

实现小车方向控制,如果小车距离障碍物的距离小于10厘米 ,再按前进蜂鸣器就会报警,并后退一定的距离 。
Arduino完整编程代码:

这里先看一个别人写的例子,没有加入蜂鸣器的代码实现。主要是因为这篇代码格式很清晰。
摘自:wifi避障小车最终完整版(可实现手机端操作小车)
作者:陈峻熙
发布时间:2020-10-11 10:17:28
网址:https://blog.csdn.net/Tiazz/article/details/109008477?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&dist_request_id=1329187.10695.16178663918238401&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control

#include <ESP8266WiFi.h>#define Dong1 D6
#define Dong2 D7
#define Zhuan1 D4
#define Zhuan2 D5
#define Echo D2
#define Trig D8char* ssid = "126587"; //WiFi热点名称
char* passwd = "12345678"; //WiFi热点密码
int port = 8888;
WiFiServer server(port);//设置服务端口号long getTime()
{digitalWrite(Trig, HIGH); //*******************delayMicroseconds(10);    //发送一个10微秒的脉冲digitalWrite(Trig, LOW); //************return pulseIn(Echo, HIGH); //波传输过程echo高电平,计算高电平时间就获取波传输的时间,单位是微秒
}void initWifiSta()
{WiFi.mode(WIFI_STA);//设置STA模式WiFi.begin(ssid, passwd); //连接网络while (WiFi.status() != WL_CONNECTED) {Serial.print(".");delay(500);}Serial.println(WiFi.localIP());//通过串口打印wemos的ip地址
}void initChaoShengBo()
{pinMode(Echo, INPUT);pinMode(Trig, OUTPUT);}void initL9110s()
{pinMode(Dong1, OUTPUT);pinMode(Dong2, OUTPUT);pinMode(Zhuan1 , OUTPUT);pinMode(Zhuan2, OUTPUT);
}
void qian()
{digitalWrite(Dong1, HIGH);digitalWrite(Dong2, LOW);
}
void hou()
{digitalWrite(Dong1, LOW);digitalWrite(Dong2, HIGH);
}
void ting()
{digitalWrite(Dong1, LOW);digitalWrite(Dong2, LOW);
}void zuo()
{digitalWrite(Zhuan1, HIGH);digitalWrite(Zhuan2, LOW);} void you()
{digitalWrite(Zhuan1, LOW);digitalWrite(Zhuan2, HIGH);
}
void zheng()
{digitalWrite(Zhuan1, LOW);digitalWrite(Zhuan2, LOW);
}
void setup() {// put your setup code here, to run once:initL9110s();initChaoShengBo();Serial.begin(115200);initWifiSta();server.begin();
}void loop() {// put your main code here, to run repeatedly:char cmd;long dis;int mark = 0;WiFiClient client = server.available();//服务器初始化while (client.connected()) {    //等待客户端接入while (client.available() > 0) {cmd = client.read();Serial.println(cmd);dis = getTime() / 58;if (dis < 10) {hou();delay(300);ting();mark = 1;} else {mark = 0;}if (mark == 0) {switch (cmd) {case'q':qian();break;case'h':hou();break;case'z':zuo();break;case'y':you();break;case's':ting();break;case'p':zheng();break;}}}}
}

回过头来继续看原文作者的代码:

#include <ESP8266WiFi.h>#define Dong1 D6
#define Dong2 D7
#define Zhuan1 D3
#define Zhuan2 D4
#define Echo D2
#define Trig D8
#define BEEP D5/*****************************************************************************/
/ /
/ wifi模块函数 /
/***************************************************************************/
char ssid = “TENK-888; //“wifi热点名称”
char passwd =12345678; //”wifi热点密码”
int port = 8888; //端口号
WiFiServer server(port); // 设置服务器端口号void initWifiSta()
{
WiFi.mode(WIFI_STA); // 设置STA模式
WiFi.begin(ssid, passwd); //连接网络
while (WiFi.status() != WL_CONNECTED) //判断WiFi接入状态
{
Serial.print(".");
delay(500);
}
Serial.println(WiFi.localIP()); //通过串口打印wemos的IP地址
}
/*****************************************************************************/
/ /
/ 电机控制模块函数 /
/*****************************************************************************/
void initL9110s()
{
pinMode(Dong1,OUTPUT);
pinMode(Dong2,OUTPUT);
pinMode(Zhuan1,OUTPUT);
pinMode(Zhuan2,OUTPUT);
}void qian()
{
digitalWrite(Dong1,HIGH);
digitalWrite(Dong2,LOW);
}void hou()
{
digitalWrite(Dong1,LOW);
digitalWrite(Dong2,HIGH);
}void ting()
{
digitalWrite(Dong1,LOW);
digitalWrite(Dong2,LOW);
}void zuo()
{
digitalWrite(Zhuan1,LOW);
digitalWrite(Zhuan2,HIGH);
}void you()
{
digitalWrite(Zhuan1,HIGH);
digitalWrite(Zhuan2,LOW);
}void zheng()
{
digitalWrite(Zhuan1,LOW);
digitalWrite(Zhuan2,LOW);
}
/*****************************************************************************/
/ /
/ 超声波测距模块函数 /
/*****************************************************************************/
long getTime()
{
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);return pulseIn(Echo,HIGH);
}void initChaoShengBo()
{
pinMode(Echo,INPUT);
pinMode(Trig,OUTPUT);
}
/*****************************************************************************/
/ /
/ 蜂鸣器模块函数 /
/*****************************************************************************/
void initBeep()
{
pinMode(BEEP,OUTPUT);
digitalWrite(BEEP,HIGH);
}/*****************************************************************************/
/ /
/ 各个模块初始化函数 /
/*****************************************************************************/
void setup()
{
initL9110s();
Serial.begin(115200);
initWifiSta();
server.begin();
initChaoShengBo();
initBeep();
}
/*****************************************************************************/
/ 主循环函数:实现小车方向控制,如果小车距离障碍物的距离小于10厘米 /
/ 再按前进蜂鸣器就会报警,并后退一定的距离 /
/*****************************************************************************/
void loop()
{
char cmd;
int flag = 0;
long dis;WiFiClient client = server.available(); //服务初始化
while (client.connected())
{
while (client.available() > 0) //等待客户端连接
{
cmd = client.read();//读取数据
Serial.println(cmd);
dis = getTime()/58;
if(dis < 10 )
{
digitalWrite(BEEP,LOW);
hou();
delay(200);
ting();
digitalWrite(BEEP,HIGH);
flag = 1;
}
else
{
flag = 0;
}
if(flag == 0)
{
switch(cmd)
{
case ‘q’: qian(); break; //前进
case ‘h’: hou(); break; //后退
case ‘z’: zuo(); break; //左转
case ‘y’: you(); break; //右转
case ‘s’: ting(); break; //停止
case ‘d’: zheng(); break; //回正
}
}
}
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果手机耗电快_iPhone12用5G耗电快,苹果回应

原标题&#xff1a;iPhone12用5G耗电快&#xff0c;苹果回应北京头条客户端10月24日消息&#xff0c;针对有媒体测试苹果iPhone12开启5G模式下&#xff0c;用电量提升的问题&#xff0c;苹果iPhone营销副总裁Kaiann Drance回应称&#xff0c;iPhone12 增加的智能数据模式可以平…

Ubuntu12 10下安装JDK7

为什么80%的码农都做不了架构师&#xff1f;>>> Ubuntu12 10版本下&#xff0c;不再预装JDK&#xff0c;包括OpenJdk&#xff0c;所以我们要从Oracle官网上下载java7的压缩包&#xff0c;选择适合自己电脑的安装包&#xff0c;我选的是jdk-7u9-linux-i586.tar.gz。…

neo4j python 算法_python操作neo4j简单实例

一&#xff1a;neo4j是什么neo4j:Neo4j是一个高性能的,NOSQL图形数据库,有关于更多neo4j的资料出门右拐二:python操作neo4j的实现python中neo4j的操作可以利用驱动包或者py2neo包&#xff0c;我采用py2neo第三方包实现以下简单功能&#xff0c;先建立一个neo4j的链接对于neo4j的…

尚硅谷的 ediary 笔记_干货分享 | 硅谷创新加速营第五讲教您合理规划融资需求 降低投资风险...

5月26日上午&#xff0c;康佳之星携手青岛蓝谷管理局、斯坦福青岛研究院、海尔海创汇联合举办的第二届硅谷创新加速营第五讲顺利完成。斯坦福青岛研究院董事长的Claude Leglise先生做客直播间&#xff0c;为现场创业者、企业家讲授创业之路必修课&#xff1a;企业财务规划。本讲…

虚拟机的服务器黑屏,VMware Workstation 14运行虚拟机黑屏解决办法

VMware Workstation 14运行虚拟机黑屏解决办法升级到VMware workstation 14 pro后所有虚拟系统全部黑屏&#xff0c;VMware 14 黑屏&#xff0c;VMware Workstation 14运行虚拟机黑屏是什么原因步骤如下&#xff0c;步骤如下&#xff0c;1、以管理员身份运行命令提示符(cmd.exe…

c++ 冒泡排序_干货|python笔记1-冒泡排序

面试的时候经常有面试官喜欢问如何进行冒泡排序&#xff1f;这个问题相信可以难倒一批的同学&#xff0c;本篇就详细讲解如何用python进行冒泡排序。基本原理01概念&#xff1a;冒泡排序是一种交换排序&#xff0c;它的基本思想是&#xff1a;两两比较相邻记录的关键字&#xf…

双链表嵌套的简单学生信息管理系统

参考&#xff1a;实现双链表嵌套的简单学生信息管理 作者&#xff1a;三速何时sub20 发布时间&#xff1a; 2020-07-20 10:44:40 网址&#xff1a;https://blog.csdn.net/weixin_44234294/article/details/107458155?spm1001.2014.3001.5501 参考&#xff1a;双链表嵌套实现简…

scrapy如何指定生成python3的项目_如何把阿里图标库的图标生成代码并应用于自己的项目...

有时候需要用很多图标去完成一定的页面效果和工作展现&#xff0c;框架内置的图标可能满足不了我们的需求&#xff0c;有个很好的图标库想必大家都知道-----就是阿里图标库。那么我们如何才能够把阿狸图标库的图标引用到自己的项目中呢&#xff1f;耐着性子往下看吧&#xff01…

win10系统无线服务器出错,win10系统中Wi-Fi证书错误的解决方法

wifi想必大家都很熟悉吧&#xff0c;这是很多用户们喜欢的无线网络&#xff0c;但是有时候会碰到一些wifi错误&#xff0c;比如有不少win10系统用户遇到wifi证书错误的情况&#xff0c;这样就会导致用户无法连接到网络或访问某个网站&#xff0c;该怎么处理呢&#xff0c;现在就…

subprocess模块

subprocess模块 subprocess可以根据命令的结果&#xff0c;正确的或者错误的分开存放 存放正确的结果 # import subprocess # objsubprocess.Popen(tasklist,shellTrue, # stdoutsubprocess.PIPE, # stderrsubprocess.PIPE, # …

通过EIGRP的 variance 参数实现非等价负载均衡

实验拓扑如上图所示我们使用EIGRP协议做通全网实现R1 的1.1.1.1 可以和 R4的4.4.4.4 进行通信 此时我们查看R1的路由表&#xff0c;查看去往4.4.4.4 的路由条目 通过拓扑图我们看到 R1去往4.4.4.4 是有两条路径的也就是 R1-R2-R4 和 R1-R3-R4 &#xff0c;但是在路由表中&…

echarts 获取点击的y轴数值_用 Python 自动获取NBA现役球员的职业生涯数据曲线

前言作为一个看了多年篮球的 NBA球迷&#xff0c;一直在想用 python 和篮球一起来写点什么加上最近在学习 pyecharts &#xff0c;所以就有了下面这篇文章&#xff1a;根据输入的球队和球员名字&#xff0c;自动生成该球员职业生涯数据曲线图&#xff01;✨ 效果火箭哈登勇士格…

重装系统后dns服务器未响应,dns服务器未响应,小编教你dns服务器未响应怎么解决...

连网时&#xff0c;出现连不上网络&#xff0c;用Windows网络诊断&#xff0c;诊断出的结果是“DNS服务器未响应”&#xff0c;遇到这样情况该怎样解决&#xff1f;在使用window系统的电脑上网过程中&#xff0c;常常会遇到DNS服务器未响应的问题&#xff0c;怎么办&#xff1f…

VMware虚拟机启动错误(正在被占用、内部错误)等问题

参考&#xff1a;VMware虚拟机启动错误&#xff08;正在被占用、内部错误&#xff09;等问题 作者&#xff1a;扫地僧- 发布时间&#xff1a;2019-09-20 15:02:55 网址&#xff1a;https://blog.csdn.net/weixin_42119153/article/details/101060183?spm1001.2014.3001.5501 目…

mt4 指标 涨跌幅 颜色k线_通达信指标公式源码阴线买股+黄金K线指标+源码

源码&#xff1a;TT2:DMA((((HIGH LOW) (CLOSE * 2)) / 4.15),0.9);TT1:REF(EMA(TT2,3),1);RSV:(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;K:SMA(RSV,3,1);D:SMA(K,3,1);J:3*K-2*D;LC:REF(CLOSE,1);RSI:((SMA(MAX((CLOSE - LC),0),3,1) / SMA(ABS((CLOSE - LC)),3,1)…

Windows Server 2008 R2 遗忘管理员密码后的解决方法-by iLync

思路是这样的&#xff1a;修改登录界面其他功能的链接&#xff0c;使之成为CMD的链接&#xff0c;在CMD命令里面定位到C:\\Windows\System32下&#xff0c;用net user 去修改账号和密码具体操作如下&#xff1a;一、使用Windows Server 2008 R2的安装光盘引导计算机启动。完成安…

面经——Linux相关

摘自&#xff1a;看完这些面试必问的Linux小知识&#xff0c;我保证你面试后会来给我的文章一键三连 作者&#xff1a;万里羊 发布时间&#xff1a;2021-04-09 21:55:23 网址&#xff1a;https://blog.csdn.net/weixin_44895651/article/details/115532107 作为一名以后想从事嵌…

android 权限动态申请

名字其实有点让人感觉高大上"权限动态申请",其实也没有什么, 以前做Android程序的时候,比如需要打开摄像头 那么需要在 然后就可以了, 但是Android6.0之后呢,有些权限必须手动让用户同意才可以,哪些权限需要用户手动同意,哪些不需要这里大家自行百度 现在说一下 直接…

php mysql installed_CentOS在使用yum install php-mysql安装php时报错的解决方法

由于此项目的apache只是用于下载功能和安装phpAdmin来查找数据库&#xff0c;而且之前已经安装了Mysql 5.6&#xff0c;于是在部署是都是直接使用yum命令方法安装。但在使用yum install php-mysql时报了一大堆的错误&#xff1a;from install of mysql-libs-5.1.69-1.el6_4.x86…

ppt转html5 带动画_我复刻了IPhone12这页发布会PPT

今年苹果发布会没有看&#xff0c;但是最近看到三石兄发了一篇关于发布会现场的这页PPT复刻的推文&#xff0c;它介绍的是利用直线辅助的方法来完成。三石兄相关推文&#xff1a;iPhone12发布会PPT&#xff0c;你也能做&#xff01;​mp.weixin.qq.com那么今天我们主要介绍如何…