前提:在已经安装USB驱动的情况下,笔者已经安装了ch341驱动,linux已经能够检测到USB设备存在。
1. 查看USB属性以及蓝牙属性
插入USB转蓝牙模块
stty -F \dev\ttyUSB0
尤其要关注USB的波特率属性,保证要与即将设置的蓝牙的波特率相同,这样传递数据才不会乱码。
stty -F \dev\ttyUSB0 115200 #修改usb的波特率
# 其余用法可以通过 stty --help 来查询
蓝牙属性是通过AT指令来查询,详细见跳转 其中有以下内容需要注意:
- 蓝牙波特率需要与USB的波特率相同
- 查询的时候留意NAME与PWSD
- 需要将模式设置为Slave,因为手机或者电脑需要主动连接蓝牙HC-05,在配对角色中蓝牙模块属于从模式。
2. 查看USB设备文件
将USB转串口模块连接蓝牙模块。
cd \dev # 跳到设备文件夹下
ls -l # 列出所有设备文件
尤其注意ttyUSB0文件,如果存在就没问题。ttyUSB0文件是USB数据读写中间文件,向其中写数据,相当于发送数据;从其中读数据,相当于接收数据。
在将USB转蓝牙模块的Rx与Tx相连之后(相当于回环模式)之后,可以用下面的代码进行测试:
echo "hello" > ttyUSB0 # 用USB发送"hello"
cat ttyUSB0 # 查看USB的接收缓冲区内容,应该会看到"hello"
ttyUSB0的接受缓冲区是没有结尾的,如果cat的时候会一直输出,需要control+c终止。
3. 利用pyserial发送数据
虽然知道是对ttyUSB0进行读写,但是利用python自身的file类文件操作会出现很多问题,比如read时候会一直卡死,write时候接收方得到的是不可见字符等等,所以使用pyserial库。
import serial #导入模块
try:
#端口,GNU / Linux上的/ dev / ttyUSB0 等 或 Windows上的 COM3 等
portx="/dev/ttyUSB0"
#波特率,标准值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200
bps=115200
#超时设置,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)
timex=5
# 打开串口,并得到串口对象
ser=serial.Serial(portx,bps,timeout=timex)
# 写数据
# 如果使用中文必需使用gbk编码
result=ser.write("All is ready. 一切都准备好了。".encode("gbk"))
print("写总字节数:",result)
ser.close()#关闭串口
except Exception as e:
print("---异常---:",e)