基于python实现蓝牙通信代码实例
Python  /  管理员 发布于 6年前   181
这篇文章主要介绍了基于python实现蓝牙通信代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
安装和示例
linux下安装
sudo apt-get install python-pip libglib2.0-devsudo pip install bluepy
官方示例
import btleclass MyDelegate(btle.DefaultDelegate):def __init__(self, params):btle.DefaultDelegate.__init__(self)#...initialise heredef 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 calledcontinueprint "Waiting..."#Perhaps do somethingelse here
蓝牙通信模块pybluez的使用
选择蓝牙通信对象
import bluetoothtarget_name = "My Device"target_address = Nonenearby_devices = bluetooth.discover_devices()for bdaddr in nearby_devices:if target_name == bluetooth.lookup_name(bdaddr):target_address = bdaddrbreakif target_address is not None:print("found target bluetooth device with address ",target_address)else :print("could not find target bluetooth device nearby")
查询设备服务
import bluetoothnearby_devices = bluetooth.discover_devices(lookup_names = True)for addr, name in nearby_devices:print(" %s - %s" % (addr, name))services = bluetooth.find_service(address = addr)for svc in services:print("Service Name: %s" % svc["name"])print(" Host: %s" % svc["host"])print(" Description: %s" % svc["description"])print(" Provided By: %s" % svc["provider"])print(" Protocol: %s" % svc["protocol"])print(" channel/PSM: %s" % svc["port"])print(" svc classes: %s " % svc["service-classes"])print(" profiles: %s " % svc["profiles"])print(" service id: %s " % svc["service-id"])print("")
通过RFCOMM方式进行通信
采用类似于socket编程模型的方式进行蓝牙通信的编程
1.服务器端程序
import bluetoothserver_sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)port = 1server_sock.bind(("", port))server_sock.listen(1)client_sock, address = server_sock.accept()print "Accepted connection from ",addressdata = client_sock.recv(1024)print "received [%s]" % dataclient_sock.close()server_sock.close()
2. 客户端程序
import bluetoothbd_addr = "01:23:45:67:89:AB"port = 1sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)sock.connect((bd_addr, port))sock.send("hello!!")sock.close()
通过L2CAP方式进行通信
L2CAP的sockets方式几乎等同于RFCOMM的sockets方式,唯一的不同是通过L2CAP的方式,并且端口是0x1001到0x8FFF之间的奇数端口。默认的连接可以传送的可靠报文是672个字节。
1.服务器端程序
import bluetoothserver_sock = bluetooth.BluetoothSocket(bluetooth.L2CAP)port = 0x1001server_sock.bind(("", port))server_sock.listen(1)client_sock, address = server_sock.accept()print "Accepted connection from ",addressdata = client_sock.recv(1024)print "received [%s]" % dataclient_sock.close()server_sock.close()
2.客户端程序
import bluetoothsock=bluetooth.BluetoothSocket(bluetooth.L2CAP)bd_addr = "01:23:45:67:89:AB"port = 0x1001sock.connect((bd_addr, port))sock.send("hello!!")sock.close()
调整MTU大小
l2cap_sock = bluetooth.BluetoothSocket( bluetooth.L2CAP )# connect the socketbluetooth.set_l2cap_mtu( l2cap_sock, 65535 )
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号