首先,安装基本的蓝牙库
sudo apt-get install python-dev sudo apt-get install libbluetooth-dev sudo pip install pybluez
修改/etc/systemd/system/bluetooth.target.wants/bluetooth.service文件
特别是要切记允许打开串口服务ExecStartPost这个(坑爹的网上大部分文章都没有提及这个,导致扫描的到,但是各种串口调试工具死活连不上,原因未知……)
ExecStart=/usr/lib/bluetooth/bluetoothd ExecStartPost=/usr/bin/sdptool add SP
实现代码,Python的
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' 王政乔的个人代码库:蓝牙 当前版本:1.0.0 Python:2+;3+ 请注意,windows和linux存在差异,可能会导致兼容错误。 ''' from bluetooth import * import subprocess class service: uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee" server_name="SampleServer" def __init__(self): pass def set_uuid(self,new_uuid): self.uuid=new_uuid pass def set_server_name(self,newname): self.server_name=newname pass def init_service(self): self.server_sock=BluetoothSocket(RFCOMM) self.server_sock.bind(('',1)) self.server_sock.listen(1) self.port=self.server_sock.getsockname()[1] print("初始化完成,初始化信息:") print(" uuid:\t",self.uuid) print(" server_name:\t",self.server_name) print("\n") pass def start_service(self): advertise_service(self.server_sock, self.server_name,service_id = self.uuid,service_classes = [self.uuid, SERIAL_PORT_CLASS],profiles = [SERIAL_PORT_PROFILE]) print("等待设备接入(通道",self.port,")") self.client_sock, self.client_info = self.server_sock.accept() print("设备已连接,对方为地址为:[",self.client_info[0],"],连接端口为:",self.client_info[1]) try: while True: data=self.client_sock.recv(1024) if len(data)==0: break print("收到消息:%s"%data) self.client_sock.send(data) except IOError: print("出现了异常!") pass print("通信结束") self.client_sock.close() self.server_sock.close() cmd='sudo hciconfig hci0 piscan' subprocess.check_output(cmd,shell=True) ss=service() ss.init_service() ss.start_service()
这段代码不是我写的,是代码注释里头的哥们,🙏
sudo python3 bluetooth_joger.py
用手机找个蓝牙测试工具,连进来就可以测试了!
说个题外话,之前测试的时候,运行了无数次都不成功,并且反复报import bluetooth这句,找不到bluetooth库,重装了无数次,最后发现是因为我把这段测试的代码命名成了bluetooth.py了……估计他是自己找自己去了……晕死!