赞
踩

特性

ArduiNo开发环境,和keil对比
优点:
集成很多开发库如串口,网络,sg90等
各种硬件开发接口,迅捷开发
自带串口调试工具
缺点: 程序编译速度慢

Wemos同Arduino
上电后不断执行loop函数中的代码,我们核心控制代码写入loop
setup函数只调用一次,一般用于硬件相关的初始化,比如IO口,串口,wifi等
void setup()
{
}
void loop()
{
}

//基础控制:蜂鸣器叫唤和不叫唤
void setup()
{
pinMode(D5, OUTPUT); //设置引脚为输出引脚
}
void loop()
{
digitalWrite(D5, HIGH); // 输出高电平,蜂鸣器闭嘴
delay(1000); //这一秒内都得闭嘴
digitalWrite(D5, LOW); //输出低电平,蜂鸣器吼起来
delay(1000); //吼一秒(延时期间,蜂鸣器控制引脚属于低电平)
}
电脑和单片机,单片机和单片机之间都可以互相传数据,串口是一个有线传输的方式,像usb传输一样,比如鼠标滑动,单击就是发生了鼠标数据发送给电脑,从而实现操控。
串口有关的函数:

串口与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)蜂鸣器不响 } } }
板载无线网卡:支持AP(路由), sta(上网设备)模式

作为设备接入wifi(STA模式)
#include <ESP8266WiFi.h> 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 <ESP8266WiFi.h> #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); } } } }
超声波测距原理:


超声波测距编程实现(距离小于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); }

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; } } }
一. 编程软件 Eclipse AD下载,解压。
二. 安卓模拟器(夜神),适合 没安卓手机的同学,下载,双击像普通程序一样安装。
Android导入程序包


Android修改代码支持你的Wemos


项目整合:实现小车方向控制,如果小车距离障碍物的距离小于10厘米 ,再按前进蜂鸣器就会报警,并后退一定的距离 。
Arduino完整编程代码:
#include <ESP8266WiFi.h> #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; //回正 } } } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。