**
基于Wemos的wifi控制的避障小车总结
一.使用的基本元器件
1.L9110电机
2.超声波模块
3.Wemos集成电路板
4.可以传输数据的type-A接口
5.和一个带有DC头和装有开关电池盒(4节5号电池)
6.电烙铁
7.热熔枪
二.开发环境
1.基于ArduiNo开发环境
三.开发小车时候需要的其他的开发软件
1.夜神模拟器
2.串口调试助手
3.USB下载驱动程序
4.eclipse软件
5.TCP连接
**四.中间改造是遇到的问题以及注意事项
1.每次烧录程序是先观察串口,波特率以及对应的板子名称是否选择正确。
2.上传成功后显示的画面
3.烧写代码需要调整代码字体,在平台文件选择栏中找到首选项就可以看见,编辑器字体大小就可以调整字体。
4 .如果遇到图片中的错误,是在烧写代码的过程中没有关闭串口引起的。
5.在小车的接线口完全有自己定义(但建议尽量选择D2-D8接口这个范围内)。
6.如果烧写过程中无法烧写成功的话,把其他元器件的接线都拔掉先烧写程序,后面在接线其他模块上。
7.在设置wifi的IP的时候可以把家中的路由器的动态地址改为静态地址。
8.组装元器件的时候一定要注意静电防护,在插线的时候切勿用力过大导致的接触不良等问题。
9.ipconfig和arp-a去检查自己的网络连接及IP地址。
10.程序上传成功后,可以通过串口的方式来检查你发送的指令是否正确。
11.程序上传成功后,打开串口没有任何信息出来的话,可以先初始化串口,在初始化其他模块。
12.打开串口后记得先给wemos上电。
13.搞清楚超声波模块测距为什么要除以58.
14.打开串口助手只需要修改端口和波特率
16.波特率一般选择为9600,115200等。
17.在给电机接线的时候切勿不能装反,还有超声波模块GND和VCC这两根线不接错位置不然会造成模块烧坏。
18.TCP连接也可以发送消息给串口(都是需要知道路由IP地址的前提下)。
五.主要程序代码
#include <ESP8266WiFi.h>
#define Dong1 D6
#define Dong2 D7
#define Zhuan1 D4
#define Zhuan2 D5
#define Echo D2 // 引脚接到D2引脚上
#define Trig D8 //引脚接到D8引脚上
char* ssid = "FAST_669A"; //wifi的热点名称
char* passwd = "a12345678"; //wifi的热点密码
int port = 8888;// 编口号
WiFiServer server(port);// 设置服务器端口号
long getTime()
{
digitalWrite(Trig, HIGH); //发送一个10微秒脉冲
delayMicroseconds(10);
digitalWrite(Trig, LOW); //low就是输入一个低电平
return pulseIn(Echo, HIGH); //波传输过程echo高电平,计算高电平时间就获取波传输的时间,单位是(微秒)
}
void initChaoShengBo()
{
pinMode(Echo, INPUT);
pinMode(Trig, OUTPUT);
}
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 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 zheng()
{
digitalWrite(Zhuan1, LOW);
digitalWrite(Zhuan2, LOW);
}
void you()
{
digitalWrite(Zhuan1, HIGH);
digitalWrite(Zhuan2, LOW);
}
void setup()
{
// put your setup code here, to run once:
initL9110s();
initWiFiSta();
initChaoShengBo();
Serial.begin(115200);
server.begin(); //启动服务器的API
}
void loop() {
char cmd;
int mark = 0; //定义一个mark标记位
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) {
hou();
delay(200); //延时200毫秒
ting();
mark = 1; //设置一个标记位置
} else {
mark = 0;
}
switch (cmd) {
case 'q':
qian();
break;
case 'h':
hou();
break;
case 'z':
zuo();
break;
case 'y':
break;
case 's':
ting();
break;
case 'd':
zheng();
break;
}
}
}
}
师承上官可编程 陈立臣老师