项目介绍
小车是基于Ardiuno (WeMos d1)开发,由板载无线网卡esp8266提供sta上网和AP路由功能,把WeMos架设为ftp服务器,手机APP通过TCP/IP连接,实现小车控制,超声波模块实现测距避障功能
小车主要硬件部分
- 从小朋友那里抢的遥控车一个
- wemos d1开发板一块
- L9110s步进电机控制器一个
- 超声波测距模块一枚
- 电源(从室友那里嫖的充电宝,嘿嘿)
WeMos服务器——c/s模式
上代码
#include<ESP8266WiFi.h>
#define dong1 D6
#define dong2 D7
#define zhuan1 D4
#define zhuan2 D5
#define Echo D8
#define Trig D2
long getTime()//通过波在空气中的传播时间来计算距离
{
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
return pulseIn(Echo, HIGH);
}
void initchaoShengBo()
{
pinMode(Echo, INPUT);
pinMode(Trig, OUTPUT);
}
char* ssid = "apple";
char *passwd = "123456789";
int port = 8888;
WiFiServer server(port);//设置端口号
void initWifiSta()
{
WiFi.mode(WIFI_STA);//设置STA模式
WiFi.begin(ssid, passwd); //连接网络
while (WiFi.status() != WL_CONNECTED) //判断是否连接成功,不成功的话每隔0.5秒打印一个.
{
Serial.print(".");
delay(500);
}
Serial.println(WiFi.localIP());//通过串口每隔0.5秒打印一次wemosIP地址
}
void initrun()
{
pinMode(dong1, OUTPUT);
pinMode(dong2, OUTPUT);
pinMode(zhuan1, OUTPUT);
pinMode(zhuan2, OUTPUT);
}
void qian()
{
digitalWrite(dong1, HIGH);
digitalWrite(dong2, LOW);
}
void ting()
{
digitalWrite(dong1, HIGH);
digitalWrite(dong2, HIGH);
}
void hou()
{
digitalWrite(dong1, LOW);
digitalWrite(dong2, HIGH);
}
void zuo()
{
digitalWrite(zhuan1, HIGH);
digitalWrite(zhuan2, LOW);
}
void you()
{
digitalWrite(zhuan1, LOW);
digitalWrite(zhuan2, HIGH);
}
void zheng()
{
digitalWrite(zhuan1, HIGH);
digitalWrite(zhuan2, HIGH);
}
void setup() {
// put your setup code here, to run once:
initrun();
//Serial.begin(115200);//开启端口,并设置波特率
initWifiSta();//接入WiFi
server.begin();//启动服务器
initchaoShengBo();
}
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(getTime() / 58);
dis = getTime() / 58;
if (dis < 10) //障碍物离小车还有10cm,小车就后退200毫秒,并停下来,并且让mark=1,不继续执行后面的代码
{
hou();
delay(200);
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 'd':
zheng();
break;
}
}
}
}
}
超声波模块小学习
超声波测距模块是用来测量距离的一种产品,通过发送和就接收超声波,利用时间差和超声波传播速度,计算出模块到前方障碍物的距离。这个模块是2线制的(不包含电源线),Echo与Trig,Trig负责接收10us以上的触发信号,Echo则是输出距离信号;
PS:
心得体会
主要是体会吧,心得谈不上
1,在电脑上用手机模拟器,连接小车,使用adb连接时。首先要看ecplise安装目录下的sdk文件中的adb程序和模拟器安装目录下bin文件里的adb程序版本号是否一致(adb version),其次就是该模拟器的默认端口号
2,ardiuno IDE烧录有点慢,感觉wemos板子有点小问题(应该是我烧录太频繁导致)
3,服务器配置最重要的两点:地址和端口号
4,APP是老师封装好的,只需要修改IP和端口号,以及一些控制函数,保存后,在libs文件夹里面把apk文件发给手机安装,就可以起飞了>>>>
5,手机和要和小车连上同一WiFi,这个c/s模式好像是在局域网才能进行数据传输
6,在实际体验中避障功能不太灵敏(可能是代码不够完善,或是硬件条件原因)