用手机APP蓝牙遥控小车是最适合入门的功能扩展。本文教你用MIT App Inventor零代码搭建遥控APP,以及单片机端如何接收控制指令。
一、硬件准备
Arduino UNO 或 STM32(作为小车主控)
HC-05/HC-06 蓝牙串口模块 × 1
L298N电机驱动 + 小车底盘(沿用之前的配置)
HC-05(主从一体)推荐用于双向通信,HC-06(从机)适合单向遥控。
二、蓝牙模块配置
HC-05/HC-06默认波特率9600,配对密码1234。如果需要修改:
1. 将蓝牙模块通过USB转TTL模块接电脑(TX接RX,RX接TX,注意分压)。
2. 打开串口助手,发送AT指令:
AT(测试连接,返回OK)
AT+NAME=SmartCar(改名)
AT+UART=115200,0,0(改波特率)
AT+ROLE=0(设为从机模式)
3. 配置完成后,蓝牙模块的TX接Arduino的RX(引脚0),RX接TX(引脚1),VCC接5V,GND共地。
三、单片机接收代码
// Arduino蓝牙串口控制代码
const int IN1 = 8, IN2 = 9, IN3 = 10, IN4 = 11;
char cmd;
void setup() {
for(int p=8; p<=11; p++) pinMode(p, OUTPUT);
Serial.begin(9600);
}
void forward() {
digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW);
}
void backward() {
digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH);
}
void turnLeft() {
digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW);
}
void turnRight() {
digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH);
}
void stop() {
for(int p=8; p<=11; p++) digitalWrite(p,LOW);
}
void loop() {
if(Serial.available()) {
cmd = Serial.read();
switch(cmd) {
case 'F': forward(); break;
case 'B': backward(); break;
case 'L': turnLeft(); break;
case 'R': turnRight(); break;
case 'S': stop(); break;
}
}
}
四、制作APP(MIT App Inventor)
打开 ai2.appinventor.mit.edu,登录后新建项目:
界面设计:
1. 从布局面板拖入垂直布局,设为居中。
2. 添加 ListPicker 组件,标题设为"选择蓝牙设备"。
3. 添加一个布局网格(TableArrangement),放置5个按钮:
前进按钮(文本"▲",大号字体)
左转、停止、右转按钮(放在第二行)
后退按钮(文本"▼",放在第三行)
4. 添加 BluetoothClient 组件(在连接类中)。
逻辑设计:
1. ListPicker 的 BeforePicking 事件中调用 BluetoothClient 的 GetAddressesAndNames。
2. ListPicker 的 AfterPicking 事件中,用 BluetoothClient 连接选中的设备地址。
3. 前进按钮的 TouchDown 事件发字符 'F',TouchUp 事件发字符 'S'(停止)。
4. 其他按钮同理,对应字符 'B','L','R'。
5. 编译为APK安装到手机即可。
五、进阶:双向通信
如果使用HC-05(支持双向),可以让小车回传状态数据,如电池电压、当前速度、障碍物距离等。在手机端添加一个文本显示框,单片机定期通过串口发送状态字符串,手机端读取并显示。
六、常见问题
Q:手机搜不到蓝牙模块?
A:确保蓝牙模块通电(指示灯闪烁),确认模块没有进入AT模式(有些模块需要先断开AT模式引脚)。
Q:连接后控制无反应?
A:检查Arduino的RX/TX是否被蓝牙占用(烧录时需要拔掉蓝牙的TX线)。确认波特率一致。

微信联系
淘宝联系