Wifi遥控小车使用说明 本例程采用ESP8266 wifi模块与STM32串口连接,并提供AT指令封装库与STM32通讯,实现如下的通讯方式:
1、硬件部分 Wifi模块丝印图即引脚如下: 硬件连接如下:
2、手机APP部分 APP部分我们采用常用的APP wifi调试软件 ITEAD WIFI,安装完成后打开 如下界面,点击Set up进入设置: 进入后会自动获取到手机的IP,注意手机是连接到一个路由器下的,支持局域网内调试,先设置端口,一般是 8080 然后设置指令,我们使用到了如下红框内的指令,指令协议可以参考工程文件interface.h有如下描述: //指令定义 #define COMM_STOP 'I'//停止 #define COMM_UP 'A'//前进 #define COMM_DOWN 'B'//后退 #define COMM_LEFT 'C'//左转 #define COMM_RIGHT 'D'//右转 指令设置好之后就可以启动服务了,如下点击开始就好了 设置完成后如下,这里记下服务端IP和端口号,我这里是 192.168.31.195,端口 8080 ,然后返回: 3、stm32软件部分 设置完APP软件后,再来修改我们的工程文件,打开工程“wifi遥控小车”,打开main.c文件,修改红框内信息: HOST_NAME和HOST_PORT为手机上面的IP和端口号,SSID为您的路由器名,PSD为路由器密码,修改好后重新编译后下载。 下载完成复位一下,就可以运行了,程序会自动连接手机开启的服务,实现TCP/IP通信,连接成功后,看手机端的设置会有如下提示: 本程序还是用了串口1来输出调试信息,将串口1连接电脑后也会在串口调试助手看到如下信息: 连接成功后即可在如下界面按键,操作小车运行:
如有其他问题请先详细参考wifi模块资料以及本实验程序。
stm32单片机源程序:
- /********************************* 深圳市航太电子 *******************************
- * 实 验 名 :小车蓝牙遥控实验
- * 实验说明 :使用手机连接蓝牙模块后,通过手机发送指令来控制小车
- * 实验平台 :航太ARM单片机开发板
- * 连接方式 :请参考interface.h文件
- * 注 意 :指令必须连续发送才会使小车动作,若停止发送指令,则小车会停止
- ****************************************************************************************/
- #include "stm32f10x.h"
- #include "interface.h"
- #include "LCD1602.h"
- #include "IRCtrol.h"
- #include "motor.h"
- #include "uart.h"
- #include "ESP8266.h"
- #include "serialportAPI.h"
- #include <stdlib.h>
- #include <stdio.h>
- //全局变量定义
- unsigned int speed_count=0;//占空比计数器 50次一周期
- char front_left_speed_duty=SPEED_DUTY;
- char front_right_speed_duty=SPEED_DUTY;
- char behind_left_speed_duty=SPEED_DUTY;
- char behind_right_speed_duty=SPEED_DUTY;
- unsigned char tick_5ms = 0;//5ms计数器,作为主函数的基本周期
- unsigned char tick_1ms = 0;//1ms计数器,作为电机的基本计数器
- unsigned char tick_200ms = 0;//刷新显示
- unsigned int tick_3s = 0;//隔3s断线检测
- char ctrl_comm = COMM_STOP;//控制指令
- unsigned char continue_time=0;
- unsigned char wifi_rec_flag=0;//蓝牙控制标志位
- #define HOST_NAME "192.168.31.195" //主机IP
- #define HOST_PORT 8080 //主机端口
- #define SSID "Hantech" //路由器名
- #define PSD "hantechinternet" //密码
- #define RECVBUF_SIZE 16
- unsigned char buffer[RECVBUF_SIZE] = {0};
- int main(void)
- {
- USART1Conf(9600);
- DBG("system begin");
- delay_init();
- GPIOCLKInit();
- UserLEDInit();
- LCD1602Init();
- TIM2_Init();
- MotorInit();
- ServoInit();
- // USART3Conf(9600);
- while(1)
- {
- DBG("chang baud");
-
- UartBegin(115200,&USART3Conf,&PutChar);//每次设置完波特率后需要做一点延时
- delay(500);
- SetBaud(19200);
- UartBegin(19200,&USART3Conf,&PutChar);//更改波特率到19200
- delay(500);
- if(0 != SetBaud(19200))//在新波特率下检查是否成功
- {
- break;//成功就退出
- }
- }
- while(0 == WifiInit(SSID,PSD,HOST_NAME,HOST_PORT));
-
- while(1)
- {
- if(SerialAvailable() > 5)//接收到至少5个字符
- {
- int len;
- len = recv(buffer, RECVBUF_SIZE, 100);
- if (len > 0)
- {
- char inChar;
- inChar = buffer[0];
- // send(buffer, len);
- if (ctrl_comm != inChar || continue_time == 1)
- {
- wifi_rec_flag = 1;
- ctrl_comm = inChar;
- }
- continue_time = 60;//更新持续时间
- tick_3s = 0;//心跳包周期
- }
- }
-
- if(tick_5ms >= 5)
- {
- tick_5ms = 0;
- tick_200ms++;
- if(tick_200ms >= 40)
- {
- tick_200ms = 0;
- tick_3s++;
- LEDToggle(LED_PIN);
- if(tick_3s >= 15)//15*200=3000
- {
- tick_3s = 0;
- //定时检查连接是否正常,如果不正常,wifi复位重新连接
- if (getSystemStatus() != STATUS_GETLINK)
- {
- DBG("TCP unlink");
- while(!WifiInit(SSID,PSD,HOST_NAME,HOST_PORT));
- }else
- {
- DBG("TCP link tick");
- }
- }
- }
- //continue_time--;//200ms 无接收指令就停车
- if(continue_time == 0)
- {
- continue_time = 1;
- CarStop();
- }
- //do something
- if(wifi_rec_flag == 1)//接收到红外信号
- {
- wifi_rec_flag = 0;
- switch(ctrl_comm)
- {
- case COMM_UP: CarGo();break;
- case COMM_DOWN: CarBack();break;
- case COMM_LEFT: CarLeft();break;
- case COMM_RIGHT: CarRight();break;
- case COMM_STOP: CarStop();break;
- default : break;
- }
- LCD1602WriteCommand(ctrl_comm);
- DBG("recv COMM");
- }
- }
-
- }
- }
复制代码
全部资料下载(stm32源码+app+资料):
11.wifi遥控小车实验.7z
(1.65 MB, 下载次数: 801)
|