问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

手把手教你实现蓝牙遥控小车:从串口通信到手机控制

创作时间:
作者:
@小白创作中心

手把手教你实现蓝牙遥控小车:从串口通信到手机控制

引用
CSDN
1.
https://m.blog.csdn.net/qq_46187594/article/details/139218183

本篇文章详细介绍了如何使用蓝牙遥控小车,包括串口通信指令的编写。文章主要面向对硬件开发和编程有一定基础的读者,内容涉及硬件连接、软件编程等多个方面,具有一定的技术深度和实用性。

第14章-手机遥控功能

我们要实现蓝牙遥控功能,蓝牙遥控功能要使用:1.单片机的串口、2.蓝牙通信模块。所以我们先调试好:单片机的串口->蓝牙模块->接到一起联调。

14.1-电脑控制小车

完成功能:电脑连接单片机串口三 控制小车前进后退

先看原理图

通过原理图可以看出这是使用的串口3,在使用的时候注意把跳线帽,跳线到蓝牙通信位置。

打开初始化软件,生成代码,在main定义全局变量:

uint8_t g_ucUsart3ReceiveData;  //保存串口三接收的数据

开启串口三中断接收:

HAL_UART_Receive_IT(&huart3,&g_ucUsart3ReceiveData,1);  //串口三接收数据

在usart.c重新实现串口中断回调函数:

//串口接收回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if( huart == &huart3)//判断中断源
    {
        if(g_ucUsart3ReceiveData == 'A') motorPidSetSpeed(1,1);//前运动
        if(g_ucUsart3ReceiveData == 'B') motorPidSetSpeed(-1,-1);//后运动
        if(g_ucUsart3ReceiveData == 'C') motorPidSetSpeed(0,0);//停止
        if(g_ucUsart3ReceiveData == 'D') motorPidSetSpeed(1,2);//右边运动
        if(g_ucUsart3ReceiveData == 'E') motorPidSetSpeed(2,1);//左边运动
        if(g_ucUsart3ReceiveData == 'F') motorPidSpeedUp();//加速
        if(g_ucUsart3ReceiveData == 'G') motorPidSpeedCut();//减速

        HAL_UART_Receive_IT( &huart3, &g_ucUsart3ReceiveData, 1);//继续进行中断接收
    }
}

在usart.c中声明外部变量:

extern uint8_t g_ucUsart3ReceiveData;  //保存串口三接收的数据

然后我们更改一下主函数内容,把PID红外循迹代码注释掉,然后我们增加串口三的输出,以便我们后面观察数据。

串口不定长输出

我们把转速等信息都可以显示在OLED上,那么如何通过串口输出那?

sprintf((char *)Usart3String,"V1:%.2fV2:%.2f\r\n",Motor1Speed,Motor2Speed);//显示两个电机转速 单位:转/秒
HAL_UART_Transmit(&huart3,( uint8_t *)Usart3String,strlen(( const  char  *)Usart3String),50);//阻塞式发送通过串口三输出字符 strlen:计算字符串大小

sprintf((char *)Usart3String,"Mileage%.2f\r\n",Mileage);//计算小车里程 单位cm
HAL_UART_Transmit(&huart3,( uint8_t *)Usart3String,strlen(( const  char  *)Usart3String),50);//阻塞式发送通过串口三输出字符 strlen:计算字符串大小

sprintf((char *)Usart3String,"U:%.2fV\r\n",adcGetBatteryVoltage());//显示电池电压
HAL_UART_Transmit(&huart3,( uint8_t *)Usart3String,strlen(( const  char  *)Usart3String),50);//阻塞式发送通过串口三输出字符 strlen:计算字符串大小
HAL_Delay(5);

把之前PID初始化时候速度PID目标值改成0

然后我们测试

硬件连接

我们现在使用USB-TTL连接串口三,单片机串口三与电脑通信(底板不需要插入蓝牙)。

然后打开软件,发送指令小车就会对应运动。

在电脑串口软件查看输出信息、发送指令控制小车运动。

14.2-手机蓝牙控制小车

功能:蓝牙遥控小车前进、后退、停止、左右转、加速、减速、手机显示数据。

蓝牙模块和电脑通信

蓝牙模块-硬件介绍

使用:HC-05 主从机一体蓝牙串口透传模块

注意:供电3.6V-6V(最好5V)

引脚顺序 VCC GND TXD RXD

先调试蓝牙模块-设置波特率


如图先把蓝牙模块通过USB-TTL模块相连接,然后

如果反复测试不能进入AT模式,可能是新版蓝牙模块,

先连接好蓝牙模块的几根线,然后按住蓝牙模块的按键

然后连接电脑,然后几秒后蓝牙小灯慢闪,说明进入AT模式

然后串口助手通过38400发送设置指令:AT+UART=115200,0,0

然后收到OK数据,说明设置成功。

这个是设置波特率截图

  1. 然后重新拔插蓝牙模块(不用按按键)

在手机系统蓝牙配对HC-50 密码1234

串口助手设置波特率115200,然后打开手机APP发送任意内容测试

这个是后面通信测试截图

  1. 设置按键-按照代码设置按下发送的数据

蓝牙模块连接单片机

把蓝牙插入到底板、跳线帽选择蓝牙通信

按下不同按钮小车会对应控制

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号