小车联网-通过ESP8266将速度发送到客户端
实现目标:
客户端通过网络发送启动信息控制小车启动,小车将速度实时地发送给客户端查看,同时也能在OLED屏上显示速度信息
基于小车测速并通过OLED显示的代码进行修改
程序
程序文件
1.main.c:定时器0、定时器2、串口初始化函数的调用,自动发送AT指令函数,外部中断初始化函数,OLED屏初始化函数,while循环内根据标志位将速度数据通过串口发送到客户端,在OLED上显示
2.Motor.c:小车前进、后退、左转、右转和停止的函数
3.Delay.c:延时函数
4.Timer0.c:定时器0初始化,中断处理函数PWM控制小车前进
5.Timer2.c:定时器2初始化,中断处理函数定义1秒,接收外部中断的变量,然后置0,开启下一次计算
6.Int0.c:外部中断0初始化,测速模块有下降沿来,则中断处理函数变量++
7.IIC.c:IIC协议,供OLED屏使用
8.OLED.c:OLED写命令、写数据、初始化、清屏、显示等函数
9.WIFI.c:AT指令数组,设置为AP模式,以及根据应答调用串口发送函数发送AT指令的函数,和发送指定通道和数据长度的AT指令
1.添加WIFI.c文件
将之前ESP8266当AP模式的代码模块化后,整理出WIFI.c源文件,并将源文件复制到本次代码的工程目录下,然后在keil中添加进来,
主要是用来设置AP模式的AT指令数组,需要加code,将数组放到ROM中,不然代码太大编译不通过,然后是应答的标志位,两个通过串口发送AT指令的函数
相应的在WIFI.h头文件中添加函数的声明
2.Usart.c头文件的中断处理函数中添加AT应答的判断语句
结合之前ESP8266的串口通信,在小车的串口中断中直接添加判断语句即可
3.main函数中调用WIFI.c的自动发送AT指令函数以及发送数据的前提AT指令
接线方式:
1.查看通信情况
如果是想通过串口查看通信情况的,可以将CH340接上,ESP8266的TX通过分线接单片机的RX和CH340的RX,ESP8266的RX通过分线接单片机的TX和CH340的RX,因为小车的电源由两节18650电池供电,经过降压模块得到5V,要给单片机、电机驱动、测速模块供电,所以ESP8266的电源需要额外供给,把模块的地全接在面包板上
2.不查看通信情况
查看通信情况一般是前期测试代码正确性所用的方法,真正使用ESP8266时是不用查看通信情况的,若小车上有3.3V电源,则直接把ESP8266接上去,小车电源也由板载的18650电池供电,此时小车就完全是独立的状态,通过发送AT指令给ESP8266设置为AP模式,则此时小车就相当于一个服务器,当用客户端连接上服务器时,就能通过网络控制小车了
最终实现:
不用串口助手查看通信情况,小车上电后,发送AT指令给ESP8266开启服务器模式,等待一两秒客户端点击连接,成功连上服务器,小车的速度通过网络发送到客户端上,客户端也能通过网络发送前进后退等指令控制小车启动
需要注意的地方:
如果小车本身的接线没改变,ESP8266按之前的接线方式,即用分线将ESP8266的应答信息通过TX分别发送到单片机和电脑串口助手上,分线的部分没有问题,问题出在了单片机使用的数据线供电上,还记得之前说用充电宝给单片机供电,是无法通过电脑串口查看到ESP8266的应答信息的,这是因为:单片机用电脑USB供电是通过电脑与CH340和ESP8266共地了,因为共地才能进行通信,所以能在电脑串口上查看到ESP8266的应答信息,如果用充电宝给单片机供电,则单片机与CH340、ESP8266是不共地的,通信基准不同,所以是无法通信的
只要抓住一个准则,就是共地,想办法解决ESP8266 3.3V供电问题,其实就能实现远程客户端控制小车