HC05的使用
参考本人上一篇博文
http://t.csdn.cn/JQW5T
模拟串口
在linux下,先连接上你的HC05,查询MAC地址,然后运行以下指令
sudo rfcomm bind 0 98:D3:71:FE:5C:23 #mac地址替换成自己的
查询是否成功:
ls /dev | grep rfcomm
应该有显示rfcomm0
这个时候就可以用串口通讯
可以参考本人代码:
ser.py
#coding=utf-8
import time
import serial
import sys
#port = '/dev/ttyUSB0' #linux
#port = 'com9'#windows
# port = 'rfcomm0' # for bluetooth dev with "sudo rfcomm bind 0 98:D3:71:FE:5C:23"
class Ser:
def __init__(self, _port='/dev/ttyUSB0', _bitrate = 115200, _timeout = 0.1):
self.port = _port
self.bitrate = _bitrate
self.timeout = _timeout
self.connecting = False
self.connect()
def connect(self):
print("connecting to "+self.port)
while not self.connecting:
try:
time.sleep(1)
print("try")
self.com = serial.Serial(self.port, self.bitrate, timeout=self.timeout)
self.connecting = True
print("ok")
break
except KeyboardInterrupt:
print("KeyboardInterrupt")
sys.exit(0)
except:
print("fail")
def info(self):
print(self.com)
def setPort(self, _port):
self.port = _port
self.connect()
def setBitrate(self, _bitrate):
self.bitrate = _bitrate
self.connect()
def setTimeout(self, _timeout):
self.timeout = _timeout
self.connect()
def available(self):
return self.connecting
def get(self):
ch = ' '
if self.com.inWaiting():
ch = self.com.read()
print(ch)
return ch
def put(self, str):
print("writing:"+str)
self.com.write(str.encode("utf-8"))
print("done")
def detect():
time.sleep(0.05)
if __name__ =='__main__':
com = Ser(port)
main.py
from ser import Ser
ser = Ser("/dev/rfcomm0", 9600)
while True:
ser.get()
亲测成功了
pybluez
pybluez安装
sudo apt-get install libbluetooth-dev
pip install setuptools==58
sudo apt install python3-testresources
#以上操作防止pybluez安装不上
pip install pybluez
pybluez使用
参考如下:
blue_tooth.py
import time
import bluetooth as bt
import threading
from datetime import datetime as t
class BlueTooth:
def __init__(self):
self.dev_list = []
self.find_thread = threading.Thread(target=self.find_dev)
self.data_buf = ""
self.socket = bt.BluetoothSocket(bt.RFCOMM)
def find_dev(self):
devs = bt.discover_devices(lookup_names=True)
for (addr,name) in devs:
if addr not in self.dev_list:
print("[NAME]:" + str(name))
print("[MAC]:" + str(addr))
self.dev_list.append([name, addr])
time.sleep(5)
def find(self):
self.find_thread.start()
def connect_by_name(self, name):
for [n,addr] in self.dev_list:
if str(n)==str(name):
self.connect_by_addr(addr)
break
def connect_by_addr(self, addr):
self.socket.connect((addr, 1))
print("successfully connected to "+addr)
def receive(self):
ret = ""
data = self.socket.recv(1024)
self.data_buf += data.decode()
if '\n' in data.decode() or '\r' in data.decode():
print(t.now().strftime("%H:%M:%S")+"->" + self.data_buf.strip() )
ret = ''.join(ch for ch in self.data_buf if ch.isalnum())
self.data_buf = ""
return ret
if __name__ == "__main__":
b = BlueTooth()
b.connect_by_addr("98:D3:71:FE:5C:23")
while True:
b.receive()