基于Wemos的wifi避障小车
一、主要硬件
WeMos D1
特性
- 基于ESP-8266EX
- Arduino兼容,使用rduino IDE来编程
- 11 x I/O 引脚
- 1 x ADC 引脚(输入范围0-3.3V)
- 板载5V 1A开关电源(高输入电压24V)
- 板载无线网卡。支持AP(路由), sta(上网设备)模式
工作中:
和stm32模块开发类似,集成度高
STM32方案也更经济便宜
超声波模块
超声波传感器模块上面通常有两个超声波元器件,一个用于发射,一个用于接收。电路板上有4个引脚: VCC (正极)、Trig (触发),Echo(回应),GND(接地),
主要参数:
·工作电压与电流:5V、15mA。
·感测距离:2~400cm
·感测角度:不大于15°。
·被测物的面积不要小于50cm2并且尽量平整。具备温度补偿电路。
在超声波模块的触发脚位输入10微妙以上的高电位,即可发射超声波,发射超声波之后,与接收到传回的超声波之前,“响应”脚位呈现高电位。因此,程序可从“响应”脚位的高电位脉冲持续时间,换算出被测物的距离。
L9110s步进电机控制器
B-1A B-2A 电机1
0 1 正转(假设)
1 0 反转
0 0 不转
1 1 不转
A-1A A-1B 电机2
0 1 正转(假设)
1 0 反转
0 0 不转
1 1 不转
二、开发环境ArduiNo
ArduiNo开发环境,和keil对比
优点: 集成很多开发库如串口,网络,sg90等
各种硬件开发接口,迅捷开发
自带串口调试工具
缺点: 程序编译速度慢
代码
#include <ESP8266WiFi.h>
char* ssid = "***"; //WiFi热点名称
char* passwd = "*********"; //WiFi密码
int port = ****; //端口号
WiFiServer server(port); // 设置服务器端口号
#define Dong1 D6
#define Dong2 D7
#define Zhuan1 D4
#define Zhuan2 D5
#define Echo D2
#define Trig D8
long getTime() {
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
return pulseIn(Echo, HIGH);
}
void iniyChaoShengBo() {
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 zuo() {
digitalWrite(Zhuan1, HIGH);
digitalWrite(Zhuan2, LOW);
}
void zheng() {
digitalWrite(Zhuan1, HIGH);
digitalWrite(Zhuan2, HIGH);
}
void you() {
digitalWrite(Zhuan1, LOW);
digitalWrite(Zhuan2, HIGH);
}
void ting() {
digitalWrite(Dong1, LOW);
digitalWrite(Dong2, LOW);
}
void setup() {
Serial.begin(115200);
initWifiSta();
iniyChaoShengBo();
initL9110s();
}
void loop() {
char cmd;
long dis;
int mark = 0;
WiFiClient client = server.available(); //服务初始化
server.begin();
while (client.connected()) { //等待客户端连接
while (client.available() > 0) { //有数据到来,类似串口的那个函数
cmd = client.read();//读取数据
dis = getTime() / 58;
if (dis < 10) {
hou();
delay(200);
ting();
mark = 1;
} else {
mark = 0;
}
if (mark == 0) {
switch (cmd) {
case 'q': {
qian();
Serial.println("q");
} break;
case 'h': {
hou();
Serial.println("h");
} break;
case 'z': {
zuo();
Serial.println("z");
} break;
case 'y': {
you();
Serial.println("y");
} break;
case 's': {
ting();
Serial.println("z");
} break;
case 'd': {
zheng();
Serial.println("y");
} break;
}
}
}
}
}