任务8-5 WIFI遥控小车设计(课件)-《单片机技术与应用》同步教学(电子工业版)

2024-07-11
| 38页
| 42人阅读
| 2人下载
普通

内容正文:

任务8-5 WIFI遥控小车设计 1 一、任务导入 遥控小车使用安卓智能手机作为遥控器,首先在手机端安装“WIFI小车”APP,通过这个APP并利用手机内的WIFI模块发送控制命令,小车端的WIFI模块接收到控制信号后,通过51单片机的串行通信接口将控制信号传给单片机,单片机判断控制信号并作出相应的动作,如此就实现了小车的WIFI遥控。 设计要求 UART 系统框图 ESP8266模块介绍  802.11 b/g/n 频率范围 2.4G-2.5G(2400M-2483.5M)  WIFI @2.4 GHz,支持 WPA/WPA2 安全模式  内置低功率 32 位 CPU:可以兼作应用处理器  SDIO 2.0、 SPI、UART  待机状态消耗功率小于1.0mW (DTIM3)  工作温度范围 -40 ~ 125℃ ESP8266模块 ESP8266模块专用转接板 通过转接板后只引出四个输出线,分别为电源VCC,地GND,信号输出端TXD和信号输入端RXD,并且可以5V供电,可以直接配合51单片机使用,非常方便。由于ESP8266模块支持UART接口,因此把转接板的TXD、RXD分别和51单片机的RXD、TXD相连,通电后就可进行二者之间的串口通信了。 可外接5V电源,直接配合51单片机一起使用 四脚输出VCC、GND、TXD、RXD ESP8266模块专用转接板 WIFI遥控小车的硬件电路图 在程序设计前,需要根据WIFI模块设置单片机的通信协议。这里我们采用的串口通信波特率为9600b/s;数据帧为串口工作方式1的帧格式。手机端发送的控制信号定义如下:字符‘0’代表前进,字符‘1’代表后退,字符‘2’代表左转,字符‘3’代表右转,字符‘5’和‘6’均代表停车。 控制信号 对应的小车执行动作 ‘0’ 前进 ‘1’ 后退 ‘2’ 左转 ‘3’ 右转 ‘5’ 停止 ‘6’ 停止 通信协议约定 二、wifi模块的AT指令测试 我们在使用WIFI模块前,通常需要先对其进行AT指令配置,以验证模块是否正常,并设置模块名称、波特率、工作模式、服务器等参数。 11 命令 描述 基础指令 AT 测试AT启动 AT+RST 重启模块 AT+GMR 查看版本信息 wifi功能指令 AT+CWMODE 选择WIFI应用模式 AT+CWJAP 加入AP AT+CWLAP 列出当前可用AP AT+CWQAP 退出与AP的连接 AT+CWSAP 设置AP模式下的参数 AT+ CWLIF 查看已接入设备的IP 命令 描述 TCP/IP指令 AT+CIPSTATUS 获得连接状态 AT+CIPSTART 建立TCP连接或注册UDP端口号 AT+CIPSEND 发送数据 AT+CIPCLOSE 关闭TCP或UDP AT+CIFSR 获取本地IP地址 AT+CIPMUX 启动多连接 AT+CIPSERVER 配置为服务器 AT+CIPMODE 设置模块传输模式 AT+CIPSTO 设置服务器超时时间 ESP8266 AT指令集 AT指令集中的格式 利用 ESP8266 可以实现十分灵活的组网方式和网络拓扑。 ESP8266 支持softAP 模式,station 模式,softAP + station 共存模式三种。 softAP:即无线接入点,是一个无线网络的中心节点。通常使用的无线路由器就是一个无线接入点。 station:即无线终端,是一个无线网络的终端。 ESP8266 工作模式 RXD TXD GND +5V RXD TXD GND +5V 使用一个USB到TTL的转接口来实现WIFI模块和PC机之间的串口连接。连线时要注意转接口的RXD要接WIFI模块的TXD,而转接口的TXD要接WIFI模块的RXD。 ESP8266 与PC机连接进行设置 1 2 4 3 串口调试助手设置 1、测试AT启动 发送:AT 返回:OK 1 2 4 3 2、设置ESP8266应用模式 发送: AT+CWMODE=<mode> 返回:OK <mode>: ‣ 1:Station 模式 ‣ 2:SoftAP 模式 ‣ 3:SoftAP+Station 模式 在字符串输入框中输入AT+CWMODE=2指令来设置ESP8266工作在softAP模式。由于该指令需重启后才能生效,因此要接着输入AT+RST指令来重启模块。 3、重启模块 发送: AT+RST 返回:OK 4、设置ESP8266 softAP参数 发送:AT+CWSAP=<ssid>,<pwd>,<chl>,<ecn> 返回:OK 指令参数: <ssid>字符串参数,接入点名称 <pwd>字符串参数,密码最长64字节ASCII <chl>通道号 <ecn>加密方式 0 OPEN 1 WEP 2 WPA_PSK 3 WPA2_PSK 4 WPA_WPA2_PSK 由于默认的名称太长,使用指令AT+CWSAP=“SZPT”,“”,1,0将名称改为SZPT。 设置WIFI模块的连接类型,这里需要设置为多连接模式,输入的指令为AT+CIPMUX=1。 设置这一步主要是为下一步建立TCP服务器做准备,因为建立TCP服务器必须在多连接模式下进行。 5、设置ESP8266连接类型 发送: AT+CIPMUX=<mode> 返回:OK <mode>: ‣ 0:单连接模式 ‣ 1:多连接模式 建立一个端口号为5000的TCP服务器,输入的指令为AT+CIPSERVER=1,5000。 6、建⽴ TCP 服务器 发送:AT+CIPSERVER=<mode>[,<port>] 返回:OK <mode>: ‣ 0:关闭服务器 ‣ 1:建⽴服务器 <port>:端⼝号,默认为 333。 7、设置波特率 发送: AT+CIOBAUD=<value> 返回:OK 指令参数: <value>要设置的波特率数值 约定WIFI遥控小车项目中WIFI模块与单片机的串口通信波特率为9600,因此要用指令AT+CIOBAUD=9600将波特率设置为9600。 三、wifi遥控小车的程序测试 首选需要对单片机串口进行初始化,设置工作方式及波特率等。另外,由于部分AT指令断电不会保存,因此需要在程序中进行重新设置。等待接收手机端发来的控制信号,最后根据控制信号做出相应的动作。 注意:ES = 0,开启串口中断,因为在配置wifi模块时没有使用中断方式。 void Uart_Init( ) { SCON = 0x50; TMOD = 0x20; TH1 = 0xFD; //设置波特率 9600 TL1 = 0xFD; TR1 = 1; //启动定时器1 ES = 0; //关闭串口中断 EA = 1; //开总中断 } 串口初始化子函数 void ESP8266_Set(uchar *puf) // 指针*puf指向字符串数组 { while(*puf!='\0') //字符串结束跳出循环 { SBUF=*puf; //向WIFI模块发送控制指令 while(TI==0); //等待发送完毕 TI=0; //清发送完毕中断请求标志位 puf++; } DelayMs(2000); //模块需要一定的反应时间,该延时时间需要根据硬件调整 } 注意:使用while语句完成了字符串的逐个发送;为了确保发送不受干扰,这里采用查询方式发送;每个AT指令字符串发送完成后,wifi模块还需要一定的反应时间,这个延时要根据系统硬件调整,这里的延时大概是2S的样子。 ESP8266WIFI模块设置子函数 void Uart_Interrupt() interrupt 4 { uchar receive; if(RI==1) {RI=0; receive=SBUF; if(receive==‘+‘) {i=0;start=1;} if(start) {Receive_table[i]=receive; i=i+1; if(i==10)start=0;} } } 注意:如果单片机接收到一个有效控制信号,则一定是以+IPD开头,并且真正有用的控制字符位于这个字符串的第10位。 多路连接时(+CIPMUX=1) 接收到的数据格式: +IPD,<id>,<len>:<data> 参数说明: <id>收到连接的id号 <len>数据长度 <data>收到的数据 举例: +IPD,0,1:3 串口中断服务子函数 //定义的全局变量 uchar Receive_table[20]; //用来存放接收到的控制字符串 uchar i; //全局变量i用来记录接收到的字符数 bit start; //全局位变量start用来表征接收的状态 串口中断服务子函数 void Uart_Interrupt() interrupt 4 { uchar receive; if(RI==1) {RI=0; receive=SBUF; if(receive==‘+‘) {i=0;start=1;} if(start) {Receive_table[i]=receive; i=i+1; if(i==10)start=0;} } } void gongneng() { switch(Receive_table[9]) {case '0': qianjin(); break; case '1': houtui(); break; case '2': zuozhuan(); break; case '3': youzhuan(); break; case '5': tingche(); break; case '6': tingche(); break; default:break; } } 判断控制信号并执行子函数 首先调用串口初始化子函数,然后配置ESP8266模块,最后就是不断处理接收到的控制信号。在配置ESP8266模块时,输入的AT指令写成字符串的形式,最后\r 是转义字符,\r是回车, 是换行,前者使光标到行首,后者使光标下移一格,两个放一起就和执行Enter键的作用一样。这里需要注意的是,在配置好ESP8266模块后一定要记得开串口中断。 void main() { Uart_Init(); ESP8266_Set("AT+CWMODE=2\r "); //设置路由器模式 1 station模式 2 AP 3 station+AP混合模式 ESP8266_Set("AT+RST\r "); //重新启动wifi模块 ESP8266_Set("AT+CIPMUX=1\r "); //开启多连接模式,允许多个客户端接入 ESP8266_Set("AT+CIPSERVER=1,5000\r "); //启动TCP/IP 端口为5000 实现基于网络//控制 ES=1; //允许串口中断 while(1) if(!start) gongneng(); } 主函数 四、wifi小车APP的设置及系统运行调试 请大家下载“WIFI小车.apk”并安装在手机上,注意该APP只能在安卓系统上运行 。 手机端安装wifi小车遥控器APP 开启手机的无线局域网(WLAN)功能,找到ESP8266模块的名称并连接。然后打开“Unicorn WIFI小车”APP,这里192.168.4.1就是ESP8266模块的默认IP地址,端口号已经设置为5000,直接点击右上角的“连接”按钮。如果没有问题会出现“连接成功”的提示。 蓝 牙 连 接 系统测试 点击右上角的三个点来对按钮进行重新设置。在按钮设置页面,点击要设置的按钮就会出现设置界面。我们可以重新设置按钮的名称、按下及释放时分别发送的控制字符。 按钮重新设置 请大家将按键参数设置成如图表所示的内容,即按下前进、后退、左转、右转四个按键时分别发送1、2、3、4的控制字符,所有按键释放时均发送字符0。大家思考一下这时单片机的控制程序应如何修改呢? 拓 展 训 练 控制信号 对应的小车执行动作 ‘1’ 前进 ‘2’ 后退 ‘3’ 左转 ‘4’ 右转 ‘0’ 停止 $$

资源预览图

任务8-5 WIFI遥控小车设计(课件)-《单片机技术与应用》同步教学(电子工业版)
1
任务8-5 WIFI遥控小车设计(课件)-《单片机技术与应用》同步教学(电子工业版)
2
任务8-5 WIFI遥控小车设计(课件)-《单片机技术与应用》同步教学(电子工业版)
3
任务8-5 WIFI遥控小车设计(课件)-《单片机技术与应用》同步教学(电子工业版)
4
任务8-5 WIFI遥控小车设计(课件)-《单片机技术与应用》同步教学(电子工业版)
5
任务8-5 WIFI遥控小车设计(课件)-《单片机技术与应用》同步教学(电子工业版)
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。