完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一,开发环境搭建
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; //回正 } } } } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1975 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1760 浏览 1 评论
1232 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
819 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1776 浏览 2 评论
2015浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
889浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
318浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
670浏览 3评论
661浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-23 12:40 , Processed in 1.219278 second(s), Total 43, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191