基于Wemos的避障小车


一,开发环境搭建

1.硬件平台介绍WeMos D1


在这里插入图片描述

特性

  1. 基于ESP-8266EX
  2. Arduino兼容,使用rduino IDE来编程
  3. 11 x I/O 引脚
  4. 1 x ADC 引脚(输入范围0-3.3V)
  5. 板载5V 1A开关电源(高输入电压24V)

2.开发环境介绍


在这里插入图片描述

ArduiNo开发环境,和keil对比

优点:
集成很多开发库如串口,网络,sg90等
各种硬件开发接口,迅捷开发
自带串口调试工具

缺点: 程序编译速度慢


3.开发环境配置支持Wemos


在这里插入图片描述

Wemos同Arduino
上电后不断执行loop函数中的代码,我们核心控制代码写入loop

setup函数只调用一次,一般用于硬件相关的初始化,比如IO口,串口,wifi等

void setup()
{
}

void loop() 
{
}

二,各个模块在wemos 上的驱动演示

1.驱动蜂鸣器


在这里插入图片描述

//基础控制:蜂鸣器叫唤和不叫唤
void setup() 
{
 	pinMode(D5, OUTPUT); //设置引脚为输出引脚
}

void loop() 
{
	digitalWrite(D5, HIGH);     // 输出高电平,蜂鸣器闭嘴
	delay(1000);		        //这一秒内都得闭嘴
	digitalWrite(D5, LOW);     //输出低电平,蜂鸣器吼起来
	delay(1000);		      //吼一秒(延时期间,蜂鸣器控制引脚属于低电平)
}

2.Wemos串口通信


电脑和单片机,单片机和单片机之间都可以互相传数据,串口是一个有线传输的方式,像usb传输一样,比如鼠标滑动,单击就是发生了鼠标数据发送给电脑,从而实现操控。

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

#define BEEP D5

void 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(上网设备)模式
在这里插入图片描述
作为设备接入wifi(STA模式)

#include <ESP8266WiFi.h>
char* ssid = "CMCC-9u3s";                      //“wifi热点名称”
char* passwd = "xiuru6k9";                //”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 = "CMCC-9u3s";               //“wifi热点名称”
char* passwd = "xiuru6k9";             //”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);
                 }
                 
            }
  } 
}

4.Wemos和超声波测距


超声波测距原理
在这里插入图片描述

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

#define Echo D2
#define Trig D8
#define BEEP D5

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()
{
  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 D4

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 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;
      }
  } 
}

三,安卓APP控制小车


1.Android开发环境搭建

一. 编程软件 Eclipse AD下载,解压。
二. 安卓模拟器(夜神),适合 没安卓手机的同学,下载,双击像普通程序一样安装。

Android导入程序包

在这里插入图片描述

在这里插入图片描述

Android修改代码支持你的Wemos
在这里插入图片描述
在这里插入图片描述


2.项目整合以及在安卓模拟器上运行演示


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

Arduino完整编程代码:

#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 = "CMCC-9u3s";               //“wifi热点名称”
char* passwd = "xiuru6k9";             //”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;  //回正
                      }
                }
            }
  } 
}
  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值