蓝牙遥控的底层逻辑其实很简单
HC-05是Arduino项目里最常用的蓝牙模块,支持Bluetooth Classic协议,配对后对手机来说就是一个普通串口。手机遥控APP里按一个键,它就发一个ASCII字符过来:F是前进,B是后退,L是左转,R是右转,S是停止。整份程序就是一个switch-case,把每个字符翻译成H桥驱动板的电平状态。不需要装任何协议库,也不需要写蓝牙协议栈。
HC-05和Arduino的接线
HC-05有6个引脚:VCC、GND、TXD、RXD、KEY、EN。日常使用只需要接4根线:VCC接5V,GND接GND,TXD接Arduino的D2(软串口RX),RXD接Arduino的D3(软串口TX)。KEY引脚用来进入AT指令模式(拉高后进AT模式,配置波特率和设备名),正常运行时不用接。注意HC-05的RX引脚是3.3V逻辑,如果你的Arduino是5V的(比如UNO),建议在RX线上串一个1k电阻分压。
用SoftwareSerial读蓝牙数据
Arduino UNO只有一个硬件串口(D0/D1),被USB调试占了,所以蓝牙通信用SoftwareSerial库开辟一个软串口。在setup里初始化Serial.begin(9600)给调试用,btSerial.begin(9600)给蓝牙用(HC-05默认波特率是9600,有些出厂是38400,需要先用AT指令改)。loop里用btSerial.available()检测有没有数据,有的话btSerial.read()读一个字节,丢进switch-case。
L298N驱动两个直流电机
2WD小车有两个直流电机,用L298N驱动板控制。L298N的IN1和IN2控制电机A的正反转,IN3和IN4控制电机B。ENA和ENB是使能引脚,接PWM可以调速。前进就是IN1 HIGH、IN2 LOW(电机A正转),同时IN3 HIGH、IN4 LOW(电机B正转)。左转就是电机A停、电机B正转。把这套逻辑封装成forward()、backward()、turnLeft()、turnRight()、stop()五个函数,switch-case里直接调用就行。
APP的选择有个坑
在应用商店搜Arduino Bluetooth RC car会出来一大堆免费遥控APP,但注意只支持Android,因为iOS不对普通APP开放Bluetooth Classic。选APP的时候看描述里有没有明确说支持HC-05或HC-06,如果是给BLE写的APP是看不到Classic模块的。不同APP发出的按键字符可能不一样,有的发F/B/L/R/S,有的发1/2/3/4/5,先连上APP看看它实际发什么字符,再改你的switch-case。










switch-case的写法比if-else清晰多了,适合新手
建议用9600波特率,HC-05出厂默认就是这个
L298N+2WD这个方案做小车真的很经典,成本不到100块
BLE和Classic的兼容问题确实坑,之前用iOS搞了一下午
HC-05的AT指令模式真的折腾,KEY引脚接法搞了半天