发布时间:2019-09-24 08:38:08编辑:auto阅读(1784)
使用python的第三方库bluepy可以很方便的在linux主机如树莓派上进行蓝牙通信。
sudo apt-get install python-pip libglib2.0-dev
sudo pip install bluepy
源码安装如下:
$ sudo apt-get install git build-essential libglib2.0-dev
$ git clone https://github.com/IanHarvey/bluepy.git
$ cd bluepy
$ python setup.py build
$ sudo python setup.py install
官方示例代码
import btle
class MyDelegate(btle.DefaultDelegate):
def __init__(self, params):
btle.DefaultDelegate.__init__(self)
# ... initialise here
def handleNotification(self, cHandle, data):
# ... perhaps check cHandle
# ... process 'data'
# Initialisation -------
p = btle.Peripheral( address )
p.setDelegate( MyDelegate(params) )
# Setup to turn notifications on, e.g.
# svc = p.getServiceByUUID( service_uuid )
# ch = svc.getCharacteristics( char_uuid )[0]
# ch.write( setup_data )
# Main loop --------
while True:
if p.waitForNotifications(1.0):
# handleNotification() was called
continue
print "Waiting..."
# Perhaps do something else here
这是自己写的一个和arduino(arduino bluno)上的BLE通讯的代码,先遍历输出目标的服务(server)信息
在与目标通讯。
在arduino上只是接收到’B’字符后开始发送数据
from bluepy import btle
from bluepy.btle import DefaultDelegate
import time
class NotifyDelegate(DefaultDelegate):
def __init__(self):
DefaultDelegate.__init__(self)
def handleNotification(self,cHandle,data):
print("notify from "+str(cHandle)+str(data)+"\n")
dev=btle.Peripheral("50:65:83:94:28:02").withDelegate(NotifyDelegate())
time.sleep(0.5)
for ser in dev.getServices():
print(str(ser))
for chara in ser.getCharacteristics():
print(str(chara))
print("Handle is "+str(chara.getHandle()))
print("properties is "+chara.propertiesToString())
if(chara.supportsRead()):
print(type(chara.read()))
print(chara.read())
print("\n")
dev.writeCharacteristic(37,b'A',withResponse=True)
dev.waitForNotifications(1)
dev.writeCharacteristic(37,b'b',withResponse=True)
dev.waitForNotifications(1)
dev.writeCharacteristic(37,b'A',withResponse=True)
dev.waitForNotifications(1)
dev.writeCharacteristic(37,b'b',withResponse=True)
i=0
dev.writeCharacteristic(37,b'B',withResponse=False)
while(True):
if(dev.waitForNotifications(1)):
i=i+1
if(i>1000):
break
continue
print("Waiting...")
time.sleep(0.5)
dev.disconnect()
上一篇: Python爬虫:导出爬取的数据
下一篇: 用Python实现几个简单的图片特效
47774
46285
37166
34664
29256
25916
24797
19894
19452
17947
5741°
6349°
5862°
5912°
7014°
5850°
5874°
6380°
6339°
7707°