python使用蓝牙与HC05通讯(pybluez调用socket、模拟串口)

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧易风船长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值