焦小花同学

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 设备的操作,最后还完成了一个实战项目!蓝牙通信的世界是不是很神奇?