PyBluez(二): 蓝牙通信的魔法师 Python 库!
6. 蓝牙低功耗(BLE)设备的操作
说到蓝牙,我们不得不提到一个越来越流行的技术 —— 蓝牙低功耗(Bluetooth Low Energy,简称 BLE)。很多智能手环、智能家居设备都在使用这项技术。别担心,PyBluez 也能帮我们搞定 BLE 设备!
我们需要安装一个额外的库
gattlib
:
```python
pip install gattlib
安装好后,我们就可以开始探索 BLE 设备啦!
6.1 扫描 BLE 设备
来看看如何扫描周围的 BLE 设备:
python
复制
from gattlib import DiscoveryService
service = DiscoveryService(“hci0”) # “hci0” 是蓝牙适配器的名称
devices = service.discover(2) # 扫描 2 秒
for address, name in devices.items():
print(“设备名:{}, 地址:{}”.format(name, address))
这段代码会扫描周围的 BLE 设备,并打印出它们的名称和地址。是不是很简单?
小贴士:BLE 设备通常会不断地广播自己的存在,所以扫描时间不需要太长哦!
6.2 连接 BLE 设备并读取数据
找到 BLE 设备后,我们来看看如何连接它并读取数据:
python
复制
from gattlib import GATTRequester
class BLEReader(object):
def __init__(self, address):
self.requester = GATTRequester(address, False)
self.connect()
def connect(self):
print(“正在连接...”)
self.requester.connect(True)
print(“连接成功!”)
def read_data(self, uuid):
data = self.requester.read_by_uuid(uuid)[0]
return data
# 使用示例
reader = BLEReader(“00:11:22:33:44:55”) # 替换成你的 BLE 设备地址
data = reader.read_data(“1234”) # 替换成你想读取的特征值的 UUID
print(“读取到的数据:”, data)
这段代码创建了一个
BLEReader
类,它可以连接到 BLE 设备并读取指定特征值的数据。
注意事项:不同的 BLE 设备可能有不同的特征值 UUID,使用前要先了解你的设备哦!
7. 实战项目:蓝牙控制的 LED 灯
学了这么多,我们来做个小项目吧!假设我们有一个通过蓝牙控制的 LED 灯,我们要用 Python 来控制它的开关。
python
复制
import bluetooth
import time
class BluetoothLED:
def __init__(self, target_name):
self.target_name = target_name
self.sock = None
def connect(self):
nearby_devices = bluetooth.discover_devices(lookup_names=True)
for addr, name in nearby_devices:
if name == self.target_name:
self.sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
self.sock.connect((addr, 1))
print(“成功连接到 LED 设备!”)
return True
print(“未找到 LED 设备 :(”)
return False
def send_command(self, command):
if self.sock:
self.sock.send(command)
print(f“发送命令:{command}”)
else:
print(“未连接设备,请先连接。”)
def turn_on(self):
self.send_command(“ON”)
def turn_off(self):
self.send_command(“OFF”)
def close(self):
if self.sock:
self.sock.close()
print(“关闭连接”)
# 使用示例
led = BluetoothLED(“MyBTLED”)
if led.connect():
led.turn_on()
time.sleep(2)
led.turn_off()
led.close()
这个小项目创建了一个
BluetoothLED
类,它可以连接到我们的 LED 设备,并控制它的开关。是不是很有意思?
小伙伴们,今天我们深入探索了 PyBluez 的更多功能,还尝试了 BLE 设备的操作,最后还完成了一个实战项目!蓝牙通信的世界是不是很神奇?