2021-01-16

**

基于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.每次烧录程序是先观察串口,波特率以及对应的板子名称是否选择正确。2021-01-16_第1张图片
2.上传成功后显示的画面
2021-01-16_第2张图片
3.烧写代码需要调整代码字体,在平台文件选择栏中找到首选项就可以看见,编辑器字体大小就可以调整字体。
2021-01-16_第3张图片
4 .如果遇到图片中的错误,是在烧写代码的过程中没有关闭串口引起的。
2021-01-16_第4张图片
5.在小车的接线口完全有自己定义(但建议尽量选择D2-D8接口这个范围内)。
6.如果烧写过程中无法烧写成功的话,把其他元器件的接线都拔掉先烧写程序,后面在接线其他模块上。
7.在设置wifi的IP的时候可以把家中的路由器的动态地址改为静态地址。
8.组装元器件的时候一定要注意静电防护,在插线的时候切勿用力过大导致的接触不良等问题。
9.ipconfig和arp-a去检查自己的网络连接及IP地址。
10.程序上传成功后,可以通过串口的方式来检查你发送的指令是否正确。
11.程序上传成功后,打开串口没有任何信息出来的话,可以先初始化串口,在初始化其他模块。
12.打开串口后记得先给wemos上电。
13.搞清楚超声波模块测距为什么要除以58.
14.打开串口助手只需要修改端口和波特率
2021-01-16_第5张图片
16.波特率一般选择为9600,115200等。
17.在给电机接线的时候切勿不能装反,还有超声波模块GND和VCC这两根线不接错位置不然会造成模块烧坏。
18.TCP连接也可以发送消息给串口(都是需要知道路由IP地址的前提下)。2021-01-16_第6张图片

五.主要程序代码

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

师承上官可编程 陈立臣老师

你可能感兴趣的:(笔记,网络,java,eclipse,经验分享)