python写安卓app控制蓝牙_基于python实现蓝牙通信代码实例

这篇文章主要介绍了基于python实现蓝牙通信代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

安装和示例

linux下安装

sudo apt-get install python-pip libglib2.0-dev

sudo pip install bluepy

官方示例

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

蓝牙通信模块pybluez的使用

选择蓝牙通信对象

import bluetooth

target_name = "My Device"

target_address = None

nearby_devices = bluetooth.discover_devices()

for bdaddr in nearby_devices:

if target_name == bluetooth.lookup_name(

bdaddr):

target_address = bdaddr

break

if target_address is not None:

print(

"found target bluetooth device with address ",

target_address)

else :

print(

"could not find target bluetooth device nearby"

)

查询设备服务

import bluetooth

nearby_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 bluetooth

server_sock = bluetooth.BluetoothSocket(

bluetooth.RFCOMM)

port = 1

server_sock.bind(("", port))

server_sock.listen(1)

client_sock, address = server_sock.accept()

print "Accepted connection from ",

address

data = client_sock.recv(1024)

print "received [%s]" % data

client_sock.close()

server_sock.close()

2. 客户端程序

import bluetooth

bd_addr = "01:23:45:67:89:AB"

port = 1

sock = 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 bluetooth

server_sock = bluetooth.BluetoothSocket(

bluetooth.L2CAP)

port = 0x1001

server_sock.bind(("", port))

server_sock.listen(1)

client_sock, address = server_sock.accept()

print "Accepted connection from ",

address

data = client_sock.recv(1024)

print "received [%s]" % data

client_sock.close()

server_sock.close()

2.客户端程序

import bluetooth

sock=bluetooth.BluetoothSocket(bluetooth.L2CAP)

bd_addr = "01:23:45:67:89:AB"

port = 0x1001

sock.connect((bd_addr, port))

sock.send("hello!!")

sock.close()

调整MTU大小

l2cap_sock = bluetooth.BluetoothSocket( bluetooth.L2CAP )

# connect the socket

bluetooth.set_l2cap_mtu( l2cap_sock, 65535 )

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。