- 蓝牙模块使用HC-05,波特率9600,插入PC,使用串口助手收发消息
- 树莓派使用自身蓝牙与HC05配对。
HC-05的配置这里不再赘述,可参考这里
一、树莓派的蓝牙与HC-05配对
打开树莓派的VNC桌面,单击右上角的蓝牙图标,选择Add Device
进而,进入蓝牙搜索界面,稍等片刻,便可以查找到对应的HC-05模块,点击Pair进行配对
按照提示,输入蓝牙配对密码
之后若出现下图所示错误,可直接忽略。
打开树莓派的命令行,输入hcitool scan
,扫描蓝牙(附带MAC地址)
接着输入,sudo rfcomm connect 1 98:D3:32:71:30:7A
(其中1
可以自定义为其他数字【如果被占用的话】,98:D3:32:71:30:7A
这个是HC-05对应的MAC地址),即可连接成功。
这种连接方式,不能关闭当前终端。
并且当拔掉蓝牙的时候,还需要重新输入指令连接。那么有没有自己绑定的办法呢?
当然有的,在终端输入
sudo rfcomm bind 1 98:D3:32:71:30:7A
,相当于在/dev
目录下注册了一个名字为rfcomm1
的设备。当拔掉蓝牙时,对应的设备号rfcomm1
依然存在。
下次插上蓝牙可以直接在程序中使用rfcomm1
设备,无需再次注册。
当然解绑也有对应的命令,这里不再赘述,有兴趣可以参考这里
再打开一个终端,输入sudo ls /dev -l
,会发现多了rfcomm1
,就是我们刚刚注册的HC-05设备。
二、安装 python-serial 库
树莓派蓝牙传输数据可以用python的pyserial模块
sudo apt-get install python-serial
三、编写python程序
1、PC发送数据并在PC回显
终于到了,最激动人心的环节了 — 测试。
- USB-TTL连接HC-05
- 打开PC端的串口助手,设置波特率为9600.
树莓派上,编写4.py
,代码如下所示。
# -*- coding: utf-8 -*
import serial
import time
def main():
while True:
# 获得接收缓冲区字符
count = ser.inWaiting()
if count != 0:
# 读取内容并显示
recv = ser.read(count)
print recv
# 清空接收缓冲区
ser.flushInput()
# 必要的软件延时
time.sleep(0.1)
if __name__ == '__main__':
try:
# 打开串口
ser = serial.Serial('/dev/rfcomm1', 9600)
if ser.isOpen == False:
ser.open() # 打开串口
ser.write(b"Raspberry pi is ready")
main()
except KeyboardInterrupt:
if ser != None:
ser.close()
-
树莓派运行
4.py
文件,同时开启PC端串口助手,并注意观察接收框变化
-
上面PC端串口助手成功打印
Raspberry pi is ready
,说明树莓派发送到PC端没得问题。 -
接着测试树莓派接收PC端的消息
- 树莓派接收也没得问题!!!
注意:当ctrl+C结束掉程序的时候,此时HC-05蓝牙会断开连接。无需惊慌,无需重新配对,因为我们绑定蓝牙为
rfcomm1
设备,所以直接再次运行程序,变会自动连接。哪怕拔掉蓝牙,再重新插上,依旧会自动连接配对!
至此,树莓派4B蓝牙与HC-05串口通信测试,便成功实现!