找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 31383|回复: 19
打印 上一主题 下一主题
收起左侧

基于51单片机的WIFI遥控小车设计报告

  [复制链接]
跳转到指定楼层
楼主
ID:367693 发表于 2018-7-9 10:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实践报告
基于51单片机的WIFI遥控小车设计

目录
第1章 绪论
第2章 方案论证及选择
2.1 系统方案选择
2.2 总体设计方案
2.2.1 整机系统
2.1.2 整机工作原理
第3章 硬件系统设计
3.1 路由器
3.2 ESP8266WIFI模块
3.2.1 ESP8266WIFI模块引脚功能
3.3 STC89C52RC单片机
3.3.1 STC89C52RC单片机引脚功能
3.3.2 单片机的外围电路
3.4 L293D电机驱动模块
3.4.1 L293D引脚功能及原理图
3.5 3.3V降/稳压模块
3.5.1 降/稳压模块的原理图
3.6 5V和3.3V串口电平转换模块
3.6.1 引脚功能和原理图
第4章 软件系统设计
4.1 软件开发环境
4.1.1 Android的APP软件的开发
4.1.2 单片机程序开发环境 Keil
4.2 程序流程图
4.2.1 主程序流程图
4.2.2 串口中断接收流程图
4.2.3 串口发送指令流程图
第5章 设备调试
5.1 系统调试
5.2 硬件设备调试
5.2.1 ESP8266串口WIFI的连线
5.2.2 STC89C52RC单片机连线
5.2.3 单片机和WIFI模块的连线
5.3 软件调试
5.3.1 WIFI模块的调试
5.3.2 单片机的调试
5.3.3 单片机和WIFI模块的调试
心得体会
总结
参考文献
附录1 单片机程序


1 绪论
现在是一个智能化的时代,各种智能化的设备正在逐步代替人为的操作。随着汽车工业的迅速发展,关于智能汽车的研究也越来越受人们关注。全国电子大赛和省内电子大赛几乎每次都智能小车这方面的题目,全国各高校也都很重视该课题的研究。设计的WIFI智能小车能够实现自动循迹,壁障功能,可程控行驶速度、电脑手机WIFI连接控制行驶及其他的控制方式。本系统能实现对小车的运动状态进行实时控制。系统控制灵活、可靠、精度高、可满足对系统的各项要求。本设计以STC89C52RC单片机为控制核心,利用ESP8266WIFI模块和路由器接收和处理无线信号,然后通过WIFI模块和单片机之间的串口通信来传递信息,从而完成手机控制单片机的运作。通过对本小车的研究,我们可以初步构建智能汽车的模型和理论基础。对于智能汽车的研究,国内外都有很大的成就,谷歌的无人驾驶汽车,已经能够在高速公路上安全行驶数千里,在高速行驶下都能有这么好的操控能力,无非是智能汽车领域的一座里程碑。
在智能家居系统研发方面,美国及一些欧洲国家一致处于领先地位,今年来,以美国微软公司及摩托罗拉公司等为首的一批国外知名企业,先后跻身于智能家居系统的研发中。例如:微软公司开发的“梦幻之家”、摩托罗拉公司开发的“居所之门”IBM公司开发的“家庭主任”等均已日趋成稳定技术强占家居市场。此外,日韩等新国的龙头企业纷纷致力于家居智能化的开发,对家居市场更是跃跃欲试。
本设计选用的89C52单片机属于MSC-51系列单片机,由Intel公司开发,其结构有8字节FLASH闪速存储器,256字节内部RAM , 32个I/O口线,3个16 位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89c52可降至O Hz的静态逻辑操作,并支持两种软件可选的节电上作模式。空闲方式停止CPU 的工作,但允许RAM,定时/计数器.串行通信口及中断系统继续工作。掉电方式保存RAM 中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。由于89C52的系统性能满足系统数据采集及时间精度要求,而且产品产量丰富来源广,应用也很成熟,故用来作为控制核心。新一代单片机为外部提供了相当完善的总线结构,为系统的扩展与配置打下了良好的基础。本设计主要研究内容就是基于89C52设计一部WIFI智能小车,小车能够实现WIFI遥控的智能小车控制系统。

2 方案论证及选择
2.1 系统方案
选择
方案1:自己首先学习相关知识,理解单片机智能小车的原理以及WIFI模块指令等。动手设计出带有WIFI模块的单片机开发板,在配购好小车相关的材料后,组装出小车模型。调试好WIFI模块和单片机的硬件和软件,然后用手机等终端设备通过路由器驱动WIFI小车的运动等一系列指令。具体的如图2-1所示。
下图是关于方案1设计版图构想,如图2-1所示。
2-1 方案1设计图
方案2:自己首先学习相关知识,理解单片机智能小车的原理以及单片机和WIFI之间的通信方式,了解WIFI模块的相关指令,以及单片机的串口传输的方式。然后利用已经完成有的单片机小车,通过在单片机小车上添加一个WIFI模块和相关模块来进行改装,然后自己通过设计编写单片机和WIFI模块之间串口通信的程序。利用这样的方法来实现手机终端来通过路由器在无线传输的方式对单片机进行控制,从而进一步的控制小车的运动等一系列指令。具体的如图2-2所示。
下图是关于方案2设计版图构想,如图2-2所示。
图2-2 方案2设计图
方案选择:方案1和方案2涉及的相关知识大致相同,两种不同思路的选择,所需要的材料也不同。介于我们对制作成本和材料考虑,我们小组选择方案2,利用已有的单片机小车,对小车进行改装,在小车上加个WIFI模块等一系列设备,实现手机等终端设备通过无线信号控制小车的运动。选择方案2,我们认为可以加强我们的动手能力,能够充分的学习和利用相关的专业知识,达到综合素质的提升。
2.2 总体设计方案
              基于单片机的WIFI智能小车主要由路由器、ESP8266WIFI模块、STC89C52RC单片机控制模块、L293D电机驱动模块、5V与3.3V串口电平转换模块和3.3V降/稳压模块等主要结构组成,其中还有一些次要设备,比如蜂鸣器,LED灯和数码管等。
2.2.1 整机系统
下图是整机系统图,是WIFI模块和单片机之间通信的整体图,如图2-3所示。
图2-3 整机系统图
项目系统包括路由器、ESP8266串口WIFI模块、STC89C52RC单片机、电机驱动模块、串口电平转换模块、5V电源、3.3v降/稳压模块、电机驱动模块组成。如图2-3所示。
              ESP8266串口WIFI模块是用来接收到手机等上位机设备发送的控制指令信息和单片机通过串口通信传来的AT指令信息来连接到路由器,然后创建多连接和SERVER模式,来实现手机和WIFI模块之间的通信;STC89C52RC单片机最小系统是小车的核心系统,用来控制和协调小车的运动;电机驱动模块用来驱动小车电机的运作;5V和3.3V串口电平转换模块是用来转换单片机和WIFI模块之间的信号电平,主要是适用于本模块的工作电压;电源电路用来提供单片机和WIFI模块的外部电源;3.3v降/稳压模块用来给WIFI模块提供一个3.3v稳定的工作电压;蜂鸣器电路作用是用来给单片机一个提示音;电机作用就是让小车的轮子转动,来使小车动起来。
2.1.2 整机工作原理
              基于单片机的WIFI智能小车是STC89C52RC单片机通过其串口对ESP8266WIFI模块发送AT指令,使ESP8266WIFI模块连接到路由器并且让ESP8266WIFI模块开启多连接和SERVER模式,然后手机打开WLAN连接路由器设备,打开制作好的APP软件,通过路由器这个中转站向ESP8266WIFI模块发送控制指令,在ESP8266WIFI模块接收到控制指令后,通过ESP8266WIFI模块的串口和STC89C52RC单片机上的串口之间相互发送控制指令的数据流,单片机的串口在接收到从WIFI模块传来的控制指令的数据流,最终做出控制选择,进而控制小车运动、指示灯的亮灭、蜂鸣器的开关和数码管的显示。如:小车运动,LED灯的亮灭,蜂鸣器的发声等。
基于单片机的WIFI智能小车主要是利用手机作为上位机,而单片机作为下位机,通过WIFI模块和路由器进行对无线信号的处理,然后通过串口传送有线的信号,从而实现上位机通过无线来控制下位机的运作,实现智能化和无线遥控等功能。

3 硬件系统设计3.1 路由器
路由器(Router),(如图3-1所示)是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。 路由器是互联网络的枢纽"交通警察"。目前路由器已经广泛应用于各行各业,各种不同档次的产品已成为实现各种骨干网内部连接、骨干网间互联和骨干网与互联网互联互通业务的主力军。路由和交换机之间的主要区别就是交换机发生在OSI参考模型第二层(数据链路层),而路由发生在第三层,即网络层。这一区别决定了路由和交换机在移动信息的过程中需使用不同的控制信息,所以说两者实现各自功能的方式是不同的。
路由器(Router),(如图3-1所示)又称网关设备(Gateway)是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。当数据从一个子网传输到另一个子网时,可通过路由器的路由功能来完成。因此,路由器具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。
下图是路由器的设备图,如图3-1所示。
图3-1 路由器
3.2 ESP8266WIFI模块
              本次设计用到ESP8266WIFI模块是用于连接到路由器,然后接收手机端发送的信号,对单片机进行控制。
              WIFI模块又名串口WIFI模块,属于物联网传输层,功能是将串口或TTL电平转为符合WIFI无线网络通信标准的嵌入式模块,内置无线网络协议IEEE802.11b.g.n协议以及TCP/IP协议。传统的硬件设备嵌入WIFI模块可以直接利用WIFI联入互联网,是实现无线智能家居、M2M等物联网应用的重要组成部分。
下图是ESP8266WIFI模块的正反面图,如图3-2,3-3所示。
                                                                     
图3-2 ESP8266WIFI模块正面图图3-3 ESP8266WIFI模块反面图
ESP8266是一款超低功耗的模块,拥有业内极富竞争力的封装尺寸和超低能耗技术,专为移动设备和互联网的应用设计,可将用户的物理设备连接到WIFI无线网络上,进行互联网或局域网通信,实现联网功能。
ESP8266可广泛应用于智能电网、智能交通、智能家具、手持设备、工业控制等领域。
3.2.1 ESP8266WIFI模块引脚功能
下图是ESP8266WIFI模块的引脚图,如图3-4所示。
图3-4 ESP8266WIFI模块引脚图
下表是ESP8266WIFI模块引脚说明,如表2所示。
表2                                                                                    ESP8266WIFI模块引脚表
PIN
Function
Description
1
URXD
  • UART_RXD,接收;
  • General Purpose Input/Output:GPIO3;
2
UTXD
  • UART_TXD,发送;
2)General Purpose Input/Output:GPIO1;
3)开机时禁止下拉;
3
RESET(GPIO 16)
外部Reset信号,低电平复位,高电平工作(默认高);
4
GND
GND
5
VCC
3.3V,模块供电;
6
GPIO0
  • 默认WIFI Status:WIFI工作状态指示灯控制信号;
  • 工作模式选择:
   悬空:Flash Boot,工作模式;
   下拉:UART Download,下载模式;
7
CH_PD
  • 高电平工作;
  • 低电平模块供电关掉;
8
GPIO2
  • 开机上电时必须为高电平,禁止硬件下拉;
  • 内部默认已拉高
3.3 STC89C52RC单片机
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM,32位I/O 口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。
下图是STC89C52RC单片机的实物图,如图3-5所示。
图3-5 STC89C52RC单片机
3.3.1 STC89C52RC单片机引脚功能
下图是STC89C52RC单片机的引脚功能图,如图3-6所示。

图3-6 STC89C52RC引脚图
1、VCC(40引脚):电源电压VSS(20引脚):接地P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。此时,P0口内部上拉电阻有效。在Flash ROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。
2、P1端口(P1.0~P1.7,1~8引脚):P1口是一个内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使用时,因为有内部上拉电阻, 那些被外部拉低的引脚会输出一个电流。
此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),具体参见下表3所示:
表3                                                                                    P1.0和P1.1引脚复用功能表
引脚号
功能特性
P1.0
T2(定时器/计数器2外部计数输入),时钟输出
P1.1
T2EX(定时器/计数器2捕获/重装触发和方向控制)

3、P2端口(P2.0~P2.7,21~28引脚):P2口是一个内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。
4、P3端口(P3.0~P3.7,10~17引脚):P3是一个内部上拉电阻的8位双向I/O端口。P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流。
P3口除作为一般I/O口外,还有其他一些复用功能,如下表4所示:
表4                                                                                                  P3口引脚复用功能
引脚号
复用功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
INT0(外部中断0)
P3.3
INT1(外部中断1)
P3.4
T0(定时器0的外部输入)
P3.5
T1(定时器1的外部输入)
P3.6
(外部数据存储器、写)
P3.7
(外部数据存储器、读)

5、RST(9引脚):复位输入。当输入连续两个机器周期以上高电平时为有效,用来完成单片机的复位初始化操作。看门狗计时完成后,RST引脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。
6、ALE/PROG(30引脚):地址锁存控制信号(ALE)是访问外部程序 存储器时,锁存低8位地址的输出脉冲。在Flash编程时,此引脚(PROG)也用作编程输入脉冲。
7、PSEN(29 引脚):外部程序存储器选通信号(PSEN)是外部 程序存储器选通信号。当AT89C51RC 从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,PSEN而访问外部数据存储器时,将不被激活。
8、EA/VPP(31引脚):访问外部程序存储器控制信号。为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。注意加密方式1时,EA将内部锁定RESET。为了执行内部程序指令,EA应该接VCC。
9、XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端。
10、XTAL2(18引脚):振荡器反相放大器的输入端。
3.3.2 单片机的外围电路

1、基本复位电路

复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。图3-7所示的RC复位电路可以实现上述基本功能。
下图是RC复位电路,如图3-7所示。
图3-7 RC复位电路
在电源上电的时候,等待一定的时间,等到电容两端的电压值相同时,单片机复位。还有一种方法就是按键复位,当SM按键按下之后RST端的电压值瞬间和VCC相同,同样也可以达到复位的效果,图中的电容作用是充放电,电阻是为了保护电路而设置的。

2、时钟电路

晶振是晶体振荡器的简称,在电气上它可以等效成一个电容和一个电阻并联后,再串联一个电容的二端网络,电工学上这个网络有两个谐振点,以频率的高低,其中较低的频率是串联谐振,较高的频率是并联谐振。由于晶体自身的特性致使这两个频率的距离相当的接近,在这个极窄的频率范围内,晶振等效为一个电感。所以,晶振的两端并联上合适的电容它就会组成并联谐振电路。
下图是时钟电路的电路图,如图3-8所示。
图3-8 时钟电路的电路图
一般的晶振振荡电路都是在一个反相放大器(注意是放大器不是反相器)的两端接入晶振,再有两个电容分别接到晶振的两端,每个电容的另一端再接到地,这两个电容串联的容量值就应该等于负载电容,请注意一般IC的引脚都有等效输入电容。
3.4 L293D电机驱动模块
              我们所使用的电机一般是直流电机,主要用到永磁直流电机、伺服电机及步进电机三种。直流电机的控制很简单,性能出众,直流电源也容易实现。
本次设计使用的是L293D(如图3-8所示),L293D是一款单片集成的高电压、高电流、4通道电机驱动,设计用于连接标准DTL或TTL逻辑电平,驱动电感负载(诸如继电线圈、DC和步进电机)和开关功率晶体管等等。
下图是L293D电机驱动模块在单片机作用下驱动电机运动图,如图3-9所示。
图3-9 单片机驱动电机模块图
3.4.1 L293D引脚功能及原理图
下图是L293D芯片引脚图,如图3-10所示。
图3-10 L293D芯片引脚图
1、INPUT1:输入电机1的引脚A。
2、INPUT2:输入电机1的引脚B。
3、INPUT3:输入电机2的引脚A。
4、INPUT4:输入电机2的引脚B。
5、GND:电源地接口。
6、VSS:输入电机驱动电压接口。
7、OUTPUT1:输出电机1的引脚A。
8、OUTPUT2:输出电机1的引脚B。
9、OUTPUT3:输出电机2的引脚A。
10、OUTPUT4:输出电机2的引脚B。
下图是电机驱动模块和单片机原理图,如图3-11所示。
图3-11 电机驱动模块和单片机原理图
单片机的P0的8个端口在位定义之后对L293D电机模块的4个INPUT写入各不同的高低电平,经L293D芯片内部的转换之后,在OUTPUT输出4个相应的电平值,分别对应M1和M2的两个电机A端和B端,从而控制电机M1和M2的正转和反转,进而实现小车的前进,后退,左转和右转等功能。
3.5 3.3V降/稳压模块
              降/稳压模块是,通过降压和稳压的过程,给设备提供一个稳定的工作环境,能够提供不同的工作电压设备在同一电源电压下同时工作,应用于单片机上能添加不同工作电压的电子设备。
下图是降/稳压模块图,如图3-12所示。
图3-12 AMS111 7-3.3 3.3V降/稳压模块
将单片机上的5V的电源转换为3.3V的稳压电源,提供给正常工作电压是3.3V的电子设备,实现给5V和3.3V电压之间的转换,提供了能和单片机同时工作且电压值可以不同的电子设备。比如,ESP8266串口WIFI模块。
下图是单片机的VCC通过降/稳压模块给WIFI模块供电,如图3-12所示。
图3-12 降/稳压模块给WIFI模块供电图
3.5.1 降/稳压模块的原理图
下图是降/稳压模块的原理图,如图3-13所示。
图3-13 降/稳压模块的原理图
              上图所示,D1作用是防止电源反接。C01、C02是电源输入滤波。VDD3.3是3.3V电源,供数字电路使用。 L1、L2是隔离滤波电感。VCC3.3是3.3V电源,供模拟电路使用。电源在通过AMS111 7-3.3 3.3V降/稳压电路,电源电压由原来的5V降为3.3V,可以提供给正常工作在3.3V的设备使用。
3.6 5V和3.3V串口电平转换模块
数字电路,电平就是电位的高低,用0和1表示。在计算机或者其他微处理器内部只能识别0和1这两个数字信号,不同的系统电平表示的0和1实际的电位并不相同。例如,高电平常用3.3V,5V,12V,低电平常用0,当不同的系统进行连接通信控制时,就要进行电平转换。打个比方,单片机的高电位为5v,而电脑的串口电平为12V,要实现电脑到单片机通信就必须将电脑的12V转到单片机的5V,反之,5V转到12V。
下图是串口电平转换模块图,如图3-14所示。
3-14 5V和3.3V串口电平转换模块图
              本项目的单片机是STC89C52RC,其工作电压是5V,而WIFI模块的工作电压是3.3V,由于两者工作电压不一致,导致了信号的电平也不一致。要想两个设备之间能够进行通信,就必须要对信号电平进行转换,实现5V的电平和3.3V的电平之间能够通信,完成数据间的交换。
下图是单片机和WIFI模块通过串口电平转换模块进行通信的图,如图3-15所示。
图3-15 单片机和WIFI模块电平相互转换图
3.6.1 引脚功能和原理图
下图是串口电平转换的引脚图,如图3-16所示。
图3-16 串口电平转换的引脚图
1、5V和3.3V:由外电源接入5V和3.3V电源电压。
2、GND:电源接地接口。
3、TXD:数据发送引脚。
4、RXD:数据接收引脚。
下图是5V和3.3V串口电平转换电路图,如图3-17所示。
图3-17 5V和3.3V串口电平转换电路图
上图的电路中,3.3V的信号通过两个三极管Q1,Q2的两次放大,再配合上合适的电阻R1、R2、R3进行转换,完成了3.3V到5V信号的变换。5V信号同样通过相反的方式将信号变成了3.3V的输出,从而可以实现了数据能够在3.3V和5V之间的相互通信。

第4章 软件系统设计4.1 软件开发环境
              软件开发环境的主要组成成分是软件工具。人机界面是软件开发环境与用户之间的一个统一的交互式对话系统,它是软件开发环境的重要质量标志。存储各种软件工具加工所产生的软件产品或半成品(如 软件开发环境参考书 软件开发环境参考书 源代码、测试数据和各种文档资料等)的软件环境数据库是软件开发环境的核心。
4.1.1 Android的APP软件的开发
              Android开发需要用到Eclipse、ADT和SDK。三个组件整合开发。
1、Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。如图15所示。
下图是安卓开发环境界面,如图4-1所示
图4-1 安卓开发环境界面
2、ADT:目前Android开发所用的开发工具主要有Android Studio、Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升级或者变更,简单理解为在Eclipse下开发工具的升级下载工具。
              3、SDK:一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。在Android中,它为开发者提供了库文件以及其它开发所用到的工具。简单理解为开发工具包集合,是整体开发中所用到的工具包。
4.1.2 单片机程序开发环境 Keil
              Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。如图4-2所示。
下图是单片机开发环境界面,如图4-2所示。
图4-2 单片机开发环境界面
4.2 程序流程图4.2.1 主程序流程图
              系统主程序模块主要完成对系统中各模块电路的初始化等工作,主要包括对串口中断、外部中断的初始化,同时执行电脑等终端设备所发送的命令,等待外部中段以及根据所需要的功能进行相应的操作。
下图是主程序流程图,如图4-3所示。
图4-3 主程序流程图
              单片机首先设置好串口初始化,比如设置好波特率。然后向WIFI模块发送AT指令,使WIFI模块连接上路由器,并创建好服务连接。之后手机通过连接到路由器向WIFI模块发送无线的控制指令,单片机在接收到WIFI模块从串口传来的数据后,马上进入中断函数来执行接收数据的模式。接收到的控制指令存储在寄存器中,单片机在寄存器中读取接收到的控制指令,然后根据接收到命令的不同,执行小车不同的动作。比如,小车前进、后退、左转、右转和停止等。
下图是单片机对串口进行初始化的程序图,如图4-4所示。
图4-4 串口初始化程序图
              由于WIFI模块的波特率是115200,那么单片机为了要和WIFI模块进行数据间的通信,就要把两端的波特率设置成一致,这样才能够保证双方通信的正常进行。如上图,首先给T1(TMOD)选择工作模式,然后给TH1和TL1赋初始值,然后启动T1和T2(TR2位)
,确定串口工作方式(编写SCON寄存器)。
下图是单片机在接收到信号后发送给电机模块来驱动电机,从而使小车运动的程序图,如图4-5所示。
图4-5 单片机驱使小车前进的程序图
              单片机在接收到WIFI模块传来的无线数据,通过switch语句来选择小车的运动模式,上图只选择小车前进的简单程序。小车的单片机在接到前进的信号时,就进入选择小车运行的模式这个程序中,判断接收到的信号和小车预先设置的值是否一致,若一致,则小车进入那种模式,直到等待下次接收到的数据再来判断。
4.2.2 串口中断接收流程图
              通过串口中断,实现单片机和路由器进行通讯。进入中断后关掉中断,避免数据信号的重复引起中断。根据命令数据发送的规律,将命令解码储存在相应的二维数组中,方便主函数的调用。
下图是串口中断接收流程图,如图4-6所示。
图4-6 串口中断接收流程图
              上图是串口中断函数,进入串口中断函数之后,首先要把RI至0,因为在单片机的串口接收存储数据后RI会自动的变成1,所以每次进入串口中断的时候要把RI先至0。然后判断RI是否为1,是用来判断数据是否接收完毕,不是的话继续接收,是的话就将数据存储在单片机的存储器中,等待单片机到存储器中读取接收到的数据,进一步执行单片机的控制动作。
下图是通过串口中断接收流程图编写的程序图,如图4-7所示。
图4-7 串口中断接收数据的程序图
              中断接收函数,首先要把RI置0,然后等待数据的传输。等待数据传输完毕后,RI会自动跳到1,判断RI=1后,先把数据存储在寄存器中,然后单片机对寄存器中的数据读取后,判断接收到的数据和预先设置的值是否一致,若一致,则进入小车运行的模式函数。
4.2.3 串口发送指令流程图
              单片机通过串口向WIFI模块发送指令,控制WIFI模块的模式,以便手机接入WIFI模块。在发送指令时,要关闭串口中断,避免在发送数据时串口中断的产生,引起指令发送错误。在指令发送完毕后,打开串口中断,允许中断函数对单片机作用。
下图是串口发送指令流程图,如图4-8所示。
图4-8 串口发送指令流程图
              上图是串口发送指令的流程图,在本项目中是单片机用来向WIFI模块发送AT指令的。首先要关闭中断源的允许位,目的是为了在发送数据的时候,不会因为中断函数的请求而去执行中断函数,避免了数据发送的错误。然后将TI至0,原因和前面所讲的RI至0是一样的。单片机为了发送数据,同样的是单片机不能单独的发送或者接收数据,在发送数据之前,都要把数据先存储在寄存器中,在发送数据的时候,就在存储器中进行读取。判断TI是否为1,是为了判断传输是否完成,和前面所讲的判断RI是否为1是一样的道理。在传输完成之后要将TI至0,以便下次的传输数据。数据传输完成后,要打开中断源的允许位,进行串口中断接收WIFI模块发送而来的数据。
下图是根据串口中断发送指令流程图来编写的程序,如图4-9
图4-9 串口中断发送数据的程序图
              首先把串口中断关闭,防止串口中断引发数据间的干扰,然后将TI置0,将数据存入串口寄存器中,等待数据传输完毕,然后再将TI置0,随后便打开串口中断,便可进行串口中断数据接收。
第5章 设备调试5.1 系统调试
本智能小车是由ESP8266WIFI模块和STC89C52RC单片机组成。设计思路是由WIFI模块连到路由器,然后接收到手机终端发出的信号,通过串口发送给单片机,单片机在接到控制信号后来控制电机的运转。
具体步骤分为硬件设备调试和软件调试两个方面来进行。在硬件设备的连线完成后,要分别对WIFI模块,单片机进行调试,确保每个元器件在单独的环境下可以正常工作,之后把各个元器件连接成一个整体,完成整个的项目,实现手机无线控制单片机小车的运动。
5.2 硬件设备调试
由于此实物焊接量、装配工作量大。所以在电路安装完成后,首先应对系统进行整体检查,确认电路无虚焊、短路、断路等错误。然后应该对电路各个模块进行分级调试,逐步实现系统的整体功能。
然后对设备进行连线设置,每个模块之间的连线都有一定的联系,要按照这特有的联系来进行连线设置。比如,WIFI模块的工作电压是3.3V,要接在降压模块下,才能正常工作。单片机要和WIFI模块进行通信,就要对两者之间的信号电平进行转换,使其达到适合自己的工作电压来进行相互的通信。如图5-1。
下图是整个硬件设备之间的连线图,如图5-1所示。
图5-1 硬件设备连线图
5.2.1 ESP8266串口WIFI的连线
              由于WIFI模块(图5-1)出厂已经配置完成。其中CH_PD处于低电平是使供电模块关闭,处于高电平是处于工作状态,所以要将CH_PD引脚和VCC相连。由于单片机和WIFI之间要用串口通信,是要用到串口的端口TXD和RXD,要求是交叉连接,意思就是将单片机的RXD和WIFI模块的TXD相连,单片机的TXD和WIFI模块的RXD相连,VCC接3.3V电压,接地要和单片机共地连接。如图5-2。
下图是WIFI模块的引脚接线图,如图5-2所示。
图5-2 WIFI模块引脚的连线图
5.2.2 STC89C52RC单片机连线
              单片机上有RXD和TXD口,其和WIFI模块连线时,是属于交叉连线。但是和电脑之间的连线,是要通过MAX232芯片进行电平转换,因为单片机的是5V的工作电源,电脑的是12V串口电压,以此来达到合适彼此工作电压的电平来进行数据交换的。当然除此之外,单片机上还要接复位电路和时钟(晶振)电路,晶振电路用来设置单片机的波特率,以达到和WIFI模块的波特率一致。
下图是单片机的接线图,如图5-3所示。
图5-3 单片机引脚接线图
5.2.3 单片机和WIFI模块的连线
              在单片机连线完成后,WIFI模块要处在工作状态,将CH_PD拉高后。进入了关键的一步,那就是单片机和WIFI模块之间的连线,这关系到WIFI模块和单片机之间的通信的成功与否。因为单片机和WIFI模块的工作电压不一致,导致了它们所产生的电平信号也不一致。因此,在本设计时,要添加降/稳压模块和电平转换模块,单片机和WIFI模块要配合使用这两个模块,在这两个模块的同时作用下完成单片机和WIFI模块之间的通信。
下图是单片机和WIFI模块之间的连接图,如图5-4所示。
图5-4 单片机和WIFI模块的连线图
5.3 软件调试
此系统的软件程序使用java和C语言编写。首先选择单片机开发板作为调试的载体,逐步对各个模块的子程序进行调试,然后将各个模块的子程序模块进行有机的联合,最终完成整个系统的调试。
本次项目所要用到的调试工具有:sscom4.2测试版,用于WIFI模块的调试如图5-2所示;串口调试助手,用于单片机的通信使用,如图5-6所示。
本次项目调试的步骤是:首先将WIFI模块通过串口和电脑能够相互进行通信和控制,然后是单片机通过串口和电脑直接通信和控制,最后一步就是把WIFI模块和单片机之间通过连线,将其连接起来,完成最终的串口数据的相互通信。
5.3.1 WIFI模块的调试
              由于本设计中,ESP8266WIFI模块只需要输入AT指令进行调试配置,不需要对WIFI模块的内部程序进行改动,所以WIFI模块只需要接收单片机端发来的AT指令,便可以进入SERVER模式。
ESP8266WIFI模块在电脑上调试的主要目的是:通过电脑发出的指令,通过WIFI模块的串口传送给WIFI模块。方向是电脑控制单片机和单片机反馈信号给电脑。是单片机和电脑之间的通信,这是调试步骤的第一步,配置好WIFI模块。
              WIFI模块调试所需要用到的调试工具是:sscom4.2测试版。这个软件是专门用作WIFI模块和电脑之间的通信之间的一个桥梁。提供WIFI模块和电脑之间的通信,并且在软件的界面显示WIFI模块向电脑发送的数据。
下图是sscom4.2测试版的软件操作界面,如图5-5所示。
图5-5 sscom4.2测试版的软件操作界面
5.3.1.1 WIFI模块调试步骤
步骤1:将WIFI模块的VCC,GND,TXD,RXD和USB转串口(TTL)连好后,打开串口调试的软件,给WIFI模块上电,会出现乱码。
步骤2:然后向WIFI模块发送AT指令(详见附录2:AT指令集)。(注意要把发送新行打勾)
发送的指令有: AT+CWMODE=1              //选择station模式
                                                                      AT+RST              //重启WIFI模块
                                                                      AT+CWLAP              //查询可用的AP
                                                                      AT+CWJAP=<SSID>,<password>              //加入AP,
如 AT+CWJAP=“KEN”,”20142014”
                                                                      AT+CIPMUX=1              //启动多连接
                                                                      AT+CIPSERVER=1,8080            
//开启SERVER服务,通道号为8080。
在发送指令后会出现 OK。
步骤3:然后将手机连入WIFI模块创建的SERVER当中,向WIFI模块发送消息,如图所示,WIFI模块的IP地址是172.16.11.74,通道是8080。并且在电脑的串口调试软件上,就会显示出WIFI模块通过串口传来的手机消息。
下图是WIFI模块SERVER服务打开成功图,如图5-6所示。
图5-6 WIFI开启SERVER服务
5.3.2 单片机调试
单片机和电脑串口通信的主要目的是单片机通过和电脑之间的串口通信,实现电脑控制单片机和单片机传输数据到电脑,并且单片机传输给电脑的数据在调试助手上显示出来。
单片机调试所需要用到的工具是串口调试助手。这个软件是用作单片机和电脑之间通信的一个平台,能够提供单片机的收与发都能通过串口在电脑上进行显示。还有一个主要的作用是,单片机写好对接收到的信息进行比对来完成单片机的动作,完成一个简单的电脑发送信息控制单片机动作。简单来说就是用电脑来模拟WIFI模块对单片机进行控制。
下图是单片机和电脑之间通信的操作界面图,如图5-7所示。
图5-7 单片机和电脑之间通信的操作界面图
5.3.2.1 单片机调试步骤
步骤1:该步骤主要是用来使电脑通过串口对单片机进行控制,编好单片机通过串口接收到电脑的信号,在单片机预先编好的程序中,选择性的运行单片机的某个指令动作。
步骤2:通过串口调试助手,输入控制信息,在电脑上通过串口对单片机发送控制信息,如图所示,若单片机接到信息后,有做出相应的反应,则电脑和单片机的串口调试连通。
5.3.3 单片机和WIFI模块的调试
在此之前的WIFI模块和单片机都和电脑之间可以相互进行通信,由于双方实现的都是和电脑之间控制。要实现WIFI模块和单片机之间的通信,就要把单片机和WIFI模块进行连通,完成单片机和WIFI模块进行数据传输,便能够实现手机控制单片机控制。
单片机编写有关的发送与接收的程序和控制电机的程序,然后给WIFI模块和单片机通电。单片机向WIFI模块发送AT指令,用来创建SERVER服务等一系列指令。然后手机通过给WIFI模块发送信息,WIFI模块通过串口传送给单片机。
下图是小车完成后的实体图,如图5-8所示
图5-8 小车整体效果图

心得体会
              通过本次WIFI智能小车的理论学习、论文编写和实物的制作,进一步的认识到了自身存在的不足。特别是自己在WIFI模块方面知识的欠缺,这使得我在小车起步制作时WIFI模块部分,花费了大量的时间。但我通过在网上不断的查询相关的资料,在网上请教这方面的高手,最终我还是完成了WIFI模块部分的处理。但是我还是不知道其中具体的一些细节的原理,如WIFI模块为什么不能和单片机进行通信。还有在整机装配的时候我没有注意到一些细节的地方,这使得我把小车拆装了多次。想要把事情做好提高效率,这就需要注意学习生活工作中做事的细节,以及对自己知识的扩充。
              同时,通过这次的毕业设计,我的各方面能力也得到了大幅度的提高。在知识上,一方面,我系统的总结了自己的专业知识,明确了自己今后事业的发展方向。另一方面,我如饥似渴的自学了单片机及外围电路知识,并通过自己独立对软件的编写和实物的制作,最终完成了整个WIFI智能小车的设计。在能力上:我通过不断查阅资料、与师生交流学习新知识、在网上请教相关的人士,然后将自己沉淀后的知识和经验运用到实际电路设计理念中,丰富其功能和质量。在综合素质上,我虽然遇到很多的挑战和困难,但从未想过放弃,最终凭借自己百折不挠、勇于研究的精神解决了这些技术难点。
              当然,由于我的知识和能力有限,整个设计还有很多不足之处有待完善和改进,恳求老师指教,这必将是我在踏上工作岗位之前的最大一笔收获。

总结
              本次项目的成果是基于WIFI的智能小车,完成了小车的组装,程序的设计,以及实现了手机等终端与小车之间的无线通信。
              在设计的过程中,学习了关于WIFI指令的相关知识,还有的是WIFI模块和单片机之间的串口通信方式以及过程。学会了从一个简单的想法到具体实物的制作流程以及方法,从制作小车的过程中遇到了很多的困难,遇到了许多从来没有见过的知识。最终,还是通过在网上查找资料,完成了小车最后的测试作业,实现了本次设计的要求。
在论文的写作过程中遇到了无数的困难和障碍,都在同学和老师的帮助下度过了。尤其要强烈感谢我的论文指导老师—谭传武老师,他对我进行了无私的指导和帮助,不厌其烦的帮助进行论文的修改和改进。另外,在校图书馆查找资料的时候,图书馆的老师也给我提供了很多方面的支持与帮助。在此向帮助和指导过我的各位老师表示衷心的感谢!
感谢这篇论文所涉及到的各位学者。本文引用了数位学者的研究文献,如果没有各位学者的研究成果的帮助和启发,我将很难完成本篇论文的写作。感谢我的同学和朋友,在我写论文的过程中给予我很多的素材,还在论文的撰写和排版灯过程中提供热情的帮助。
本次设计的成果,完整的叙述了对基于51单片机的WIFI智能小车的制作流程以及相关知识。同时也了解了我国在智能小车这块的重视,随着时间的流转,在未来,智能时代也会成为主导时代,设备也将会变成智能化,人们的生活也将会变得更加方便,更加简单。我相信在不久的将来,智能小车必将进入服务行业,为我们大家的生活和工作服务。
由于我的学术水平有限,所写论文难免有不足之处,恳请各位老师和学友批评和指正!

单片机源程序如下:
  1. /*************************************************
  2. 文件名:智能WIFI小车
  3. 描述:通过手机发送无线信号,在WIFI模块进行接收,发送至单片机,从而
  4.               控制小车的运动。
  5. *************************************************/
  6. #include <reg52.h>
  7. #define RunLed P1                 
  8. #define ShowPort P2              
  9. #define uchar unsigned char
  10. sbit M1A=P0^0;                //位定义电机1正
  11. sbit M1B=P0^1;                //位定义电机1负
  12. sbit M2A=P0^2;                //位定义电机2正
  13. sbit M2B=P0^3;                //位定义电机2负
  14. void tingzhi()                //停止
  15. {
  16.    M1A=0;                                 
  17.    M1B=0;                                 
  18.    M2A=0;                                
  19.    M2B=0;
  20. }
  21. void qianjin()                 //前进
  22. {
  23.    M1A=1;                                 
  24.    M1B=0;                                 
  25.    M2A=1;                                 
  26.    M2B=0;
  27. }
  28. void houtui()                 //后退
  29. {
  30.    M1A=0;                                 
  31.    M1B=1;                                 
  32.    M2A=0;                                 
  33.    M2B=1;
  34. }
  35. void youzhuan()                            //右转
  36. {
  37.    M1A=0;                                 
  38.    M1B=1;                                 
  39.    M2A=1;                                 
  40.    M2B=0;
  41. }
  42. void zuozhuan()                            //左转
  43. {
  44.    M1A=1;                                 
  45.    M1B=0;                                 
  46.    M2A=0;                                 
  47.    M2B=1;
  48. }
  49. void delay(int i)                 //延时函数
  50. {
  51.               int j,k;
  52.               for(j=0;j<i;j++)
  53.               for(k=0;k<j;k++);
  54. }
  55. void ms_delay(int t)               //延时ms函数
  56. {
  57.               int k,j;
  58.               for(k=t;k>0;k--)  
  59.               for(j=110;j>0;j--);
  60. }
  61. void init_serial()                              //串口初始化,设置波特率115200
  62. {
  63.               TMOD=0x20;
  64.     TH1=0xFF;         
  65.     TL1=0xFD;
  66.               SCON=0x50;  
  67.     RCAP2H=0xFF;  
  68.     RCAP2L=0xFD;
  69.               TCLK=1;  
  70.               RCLK=1;  
  71.     C_T2=0;  
  72.     EXEN2=0;              
  73.     TR2=1 ;
  74.               TI=0;            
  75. }
  76. void Send_Uart(uchar value)              //单片机数据发送
  77. {
  78.               ES=0;                                              //串口中断关闭
  79.               TI=0;                                             
  80.               SBUF=value;                               //将数据放入串口寄存器中
  81.               while(TI==0);  
  82.               TI=0;
  83.               ES=1;  
  84. }            
  85. void ESP8266_Set(uchar *puf)     // WIFI模块接收到单片机的AT指令         
  86. {   
  87.               while(*puf!='\0')   
  88.               {  
  89.                             Send_Uart(*puf);   
  90.                             ms_delay(50);
  91.                             puf++;
  92.                             delay(50);  
  93.               }  
  94.               delay(500);
  95. }
  96. void ControlCar(unsigned char ConType)    //选择小车运行的模式
  97. {
  98.               tingzhi();
  99.               switch(ConType)                     
  100.               {
  101.                             case 1:                        
  102.                             {
  103.                                           tingzhi();                                                                                   
  104.                                           //delay(240);
  105.                                           qianjin();
  106.                                           delay(240);
  107.                                           break;
  108.                             }
  109.                             case 2: //后退                             
  110.                             {
  111.                                           tingzhi();                                                                                                
  112.                                           //delay(240);
  113.                                           houtui();
  114.                                           delay(240);
  115.                                           break;
  116.                             }
  117.                             case 3: //左转                             
  118.                             {
  119.                                           tingzhi();                                                                                                               
  120.                                           // delay(240);
  121.                                           zuozhuan();                             
  122.                                           delay(240);
  123.                                           break;
  124.                             }
  125.                             case 4:                             
  126.                             {
  127.                                           tingzhi();                                                                                                               
  128.                                           //delay(240);
  129.                                           youzhuan();                              
  130.                                           delay(240);
  131.                                           break;
  132.                             }
  133.                             case 0: //停止                        
  134.                             {
  135.                                           tingzhi();
  136.                                           break;                              
  137.                             }
  138.               }
  139. }
  140. void ComBreak() interrupt 4     //中断函数,单片机判断串口接收到的数据  
  141. {
  142.               unsigned char RecvData;         
  143.               if(RI==1)                       
  144.               {
  145.                             RecvData=SBUF;          //从串口寄存器中读取数据      
  146.                             if(RecvData=='T')               
  147.                             {
  148.                                           ControlCar(0);
  149.                             }
  150.                             if(RecvData=='S')            
  151.                             {
  152.                                           ControlCar(1);
  153.                             }
  154.                             if(RecvData=='X')            
  155.                             {
  156.                                           ControlCar(2);
  157.                             }
  158.                             if(RecvData=='Z')            
  159.                             {
  160.                                           ControlCar(3);
  161.                             }
  162.                             if(RecvData=='Y')            
  163.                             {
  164.                                           ControlCar(4);
  165.                             }
  166.                             if(RecvData=='D')            
  167.                             {
  168.                                           P1=0xff;                //灯灭
  169.                             }
  170. ……………………

  171. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

Word文档下载:
基于单片机的WIFI智能小车设计.docx (3.62 MB, 下载次数: 273)


评分

参与人数 1黑币 +8 收起 理由
穿着安踏去拉萨 + 8 谢谢您

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏7 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:367693 发表于 2018-7-9 10:06 | 只看该作者
附件中是word文档
回复

使用道具 举报

板凳
ID:425723 发表于 2018-11-13 15:38 | 只看该作者
超级好!谢谢楼主
回复

使用道具 举报

地板
ID:424073 发表于 2018-11-13 21:51 | 只看该作者
谢谢楼主
回复

使用道具 举报

5#
ID:426241 发表于 2018-12-1 14:29 来自手机 | 只看该作者
谢谢楼主,非常感谢!
回复

使用道具 举报

6#
ID:464637 发表于 2019-3-13 17:52 | 只看该作者
谢谢楼主,感谢
回复

使用道具 举报

7#
ID:544857 发表于 2019-5-22 17:30 | 只看该作者

谢谢楼主
回复

使用道具 举报

8#
ID:469585 发表于 2019-10-9 17:22 | 只看该作者
感谢楼主
回复

使用道具 举报

9#
ID:423228 发表于 2019-10-15 15:45 | 只看该作者
谢谢楼主,非常感谢!
回复

使用道具 举报

10#
ID:499701 发表于 2019-10-17 13:35 | 只看该作者
正在学习8266.谢谢分享
回复

使用道具 举报

11#
ID:625659 发表于 2019-10-17 15:32 | 只看该作者
感谢分享
回复

使用道具 举报

12#
ID:676501 发表于 2019-12-29 11:09 | 只看该作者
感谢楼主的分享
回复

使用道具 举报

13#
ID:676501 发表于 2019-12-29 11:41 | 只看该作者
我在使用那个对ESP8266发送at指令的函数的时候,ESP8266总是只接收到第一条at指令是怎么回事
回复

使用道具 举报

14#
ID:600695 发表于 2019-12-29 13:20 | 只看该作者
做个记号以后学
回复

使用道具 举报

15#
ID:633269 发表于 2020-3-20 15:16 | 只看该作者
请问有完整的原理图吗?
回复

使用道具 举报

16#
ID:628703 发表于 2020-3-21 14:14 | 只看该作者
好精彩的东西,谢谢分享!
回复

使用道具 举报

17#
ID:628703 发表于 2020-3-21 15:22 | 只看该作者
没有完整的代码
回复

使用道具 举报

18#
ID:739705 发表于 2020-4-29 11:41 | 只看该作者
你好 ,有APP的代码吗
回复

使用道具 举报

19#
ID:985705 发表于 2021-11-29 19:29 | 只看该作者
xxd123 发表于 2018-7-9 10:06
附件中有完整代码

你好大哥,您这边有那个手机端控制的app吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表