首先,安装基本的蓝牙库
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了……估计他是自己找自己去了……晕死!