跑跑啦航模

您现在的位置是:首页>精采瞬间

精采瞬间

树莓派智能小车:手机蓝牙遥控

paopaola2026-07-014636

之前实现的是小车自主避障,这期我们来加蓝牙模块——掏出手机就能遥控小车,不用连显示器也不用开SSH。

👉 配合B站视频看更直观

跑跑啦航模 · 树莓派智能小车

一、HC-05蓝牙模块参数

参数
工作电压3.3V ~ 5V
通信方式串口(UART)
默认波特率9600(AT模式38400)
通信距离约10米(空旷)
配对密码1234 或 0000

二、硬件接线

HC-05树莓派
VCC5V(Pin 2或4)
GNDGND(Pin 6等)
TXDGPIO 15(RX, Pin 10)
RXDGPIO 14(TX, Pin 8)
STATE/EN不接

注意:HC-05的RXD接树莓派TX,TXD接树莓派RX——交叉接,这叫"串口交叉线"。

HC-05是3.3V逻辑电平,可以直接接树莓派GPIO,不用分压。

三、配置树莓派串口

树莓派默认把UART串口给了蓝牙,需要先切回来:

# 1. 编辑config.txt
sudo nano /boot/config.txt

# 在文件末尾加上
enable_uart=1

# 2. 禁用蓝牙串口服务
sudo systemctl disable hciuart

# 3. 重启
sudo reboot

重启后检查串口设备:

ls -l /dev/serial*
# 应该能看到 /dev/ttyAMA0

四、配置HC-05(AT模式)

首次使用HC-05需要进AT模式配置:按住模块上的按键再通电,LED会慢闪(约2秒一次),表示进入AT模式。

安装minicom测试串口:

sudo apt install minicom -y
sudo minicom -D /dev/ttyAMA0 -b 38400 -o

输入AT指令(注意加回车):

AT          # 测试通信,返回OK
AT+NAME=paopaola-car  # 改蓝牙名称
AT+PSWD=1234   # 设置配对密码
AT+UART=9600,0,0  # 设置波特率9600
AT+ROLE=0     # 设置为主从模式(从模式)
AT+CMODE=1    # 任意设备可连接

配置完成后重新上电,这次不用按按键,LED快速闪烁表示等待配对。

五、手机配对

  1. 打开手机蓝牙,搜索设备,找到"paopaola-car"
  2. 配对密码1234
  3. 配对成功后安装"Serial Bluetooth Terminal"或"蓝牙串口助手"APP
  4. 在APP里连接paopaola-car

六、Python蓝牙遥控代码

import RPi.GPIO as GPIO
import serial
import time

# 电机引脚
IN1, IN2, IN3, IN4 = 17, 18, 22, 23
ENA, ENB = 27, 24

GPIO.setmode(GPIO.BCM)
GPIO.setup([IN1, IN2, IN3, IN4, ENA, ENB], GPIO.OUT)

pwmA = GPIO.PWM(ENA, 100)
pwmB = GPIO.PWM(ENB, 100)
pwmA.start(0); pwmB.start(0)

# 打开蓝牙串口
ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=1)

def forward(s=80):
    GPIO.output(IN1, GPIO.HIGH); GPIO.output(IN2, GPIO.LOW)
    GPIO.output(IN3, GPIO.HIGH); GPIO.output(IN4, GPIO.LOW)
    pwmA.ChangeDutyCycle(s); pwmB.ChangeDutyCycle(s)

def backward(s=60):
    GPIO.output(IN1, GPIO.LOW); GPIO.output(IN2, GPIO.HIGH)
    GPIO.output(IN3, GPIO.LOW); GPIO.output(IN4, GPIO.HIGH)
    pwmA.ChangeDutyCycle(s); pwmB.ChangeDutyCycle(s)

def turn_left(s=60):
    GPIO.output(IN1, GPIO.LOW); GPIO.output(IN2, GPIO.HIGH)
    GPIO.output(IN3, GPIO.HIGH); GPIO.output(IN4, GPIO.LOW)
    pwmA.ChangeDutyCycle(s); pwmB.ChangeDutyCycle(s)

def turn_right(s=60):
    GPIO.output(IN1, GPIO.HIGH); GPIO.output(IN2, GPIO.LOW)
    GPIO.output(IN3, GPIO.LOW); GPIO.output(IN4, GPIO.HIGH)
    pwmA.ChangeDutyCycle(s); pwmB.ChangeDutyCycle(s)

def stop():
    GPIO.output([IN1, IN2, IN3, IN4], GPIO.LOW)
    pwmA.ChangeDutyCycle(0); pwmB.ChangeDutyCycle(0)

print("等待蓝牙连接...")

try:
    while True:
        if ser.in_waiting > 0:
            cmd = ser.read().decode('utf-8', errors='ignore')
            
            if cmd == 'F':  # 前进
                forward()
                print("前进")
            elif cmd == 'B':  # 后退
                backward()
                print("后退")
            elif cmd == 'L':  # 左转
                turn_left()
                print("左转")
            elif cmd == 'R':  # 右转
                turn_right()
                print("右转")
            elif cmd == 'S':  # 停止
                stop()
                print("停止")
            elif cmd == '0':  # 速度0~9(停止~全速)
                stop()
            elif cmd in '123456789':
                speed = int(cmd) * 10
                # 继续当前方向但改变速度
                print(f"速度: {speed}%")
        
        time.sleep(0.05)

except KeyboardInterrupt:
    stop()
    ser.close()
    GPIO.cleanup()

七、APP按键配置

在"Serial Bluetooth Terminal"APP中配置按键:

  • ↑ 发送 F(前进)
  • ↓ 发送 B(后退)
  • ← 发送 L(左转)
  • → 发送 R(右转)
  • ■ 发送 S(停止)
  • 数字键 1~9 调速

八、进阶扩展思路

  • 语音控制:用百度语音识别API,手机说话就能控制小车
  • 图传:加USB摄像头,用mjpg-streamer实现实时画面回传
  • Web控制:在树莓派上跑Flask,手机浏览器打开网页就能遥控
  • 远程控制:接4G模块或连WiFi路由器,实现外网遥控

到这期为止,树莓派智能小车从配件到整车、从基础驱动到蓝牙遥控,整个系列教程就告一段落了。这个框架搭好之后,往上加什么功能都行,全看你的想象力!

全部代码和教程在 www.paopaola.com 可以找到,有问题进QQ群241350086交流。

  • 如果你需要购买航模产品,可以通过扫码联系哦!

    • 微信联系
    • 淘宝联系
  • 个人微信扫码

    工作时间

    周一至周日 9:00-21:00

  • 如果你需要购买航模产品,可以通过扫码联系哦!

    • 微信联系
    • 淘宝联系