WiFi避障小车

硬件清单:
Wemos D1(支持AP模式也就是路由模式和STA模式也就是上网设备)、超声波模块、小车、L9110s步进电机控制器
软件:
eclipse、arduino IDE

WiFi配置参考博文

ESP8266WiFi库:
在这里插入图片描述
从上图中可以看出ESP8266WiFi库主要包含Station、Soft AP、config、WiFiClient、WiFiServer、scan、hostname,本节主要介绍Station相关的函数使用。

在这里插入图片描述

动态IP方式连接WiFi热点

#include "ESP8266WiFi.h"
char* ssid = "sand";
char* passwd = "12345678";
void setup() {Serial.begin(115200);// Set WiFi to station modeWiFi.mode(WIFI_STA);WiFi.begin(ssid, passwd);while (WiFi.status() != WL_CONNECTED){delay(500);Serial.println("connecting......");}Serial.println("Connect to router successfully!");Serial.println(String("mac address is ")+WiFi.macAddress());
}
void loop() {if (WiFi.status() == WL_CONNECTED){Serial.println("Connect to router success");Serial.println(String("Subnet mask is ")+WiFi.subnetMask().toString());Serial.println(String("gatewayIP address is ")+WiFi.gatewayIP().toString());Serial.println(String("dnsIP address is ")+WiFi.dnsIP().toString());Serial.println(String("SSID is ") + WiFi.SSID());Serial.println(String("PSK is ") + WiFi.psk());Serial.println(String("BSSID is ") + WiFi.BSSIDstr());Serial.println(String("RSSI is ") + WiFi.RSSI());Serial.println(WiFi.localIP());}else{Serial.println("Connect to router failed");  }// Wait a bit before scanning againdelay(1000);
}

串口输出如下:

Connect to router success
Subnet mask is 255.255.255.0
gatewayIP address is 192.168.43.1
dnsIP address is 192.168.43.1
SSID is HUAWEI
PSK is FHN12345
BSSID is F4:63:1F:7D:AB:69
RSSI is -51
192.168.43.5//这个是想要固定的IP地址

Wemos作为设备动态接入WiFi:

#include <ESP8266WiFi.h>
char *ssid="HUAWEI";
char *passwd="FHN12345";
void initWifiSta()//wifi初始化函数
{WiFi.mode(WIFI_STA);//设置STA模式WiFi.begin(ssid,passwd);//连接网络while(WiFi.status()!=WL_CONNECTED)//判断是否接入WiFi,如果接入WiFi.status()=WL_CONNECTED{Serial.print(".");delay(500);Serial.println(WiFi.localIP());//通过串口打印wemos的IP地址delay(500);}
}
void setup() {Serial.begin(115200);initWifiSta();
}void loop() {Serial.println(WiFi.localIP());delay(500);
}

Wemos作为设备静态接入WiFi:

#include "ESP8266WiFi.h"
char* ssid = "HUAWEI";
char* passwd = "FHN12345";
IPAddress local_static_ip(192,168,43,5);
IPAddress local_gateway(192,168,43,1);
IPAddress local_subnet(255,255,255,0);
IPAddress local_dns_ip(192,168,43,1);
void setup() {Serial.begin(115200);// Set WiFi to station modeWiFi.mode(WIFI_STA);WiFi.begin(ssid, passwd);WiFi.config(local_static_ip, local_gateway, local_subnet, local_dns_ip);while (WiFi.status() != WL_CONNECTED){delay(500);Serial.println("connecting......");}Serial.println("Connect to router successfully!");Serial.println(String("mac address is ")+WiFi.macAddress());
}
void loop() {if (WiFi.status() == WL_CONNECTED){Serial.println("Connect to router success");Serial.println(String("IP address is ")+WiFi.localIP().toString());Serial.println(String("Subnet mask is ")+WiFi.subnetMask().toString());Serial.println(String("gatewayIP address is ")+WiFi.gatewayIP().toString());Serial.println(String("dnsIP address is ")+WiFi.dnsIP().toString());Serial.println(String("SSID is ") + WiFi.SSID());Serial.println(String("PSK is ") + WiFi.psk());Serial.println(String("BSSID is ") + WiFi.BSSIDstr());Serial.println(String("RSSI is ") + WiFi.RSSI());}else{Serial.println("Connect to router failed");  }// Wait a bit before scanning againdelay(1000);
}

串口打印如下:

Connect to router success
IP address is 192.168.43.5
Subnet mask is 255.255.255.0
gatewayIP address is 192.168.43.1
dnsIP address is 192.168.43.1
SSID is HUAWEI
PSK is FHN12345
BSSID is F4:63:1F:7D:AB:69//MAC
RSSI is -54

研发常说的C/S模式:
其实就是服务器和客户端的关系,服务器两大要素:1、地址(IP地址、域名等)2、端口号:(一台电脑或者设备有多个服务,每个服务用端口号区别)。比如:医院地址就可以类比为服务器地址,不同的科室去不同的地方类比端口号。

编程Wemos服务器,手机TCP工具控制舵机的旋转:

#include <Servo.h>
#include "ESP8266WiFi.h"
#define DuoPin 4
Servo myduoji;
char* ssid = "HUAWEI";
char* passwd = "FHN12345";int port=4466;//端口号
WiFiServer server(port);//设置服务器端口号,将Wemos作为服务器,为其他设备接入提供端口号,server是自己定义的IPAddress local_static_ip(192,168,43,5);
IPAddress local_gateway(192,168,43,1);
IPAddress local_subnet(255,255,255,0);
IPAddress local_dns_ip(192,168,43,1);
void setup() {Serial.begin(115200);// Set WiFi to station modeWiFi.mode(WIFI_STA);WiFi.begin(ssid, passwd);WiFi.config(local_static_ip, local_gateway, local_subnet, local_dns_ip);server.begin();//启动服务器开始服务myduoji.attach(DuoPin);//连接舵机myduoji.write(98);
}
void loop() {char cmd;WiFiClient client=server.available();//初始化服务器while(client.connected()){//当没有接入的时候client.connected()是0,当接入的时候client.connected()是非零进入循环while(client.available()>0){//判断有没有数据的到来cmd=client.read();//将命令读取到cmdif(cmd=='1'){myduoji.write(98);}else if(cmd=='2'){myduoji.write(180);            }}}
}

编程Wemos服务器,手机TCP工具控制电机的旋转:

#include <Servo.h>
#include "ESP8266WiFi.h"
#define DuoPin 4
#define BehindLight1 5
#define BehindLight0 16
#define BehindRight1 0
#define BehindRight0 2Servo myduoji;
char* ssid = "HUAWEI";
char* passwd = "FHN12345";int port=4466;//端口号
WiFiServer server(port);//设置服务器端口号,将Wemos作为服务器,为其他设备接入提供端口号,server是自己定义的IPAddress local_static_ip(192,168,43,5);
IPAddress local_gateway(192,168,43,1);
IPAddress local_subnet(255,255,255,0);
IPAddress local_dns_ip(192,168,43,1);
void initL9()//初始化L9电机驱动模块
{pinMode(BehindLight1,OUTPUT);pinMode(BehindLight0,OUTPUT);pinMode(BehindRight1,OUTPUT);pinMode(BehindRight0,OUTPUT);
}
void initSg()
{myduoji.write(105); 
}
void forward()
{digitalWrite(BehindLight1,HIGH);digitalWrite(BehindLight0,LOW);digitalWrite(BehindRight1,HIGH);digitalWrite(BehindRight0,LOW);
}
void retreat()
{digitalWrite(BehindLight1,LOW);digitalWrite(BehindLight0,HIGH);digitalWrite(BehindRight1,LOW);digitalWrite(BehindRight0,HIGH);
}
void Stop()
{digitalWrite(BehindLight1,LOW);digitalWrite(BehindLight0,LOW);digitalWrite(BehindRight1,LOW);digitalWrite(BehindRight0,LOW);
}
void setup() {Serial.begin(115200);// Set WiFi to station modeWiFi.mode(WIFI_STA);WiFi.begin(ssid, passwd);WiFi.config(local_static_ip, local_gateway, local_subnet, local_dns_ip);server.begin();//启动服务器开始服务myduoji.attach(DuoPin);//连接舵机initSg();initL9();
}
void loop() {char cmd;WiFiClient client=server.available();//初始化服务器while(client.connected()){//当没有接入的时候client.connected()是0,当接入的时候client.connected()是非零进入循环while(client.available()>0){//判断有没有数据的到来cmd=client.read();//将命令读取到cmdif(cmd=='1'){forward();delay(2000);Stop();}else if(cmd=='2'){retreat();delay(2000);Stop();           }}}Serial.println(WiFi.localIP());
}

代码的综合实现:

#include <Servo.h>
#include "ESP8266WiFi.h"
#define DuoPin 4
#define BehindLight1 5
#define BehindLight0 16
#define BehindRight1 0
#define BehindRight0 2
#define Beep D5
Servo myduoji;
char* ssid = "HUAWEI";
char* passwd = "FHN12345";int port = 4466; //端口号
WiFiServer server(port);//设置服务器端口号,将Wemos作为服务器,为其他设备接入提供端口号,server是自己定义的IPAddress local_static_ip(192, 168, 43, 5);
IPAddress local_gateway(192, 168, 43, 1);
IPAddress local_subnet(255, 255, 255, 0);
IPAddress local_dns_ip(192, 168, 43, 1);
void initL9()//初始化L9电机驱动模块
{pinMode(BehindLight1, OUTPUT);pinMode(BehindLight0, OUTPUT);pinMode(BehindRight1, OUTPUT);pinMode(BehindRight0, OUTPUT);
}
void initSg()
{myduoji.write(105);
}
void forward()
{digitalWrite(BehindLight1, HIGH);digitalWrite(BehindLight0, LOW);digitalWrite(BehindRight1, HIGH);digitalWrite(BehindRight0, LOW);
}
void retreat()
{digitalWrite(BehindLight1, LOW);digitalWrite(BehindLight0, HIGH);digitalWrite(BehindRight1, LOW);digitalWrite(BehindRight0, HIGH);
}
void Stop()
{digitalWrite(BehindLight1, LOW);digitalWrite(BehindLight0, LOW);digitalWrite(BehindRight1, LOW);digitalWrite(BehindRight0, LOW);
}
void Lift()
{myduoji.write(135);
}
void Right()
{myduoji.write(75);
}
void initBeep()
{pinMode(Beep, OUTPUT);digitalWrite(Beep, HIGH);
}
void Bee()
{while (WiFi.status() != WL_CONNECTED) //判断是否接入WiFi,如果接入WiFi.status()=WL_CONNECTED{digitalWrite(Beep, LOW);delay(1000);digitalWrite(Beep, HIGH);delay(1000);}
}
void setup() {Serial.begin(115200);// Set WiFi to station modeWiFi.mode(WIFI_STA);WiFi.begin(ssid, passwd);WiFi.config(local_static_ip, local_gateway, local_subnet, local_dns_ip);server.begin();//启动服务器开始服务myduoji.attach(DuoPin);//连接舵机initBeep();initSg();initL9();}
void loop() {char cmd;Bee();//如果处于未连接状态,蜂鸣器响WiFiClient client = server.available(); //初始化服务器while (client.connected()) { //当没有接入的时候client.connected()是0,当接入的时候client.connected()是非零进入循环while (client.available() > 0) { //判断有没有数据的到来cmd = client.read(); //将命令读取到cmdswitch (cmd) {case'q':forward();break;case'h':retreat();break;case'z':Lift();break;case'y':Right();break;case's':Stop();break;case'd':initSg();break;}}}Serial.println(WiFi.localIP());
}

安卓app的设置:

  • 导入工程文件

  • 在这里插入图片描述


  • 在这里插入图片描述


  • 在这里插入图片描述

  • ④在电脑的模拟器上面运行
    在这里插入图片描述

  • ⑤如果不能在虚拟机上运行,则按以下步骤执行,打开Eclipse的路径找到platform-tools
    在这里插入图片描述

  • ⑥找到SDK
    在这里插入图片描述

  • ⑦找到adb.exe并复制路径
    在这里插入图片描述

  • ⑧找到对应的盘,输入adb的路径,dir查看路径下的文件。并输入adb connect 127.0.0.1:62001,这里127.0.0.1是本机地址,62001是模拟器端口号。
    在这里插入图片描述
    在这里插入图片描述

将程序发送到手机:程序在bin文件夹下面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

yum常用命令整理

yum命令的形式一般如下。要说明的是以下演示中所使用到的PACKAGE、GROUP都是变量&#xff0c;需要保证运行yum命令的主机能连接外网&#xff0c;否则大部分命令将由于没有网络连接而不能输出结果。yum [options] [command] [package]#以下演示中大写的单词是变量1.安装操作yum …

CSS3 2D 转换

CSS3 2D 转换 先看兼容性 transform属性向应用元素应用2d 或者 3d装换&#xff1b;该属性允许我们进行旋转&#xff0c;缩放&#xff0c;移动或者倾斜&#xff1b; 基本语法&#xff1a; transform: none|transform-functions;transform-function&#xff1a;这东东有n的函数可…

程序猿最喜欢说的30句话

虽然代码总会有这个那个问题&#xff0c;但程序猿却总有谜一般的从容和自信。上图来自&#xff1a;《当程序出问题时程序员最喜欢说的30句话》来看看程序猿经常说的话&#xff1a;1、在我的电脑上是正常的啊。。。2、不可能出现这种情况的3、快了&#xff0c;已经完成了90%。4、…

linux环境下Ncurses实现贪吃蛇游戏

游戏说明&#xff1a; linux环境下基于Ncurses图形库的C语言小游戏。 Ncurses介绍&#xff1a; Ncurses(new curses)是一套编程库&#xff0c;它提供了一系列的函数以便使用者调用它们去生成基于文本的用户界面。 Ncurses是一个能提供功能键定义(快捷键),屏幕绘制以及基于文本…

C#实现简体繁体转换代码示例

//简体转繁体 public static string _ConvertChinTrad(string strInput) { EncodeRobert edControl new EncodeRobert(); string strResult ""; if (strInput null) return strResult; if (strInput.ToString().Length > 1) strResult edControl.SCTCConvert(…

java基础JDK的安装和环境变量的配置

JRE和JDK&#xff1a; JRE是java程序运行时环境&#xff0c;包含JVM&#xff08;相当于java在不同操作系统上运行时java和操作系统之间的翻译&#xff0c;保证java程序的跨平台&#xff09;和运行时所需要的核心库。所以我们想要运行一个已有的java程序&#xff0c;那么只需要…

C#通过SMTP发送邮件代码示例

1、新建SMTP.cs类库文件 public class SMTP { /// <summary> /// SMTP服务器 /// </summary> public string smtp { get; set; } /// <summary> /// SMTP服务器端口 /// </summary> public int port { get; set; } /// <summary> /// 发件人 ///…

docker下载tomact

docker run -it -p 8080:8080 tomcat 比如下载tomcat,你现在去访问&#xff0c;先访问docker里面的tomcat, 左边的8080是对外暴露的服务端口&#xff0c;对应着右边的8080是tomact的实际端口 下载tomcat 启动tomcat docker run -it -p 8080:8080 tomcat

Wijmo 2016年蓝图

2015年很快就过去了&#xff0c;这是 Wijmo 重要的一年&#xff0c;尤其是对 Wijmo5。脱离传统的小部件&#xff0c;重新写一套 JS 控件&#xff0c;现在看来这个决定是正确的。用 TypeScript 写 Wijmo5&#xff0c;意味着我们没有任何依赖&#xff0c;不再需要 jQuery&#xf…

IDEA安装和运行HelloWorld

IDEA安装&#xff1a; IDEA中Hello World步骤&#xff1a; ① ②点击创建空项目&#xff0c;下一步 ③ ④在打开后会弹出以下界面&#xff0c;然后点击新建模块 ⑤点击新建模块后出现以下界面&#xff0c;选择java并选择JDK的安装路径。 ⑥然后修改模块名称&#xff0c;点击…

C#获取电脑IP、MAC地址示例代码

/// <summary> /// 使用 C# 自带的类库实现计算机信息获取 /// </summary> public class DefaultDeviceInfo { public virtual string GetCpuId() { try { string cpuInfo " "; ManagementClass cimobject new ManagementClass("Win32_Processor…

docker运行随机分配端口

docker run -d -it -P tomcat -P这个是大写的P&#xff0c;表示随机分配端口 执行后可以看到32768为随机分配的端口&#xff0c;8080是tomcat端口 测试成功

C# Stream 和 byte[] 之间的转换

/// <summary> /// 将 Stream 转成 byte[] /// </summary> public byte[] StreamToBytes(Stream stream) { byte[] bytes new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); // 设置当前流的位置为流的开始 stream.Seek(0, SeekOrigin.Begi…

docker下如何进入到容器中

1:查看容器 docker ps -a 2:进入容器 docker exec -it e3cc80415dc7 /bin/bash 退出容器 exit

java方法和 IDEA Debug调试

方法的概述&#xff1a; 方法就是将具有独立功能的代码块&#xff0c;组织成为一个整体&#xff0c;使其具有特殊功能的代码集。我感觉方法就是类里面的函数 注意&#xff1a; 方法必须先创建才可以使用&#xff0c;该过程称为方法的定义。方法创建后并不是直接运行的&#xf…

编译性语言、解释性语言和脚本语言的区别

计算机是不能理解高级语言&#xff0c;当然也就不能直接执行高级语言了。计算机只能直接理解机器语言&#xff0c;所以任何语言&#xff0c;都必须将其翻译成机器语言&#xff0c;计算机才能运行高级语言编写的程序。 一、翻译和解释的不同 翻译的方式有两种&#xff0c;一个是…

为什么JAVA的垃圾回收机制无法避免内存泄漏

一、本文参考&#xff1a;1.《深入理解java虚拟机 JVM高级特性与最佳实践》2.http://coderevisited.com/memory-leaks-in-java/二、对象已死的判定方法要进行JVM中对象回收首先要判断对象是否已经死亡&#xff0c;判断的方法有如下几个&#xff1a;1.引用计数法给对象中添加一个…