Wemos D1 实现小车的控制
Wemos D1上搭载板载无线网卡
支持AP(路由),STA(上网设备模式)
AP :相当于路由器允许其他设备接入。
STA:相当于手机可连接其他无线设备。
Wemos的WiFi模块测试(代码如下):
#include<ESP8266WiFi.h> char* ssid = "TP-LINK"; char* passwd = "111111111"; void InitWifiSta() { WiFi.mode(WIFI_STA); WiFi.begin(ssid, passwd); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } } void setup() { InitWifiSta(); Serial.begin(115200); } void loop(){ Serial.println(WiFi.localIP()); delay(500); }
C/S:客户端/服务器模式
服务器两大要素:
地址 :ip地址,域名等
端口号 :一台电脑或者设备有多个服务每个服务用端口号区别
用Wemos D1架设一个简单的ftp服务器(代码如下):
#include<ESP8266WiFi.h> char* ssid = "hpy"; char* passwd = "2225341578"; int port=8888; WiFiServer server(port); void InitWifiSta() { WiFi.mode(WIFI_STA); WiFi.begin(ssid, passwd); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(WiFi.localIP()); } void setup() { Serial.begin(115200); InitWifiSta(); server.begin(); } void loop(){ char cmd; WiFiClient client = server.available(); while (client.connected()) { while (client.available() > 0) { cmd = client.read(); if(cmd=='1'){ Serial.println("hpy1"); } else { Serial.println("hpy2"); } } } }
注:手机上下载一个 tcp App,通过APP连接板载WiFi
控制方式:
B-1A —-B-2A —-电机1
0 ——— 1 ——- 正转(假设)
1 ——— 0 ——- 反转
0 ——— 0 ——- 不转
1 ——— 1 ——- 不转
A-1A —- A-2 —- 电机1
0 ——— 1 ——- 正转(假设)
1 ——— 0 ——- 反转
0 ——— 0 ——- 不转
1 ——— 1 ——- 不转
测试L9110s步进电机控制器(用串口实现代码如下):
#define Dong1 D6 #define Dong2 D7 #define Zhuan1 D4 #define Zhuan2 D5 void InitL9110s(){ pinMode(Dong1,OUTPUT); pinMode(Dong2,OUTPUT); pinMode(Zhuan1,OUTPUT); pinMode(Zhuan2,OUTPUT); } void qian(){ digitalWrite(Dong1,LOW); digitalWrite(Dong2,HIGH); } void hou(){ digitalWrite(Dong1,HIGH); digitalWrite(Dong2,LOW); } void zuo(){ digitalWrite(Zhuan1,HIGH); digitalWrite(Zhuan2,LOW); } void you(){ digitalWrite(Zhuan1,LOW); digitalWrite(Zhuan2,HIGH); } void setup() { InitL9110s(); Serial.begin(115200); } void loop(){ char c; if(Serial.available()>0){ c=Serial.read(); switch(c){ case 'q': qian();break; case 'h': hou(); break; case 'z': zuo(); break; case 'y': you(); break; } } }
注:此时小车必须通过Wemos连接在电脑上通过串口调试助手实现小车的控制。
串口实现小车的控制必须通过usb数据线与电脑连接,小车不能自由的运动。WiFi方式就实现了小车随意运动。
WiFi实现小车的前后运动(测试代码如下):
#include<ESP8266WiFi.h> #define Dong1 D6 #define Dong2 D7 #define Zhuan1 D4 #define Zhuan2 D5 void InitL9110s(){ pinMode(Dong1,OUTPUT); pinMode(Dong2,OUTPUT); pinMode(Zhuan1,OUTPUT); pinMode(Zhuan2,OUTPUT); } void qian(){ digitalWrite(Dong1,LOW); digitalWrite(Dong2,HIGH); } void hou(){ digitalWrite(Dong1,HIGH); digitalWrite(Dong2,LOW); } void zuo(){ digitalWrite(Zhuan1,HIGH); digitalWrite(Zhuan2,LOW); } void you(){ digitalWrite(Zhuan1,LOW); digitalWrite(Zhuan2,HIGH); } char* ssid="hpy"; char* passwd="2225341578"; void InitWiFi(){ WiFi.mode(WIFI_STA); WiFi.begin(ssid,passwd); while(WiFi.status()!=WL_CONNECTED){ Serial.print("."); delay(500); } Serial.println(WiFi.localIP()); } int port=8888; WiFiServer server(port); void setup() { Serial.begin(115200); InitL9110s(); InitWiFi(); server.begin(); } void loop(){ char c; WiFiClient client=server.available(); while(client.connected()){ while(client.available()>0){ c=client.read(); switch(c){ case 'q': qian();break; case 'h': hou();break; case 'z': zuo();break; case 'y': you(); break; } } } }
注:如此就可以实现小车脱离电脑自由运动,可在手机上下载一个 tcp App,通过APP连接板载WiFi并发送数据给板子上的服务器实现小车的自由运动。
当小车在行驶过程中如果遇到障碍物使小车可以紧急制动并倒退
(测试代码如下):
#include<ESP8266WiFi.h> #define Echo D2 #define Trig D8 #define Dong1 D6 #define Dong2 D7 #define Zhuan1 D4 #define Zhuan2 D5 void initL9110s(){ pinMode(Dong1,OUTPUT); pinMode(Dong2,OUTPUT); pinMode(Zhuan1,OUTPUT); pinMode(Zhuan2,OUTPUT); } void qian(){ digitalWrite(Dong1,LOW); digitalWrite(Dong2,HIGH); } void hou(){ digitalWrite(Dong1,HIGH); digitalWrite(Dong2,LOW); } void ting(){ digitalWrite(Dong1,LOW); digitalWrite(Dong2,LOW); } void zuo(){ digitalWrite(Zhuan1,HIGH); digitalWrite(Zhuan2,LOW); } void you(){ digitalWrite(Zhuan1,LOW); digitalWrite(Zhuan2,HIGH); } void zhen(){ digitalWrite(Zhuan1,LOW); digitalWrite(Zhuan2,LOW); } char* ssid="hpy"; char* passwd="2225341578"; void initWiFi(){ WiFi.mode(WIFI_STA); WiFi.begin(ssid,passwd); while(WiFi.status()!=WL_CONNECTED){ Serial.print("."); delay(500); } Serial.println(WiFi.localIP()); } int port=6666; WiFiServer server(port); long gettime(){ digitalWrite(Trig,HIGH); delayMicroseconds(10); digitalWrite(Trig,LOW); return pulseIn(Echo,HIGH); } void initchaosheng(){ pinMode(Trig,OUTPUT); pinMode(Echo,INPUT); } void setup() { Serial.begin(115200); initchaosheng(); initL9110s(); initWiFi(); server.begin(); } void loop(){ char c; long dis; WiFiClient client=server.available(); while(client.connected()){ while(client.available()>0){ dis=gettime()/58; Serial.println(dis); c=client.read(); Serial.println(c); switch(c){ case 'q': if(dis<10){ hou(); delay(500); qian(); }else{ qian(); } break; case 'h': hou(); break; case 't': ting();break; case 'z': zuo(); break; case 'y': you(); break; case 'v': zhen();break; } } } }
实现小车的自由运动最重要的就是实现WiFi连接以及在开发版上搭建一个服务器用来控制小车的运动。
