layui做网站前端,mvc5网站开发之美电子版,安阳同城网,开一个网站建设公司参考#xff1a;WeMos下实现小车避障与手机控制 作者#xff1a;爱学习的小王呀 发布时间#xff1a;2020-10-02 10:17:45 网址#xff1a;https://blog.csdn.net/hongliwong/article/details/108900048?spm1001.2014.3001.5501 目录前言一、项目软硬件平台及开发环境1.硬… 参考WeMos下实现小车避障与手机控制 作者爱学习的小王呀 发布时间2020-10-02 10:17:45 网址https://blog.csdn.net/hongliwong/article/details/108900048?spm1001.2014.3001.5501 目录前言一、项目软硬件平台及开发环境1.硬件平台介绍2.开发环境介绍3.开发环境配置支持Wemos二、驱动演示1.蜂鸣器2.Wemos串口通信3.Wemos和wifi4.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 作为设备接入wifiSTA模式
#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_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.controldist_request_id1329187.10695.16178663918238401depth_1-utm_sourcedistribute.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) {caseq:qian();break;caseh:hou();break;casez:zuo();break;casey:you();break;cases:ting();break;casep: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; //回正
}
}
}
}
}