一,开发环境搭建
1.硬件平台介绍WeMos D1
特性
基于ESP-8266EX
Arduino兼容,使用rduino IDE来编程
11 x I/O 引脚
1 x ADC 引脚(输入范围0-3.3V)
板载5V 1A开关电源(高输入电压24V)
2.开发环境介绍
ArduiNo开发环境,和keil对比
优点:
集成很多开发库如串口,网络,sg90等
各种硬件开发接口,迅捷开发
自带串口调试工具
缺点: 程序编译速度慢
3.开发环境配置支持Wemos
Wemos同Arduino
上电后不断执行loop函数中的代码,我们核心控制代码写入loop
setup函数只调用一次,一般用于硬件相关的初始化,比如IO口,串口,wifi等
void setup()
{
}
void loop()
{
}
二,各个模块在wemos 上的驱动演示
1.驱动蜂鸣器
//基础控制:蜂鸣器叫唤和不叫唤
void setup()
{
pinMode(D5, OUTPUT); //设置引脚为输出引脚
}
void loop()
{
digitalWrite(D5, HIGH); // 输出高电平,蜂鸣器闭嘴
delay(1000); //这一秒内都得闭嘴
digitalWrite(D5, LOW); //输出低电平,蜂鸣器吼起来
delay(1000); //吼一秒(延时期间,蜂鸣器控制引脚属于低电平)
}
2.Wemos串口通信
电脑和单片机,单片机和单片机之间都可以互相传数据,串口是一个有线传输的方式,像u***传输一样,比如鼠标滑动,单击就是发生了鼠标数据发送给电脑,从而实现操控。
串口有关的函数:
串口与wemos的简单通信:
串口控制蜂鸣器代码:
#define BEEP D5
void setup() {
Serial.begin(115200); //初始化串口,设置波特率为115200
pinMode(BEEP, OUTPUT); //设置引脚为输出引脚
digitalWrite(BEEP, HIGH); // 上电不让蜂鸣器响起
}
void loop()
{
int cmd;
if ( Serial.available() > 0 )
{ //检测串口是否有数据
cmd = Serial.read(); // 读取串口数据
Serial.println(cmd);
if (cmd == 1) { //如果读取的数据是1
digitalWrite(BEEP, LOW); // 蜂鸣器响起
}
else
{
digitalWrite(BEEP, HIGH); // 否则(读取数据非1)蜂鸣器不响
}
}
}
3.Wemos和wifi
板载无线网卡:支持AP(路由), sta(上网设备)模式
作为设备接入wifi(STA模式)
#include
char* ssid = "CMCC-9u3s"; //“wifi热点名称”
char* passwd = "xiuru6k9"; //”wifi热点密码”
void initWifiSta()
{
WiFi.mode(WIFI_STA); // 设置STA模式
WiFi.begin(ssid, passwd); //连接网络
while (WiFi.status() != WL_CONNECTED) //判断WiFi接入状态
{
Serial.print(".");
delay(500);
}
}
void setup() {
//初始化串口
Serial.begin(115200);
//初始化wifi
initWifiSta();
}
void loop() {
Serial.println(WiFi.localIP()); //通过串口打印wemos的IP地址
delay(500);
}
由串口打印出wemos的IP地址:192.168.1.5
手机调试工具发送指令控制蜂鸣器:
编程代码:
#include
#define BEEP D5
char* ssid = "CMCC-9u3s"; //“wifi热点名称”
char* passwd = "xiuru6k9"; //”wifi热点密码”
int port = 8888; //端口号
WiFiServer server(port); // 设置服务器端口号
void initWifiSta()
{
WiFi.mode(WIFI_STA); // 设置STA模式
WiFi.begin(ssid, passwd); //连接网络
while (WiFi.status() != WL_CONNECTED) //判断WiFi接入状态
{
Serial.print(".");
delay(500);
}
Serial.println(WiFi.localIP()); //通过串口打印wemos的IP地址
delay(500);
}
void initBeep()
{
pinMode(BEEP, OUTPUT); //设置引脚为输出引脚
digitalWrite(BEEP, HIGH); // 输出高电平,蜂鸣器闭嘴
}
void setup() {
initBeep(); //初始化蜂鸣器
Serial.begin(115200); //初始化串口
initWifiSta(); //初始化wifi
server.begin(); //启动服务器
}
void loop() {
char cmd;
WiFiClient client = server.available(); //服务初始化
while (client.connected())
{
while (client.available() > 0) //等待客户端连接
{
cmd = client.read();//读取数据
if(cmd == '1')
{
digitalWrite(BEEP, LOW);
}
else
{
digitalWrite(BEEP, HIGH);
}
}
}
}
4.Wemos和超声波测距
超声波测距原理:
超声波测距编程实现(距离小于10触发蜂鸣器发出声音):
#define Echo D2
#define Trig D8
#define BEEP D5
long getTime()
{
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);
return pulseIn(Echo,HIGH);
}
void initChaoShengBo()
{
pinMode(Echo,INPUT);
pinMode(Trig,OUTPUT);
}
void initBeep()
{
pinMode(BEEP,OUTPUT);
digitalWrite(BEEP,HIGH);
}
void setup()
{
initChaoShengBo();
initBeep();
Serial.begin(115200);
}
void loop()
{
//获取距离
long dis;
dis = getTime()/58;
Serial.print(dis);
Serial.println("cm");
if(dis < 10)
{
digitalWrite(BEEP,LOW);
}
else
{
digitalWrite(BEEP,HIGH);
}
delay(500);
}
5.Wemos和L9110s步进电机控制器
L9110s步进电机控制器:
串口控制小车主要代码:
#define Dong1 D6
#define Dong2 D7
#define Zhuan1 D3
#define Zhuan2 D4
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,LOW);
digitalWrite(Zhuan2,HIGH);
}
void you()
{
digitalWrite(Zhuan1,HIGH);
digitalWrite(Zhuan2,LOW);
}
void setup()
{
initL9110s();
Serial.begin(115200);
}
void loop()
{
char cmd;
if(Serial.available() > 0)
{
cmd = Serial.read();
switch(cmd)
{
case 'q': qian();break;
case 'h': hou();break;
case 'z': zuo();break;
case 'y': you();break;
}
}
}
三,安卓APP控制小车
1.Android开发环境搭建
一. 编程软件 Eclipse AD下载,解压。
二. 安卓模拟器(夜神),适合 没安卓手机的同学,下载,双击像普通程序一样安装。
Android导入程序包
Android修改代码支持你的Wemos
2.项目整合以及在安卓模拟器上运行演示
项目整合:实现小车方向控制,如果小车距离障碍物的距离小于10厘米 ,再按前进蜂鸣器就会报警,并后退一定的距离 。
Arduino完整编程代码:
#include
#define Dong1 D6
#define Dong2 D7
#define Zhuan1 D3
#define Zhuan2 D4
#define Echo D2
#define Trig D8
#define BEEP D5
/******************************************************************************/
/* */
/* wifi模块函数 */
/******************************************************************************/
char* ssid = "CMCC-9u3s"; //“wifi热点名称”
char* passwd = "xiuru6k9"; //”wifi热点密码”
int port = 8888; //端口号
WiFiServer server(port); // 设置服务器端口号
void initWifiSta()
{
WiFi.mode(WIFI_STA); // 设置STA模式
WiFi.begin(ssid, passwd); //连接网络
while (WiFi.status() != WL_CONNECTED) //判断WiFi接入状态
{
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 you()
{
digitalWrite(Zhuan1,HIGH);
digitalWrite(Zhuan2,LOW);
}
void zheng()
{
digitalWrite(Zhuan1,LOW);
digitalWrite(Zhuan2,LOW);
}
/******************************************************************************/
/* */
/* 超声波测距模块函数 */
/******************************************************************************/
long getTime()
{
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);
return pulseIn(Echo,HIGH);
}
void initChaoShengBo()
{
pinMode(Echo,INPUT);
pinMode(Trig,OUTPUT);
}
/******************************************************************************/
/* */
/* 蜂鸣器模块函数 */
/******************************************************************************/
void initBeep()
{
pinMode(BEEP,OUTPUT);
digitalWrite(BEEP,HIGH);
}
/******************************************************************************/
/* */
/* 各个模块初始化函数 */
/******************************************************************************/
void setup()
{
initL9110s();
Serial.begin(115200);
initWifiSta();
server.begin();
initChaoShengBo();
initBeep();
}
/******************************************************************************/
/* 主循环函数:实现小车方向控制,如果小车距离障碍物的距离小于10厘米 */
/* 再按前进蜂鸣器就会报警,并后退一定的距离 */
/******************************************************************************/
void loop()
{
char cmd;
int flag = 0;
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 )
{
digitalWrite(BEEP,LOW);
hou();
delay(200);
ting();
digitalWrite(BEEP,HIGH);
flag = 1;
}
else
{
flag = 0;
}
if(flag == 0)
{
switch(cmd)
{
case 'q': qian(); break; //前进
case 'h': hou(); break; //后退
case 'z': zuo(); break; //左转
case 'y': you(); break; //右转
case 's': ting(); break; //停止
case 'd': zheng(); break; //回正
}
}
}
}
}
一,开发环境搭建
1.硬件平台介绍WeMos D1
特性
基于ESP-8266EX
Arduino兼容,使用rduino IDE来编程
11 x I/O 引脚
1 x ADC 引脚(输入范围0-3.3V)
板载5V 1A开关电源(高输入电压24V)
2.开发环境介绍
ArduiNo开发环境,和keil对比
优点:
集成很多开发库如串口,网络,sg90等
各种硬件开发接口,迅捷开发
自带串口调试工具
缺点: 程序编译速度慢
3.开发环境配置支持Wemos
Wemos同Arduino
上电后不断执行loop函数中的代码,我们核心控制代码写入loop
setup函数只调用一次,一般用于硬件相关的初始化,比如IO口,串口,wifi等
void setup()
{
}
void loop()
{
}
二,各个模块在wemos 上的驱动演示
1.驱动蜂鸣器
//基础控制:蜂鸣器叫唤和不叫唤
void setup()
{
pinMode(D5, OUTPUT); //设置引脚为输出引脚
}
void loop()
{
digitalWrite(D5, HIGH); // 输出高电平,蜂鸣器闭嘴
delay(1000); //这一秒内都得闭嘴
digitalWrite(D5, LOW); //输出低电平,蜂鸣器吼起来
delay(1000); //吼一秒(延时期间,蜂鸣器控制引脚属于低电平)
}
2.Wemos串口通信
电脑和单片机,单片机和单片机之间都可以互相传数据,串口是一个有线传输的方式,像u***传输一样,比如鼠标滑动,单击就是发生了鼠标数据发送给电脑,从而实现操控。
串口有关的函数:
串口与wemos的简单通信:
串口控制蜂鸣器代码:
#define BEEP D5
void setup() {
Serial.begin(115200); //初始化串口,设置波特率为115200
pinMode(BEEP, OUTPUT); //设置引脚为输出引脚
digitalWrite(BEEP, HIGH); // 上电不让蜂鸣器响起
}
void loop()
{
int cmd;
if ( Serial.available() > 0 )
{ //检测串口是否有数据
cmd = Serial.read(); // 读取串口数据
Serial.println(cmd);
if (cmd == 1) { //如果读取的数据是1
digitalWrite(BEEP, LOW); // 蜂鸣器响起
}
else
{
digitalWrite(BEEP, HIGH); // 否则(读取数据非1)蜂鸣器不响
}
}
}
3.Wemos和wifi
板载无线网卡:支持AP(路由), sta(上网设备)模式
作为设备接入wifi(STA模式)
#include
char* ssid = "CMCC-9u3s"; //“wifi热点名称”
char* passwd = "xiuru6k9"; //”wifi热点密码”
void initWifiSta()
{
WiFi.mode(WIFI_STA); // 设置STA模式
WiFi.begin(ssid, passwd); //连接网络
while (WiFi.status() != WL_CONNECTED) //判断WiFi接入状态
{
Serial.print(".");
delay(500);
}
}
void setup() {
//初始化串口
Serial.begin(115200);
//初始化wifi
initWifiSta();
}
void loop() {
Serial.println(WiFi.localIP()); //通过串口打印wemos的IP地址
delay(500);
}
由串口打印出wemos的IP地址:192.168.1.5
手机调试工具发送指令控制蜂鸣器:
编程代码:
#include
#define BEEP D5
char* ssid = "CMCC-9u3s"; //“wifi热点名称”
char* passwd = "xiuru6k9"; //”wifi热点密码”
int port = 8888; //端口号
WiFiServer server(port); // 设置服务器端口号
void initWifiSta()
{
WiFi.mode(WIFI_STA); // 设置STA模式
WiFi.begin(ssid, passwd); //连接网络
while (WiFi.status() != WL_CONNECTED) //判断WiFi接入状态
{
Serial.print(".");
delay(500);
}
Serial.println(WiFi.localIP()); //通过串口打印wemos的IP地址
delay(500);
}
void initBeep()
{
pinMode(BEEP, OUTPUT); //设置引脚为输出引脚
digitalWrite(BEEP, HIGH); // 输出高电平,蜂鸣器闭嘴
}
void setup() {
initBeep(); //初始化蜂鸣器
Serial.begin(115200); //初始化串口
initWifiSta(); //初始化wifi
server.begin(); //启动服务器
}
void loop() {
char cmd;
WiFiClient client = server.available(); //服务初始化
while (client.connected())
{
while (client.available() > 0) //等待客户端连接
{
cmd = client.read();//读取数据
if(cmd == '1')
{
digitalWrite(BEEP, LOW);
}
else
{
digitalWrite(BEEP, HIGH);
}
}
}
}
4.Wemos和超声波测距
超声波测距原理:
超声波测距编程实现(距离小于10触发蜂鸣器发出声音):
#define Echo D2
#define Trig D8
#define BEEP D5
long getTime()
{
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);
return pulseIn(Echo,HIGH);
}
void initChaoShengBo()
{
pinMode(Echo,INPUT);
pinMode(Trig,OUTPUT);
}
void initBeep()
{
pinMode(BEEP,OUTPUT);
digitalWrite(BEEP,HIGH);
}
void setup()
{
initChaoShengBo();
initBeep();
Serial.begin(115200);
}
void loop()
{
//获取距离
long dis;
dis = getTime()/58;
Serial.print(dis);
Serial.println("cm");
if(dis < 10)
{
digitalWrite(BEEP,LOW);
}
else
{
digitalWrite(BEEP,HIGH);
}
delay(500);
}
5.Wemos和L9110s步进电机控制器
L9110s步进电机控制器:
串口控制小车主要代码:
#define Dong1 D6
#define Dong2 D7
#define Zhuan1 D3
#define Zhuan2 D4
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,LOW);
digitalWrite(Zhuan2,HIGH);
}
void you()
{
digitalWrite(Zhuan1,HIGH);
digitalWrite(Zhuan2,LOW);
}
void setup()
{
initL9110s();
Serial.begin(115200);
}
void loop()
{
char cmd;
if(Serial.available() > 0)
{
cmd = Serial.read();
switch(cmd)
{
case 'q': qian();break;
case 'h': hou();break;
case 'z': zuo();break;
case 'y': you();break;
}
}
}
三,安卓APP控制小车
1.Android开发环境搭建
一. 编程软件 Eclipse AD下载,解压。
二. 安卓模拟器(夜神),适合 没安卓手机的同学,下载,双击像普通程序一样安装。
Android导入程序包
Android修改代码支持你的Wemos
2.项目整合以及在安卓模拟器上运行演示
项目整合:实现小车方向控制,如果小车距离障碍物的距离小于10厘米 ,再按前进蜂鸣器就会报警,并后退一定的距离 。
Arduino完整编程代码:
#include
#define Dong1 D6
#define Dong2 D7
#define Zhuan1 D3
#define Zhuan2 D4
#define Echo D2
#define Trig D8
#define BEEP D5
/******************************************************************************/
/* */
/* wifi模块函数 */
/******************************************************************************/
char* ssid = "CMCC-9u3s"; //“wifi热点名称”
char* passwd = "xiuru6k9"; //”wifi热点密码”
int port = 8888; //端口号
WiFiServer server(port); // 设置服务器端口号
void initWifiSta()
{
WiFi.mode(WIFI_STA); // 设置STA模式
WiFi.begin(ssid, passwd); //连接网络
while (WiFi.status() != WL_CONNECTED) //判断WiFi接入状态
{
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 you()
{
digitalWrite(Zhuan1,HIGH);
digitalWrite(Zhuan2,LOW);
}
void zheng()
{
digitalWrite(Zhuan1,LOW);
digitalWrite(Zhuan2,LOW);
}
/******************************************************************************/
/* */
/* 超声波测距模块函数 */
/******************************************************************************/
long getTime()
{
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);
return pulseIn(Echo,HIGH);
}
void initChaoShengBo()
{
pinMode(Echo,INPUT);
pinMode(Trig,OUTPUT);
}
/******************************************************************************/
/* */
/* 蜂鸣器模块函数 */
/******************************************************************************/
void initBeep()
{
pinMode(BEEP,OUTPUT);
digitalWrite(BEEP,HIGH);
}
/******************************************************************************/
/* */
/* 各个模块初始化函数 */
/******************************************************************************/
void setup()
{
initL9110s();
Serial.begin(115200);
initWifiSta();
server.begin();
initChaoShengBo();
initBeep();
}
/******************************************************************************/
/* 主循环函数:实现小车方向控制,如果小车距离障碍物的距离小于10厘米 */
/* 再按前进蜂鸣器就会报警,并后退一定的距离 */
/******************************************************************************/
void loop()
{
char cmd;
int flag = 0;
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 )
{
digitalWrite(BEEP,LOW);
hou();
delay(200);
ting();
digitalWrite(BEEP,HIGH);
flag = 1;
}
else
{
flag = 0;
}
if(flag == 0)
{
switch(cmd)
{
case 'q': qian(); break; //前进
case 'h': hou(); break; //后退
case 'z': zuo(); break; //左转
case 'y': you(); break; //右转
case 's': ting(); break; //停止
case 'd': zheng(); break; //回正
}
}
}
}
}
举报