我是靠谱客的博主 受伤小刺猬,最近开发中收集的这篇文章主要介绍python蓝牙编程代码_以编程方式通过python将蓝牙设备绑定到rfcomm,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我用python编写了一个脚本,用于M5Stack Stick C(如raduino)与树莓派之间的串行通信。一切正常。我可以将树莓派中的“ X”,“ Y”或“ Z”发送到棍子,他将把值(G-Force)返回给raspi!到现在为止还挺好

代码:

在raspy上使用Python:

import serial

import time

import threading

ser = serial.Serial('/dev/rfcomm5') #init serial port

input_line = []#init input char array

def process_data(_data):

#called every time a sream is terminated by n

#and the command string is ready to use

command = convert(_data)

print(command)

def convert(s): #convert the char list in a string

new = "" #init string to append all chars from char array

for x in s: # traverse in the string

new += str(x)

return new # return string

def processIncomingByte(inByte):#adding incoming chars to input_line

global input_line# globalize the input_line

if(inByte == 'n'):#if n is incoming, end the chararray and release process data method

process_data(input_line)

input_line = []#reset input_line for next incoming string

elif(inByte == 'r'):

pass

else:#put all incoming chars in input_line

input_line.append(inByte)

while True:

while(ser.in_waiting > 0):#while some data is waiting to read....

processIncomingByte(ser.read())#.... process bytes whit method

ser.write(b'Xn')

time.sleep(0.5)

在脚本工作之前,我必须通过Blueman手动将m5Stak Stick-C绑定到/ dev / Rfcomm5。它可以通过GUI或控制台正常工作。

但是现在我想通过python将摇杆连接到rfcomm5(只是知道MAC地址,稍后会在配置文件中找到...),我开始进行研究,但是研究越多,我就越困惑上午!!我通过套接字和服务器客户端方法阅读了一些东西。在单独的脚本上,依此类推...。我测试了这段代码:

from bluetooth import *

target_name = "M5-Stick-C"

target_address = None

nearby_devices = discover_devices()

for address in nearby_devices:

if (target_name == lookup_name( address )):

target_address = address

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")

确实找到了设备(只是测试)!但是我是否真的需要制作第二个脚本/进程以从我的脚本进行连接?

M5stack Stick-C是服务器吗?(我认同)

我对所有这些东西都很困惑。我编写了很多代码,但从来没有写过套接字,服务器客户端的东西。基本上,通信(服务器/客户端?)有效。我只需要通过macadress将在第二个脚本中找到的设备连接到rfcomm5(或任何rfcomm)。我需要一个蓝牙插座吗?就像在这个例子中一样https://gist.github.com/kevindoran/5428612

rfcomm是套接字还是我错了?

解决方案

在通信过程中使用了许多层,取决于您进入该堆栈的位置,将取决于您需要执行的编码。另一个复杂因素是,BlueZ(Linux上的蓝牙堆栈)在最近一段时间内改变了其工作方式,从而在互联网上留下了许多过时的信息,容易使人们感到困惑。

使用两个蓝牙设备,他们需要建立配对。这通常是一次性配置步骤。这可以使用Blueman之类的工具来完成,也可以在命令行上通过来完成bluetoothctl。一旦在RPi和M5Stack Stick之间建立了配对,就无需再次发现附近的设备。如果告诉脚本连接到哪个设备,则脚本应该能够连接。

M5Stack棒广告中称其具有串行端口配置文件(SPP)。这是rfcomm上的一层。

有一篇博客文章介绍了如何使用标准的Python3安装来完成这种连接:http://blog.kevindoran.co/bluetooth-programming-with-python-3/

我的期望是,您只需在RPi上执行client.py,因为M5Stack Stick是服务器。您将需要知道其地址和连接哪个端口。可能会在端口号上进行反复试验(似乎很常见的是1和3)。

因此,总而言之,我的建议是使用标准的Python Socket库或Bluedot。这将允许您在代码中指定希望连接的设备的地址,并且底层库将负责进行连接并设置串行端口(只要您已经将两个设备配对)。

Bluedot上面的样子的示例

from bluedot.btcomm import BluetoothClient

from signal import pause

from time import sleep

# Callback to handle data

def data_received(data):

print(data)

sleep(0.5)

c.send("Xn")

# Make connection and establish serial connection

c = BluetoothClient("M5-Stick-C", data_received)

# Send initial requests

c.send("Xn")

# Cause the process to sleep until data received

pause()

使用Python套接字库的示例:

import socket

from time import sleep

# Device specific information

m5stick_addr = 'xx:xx:xx:xx:xx:xx'

port = 5 # This needs to match M5Stick setting

# Establish connection and setup serial communication

s = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)

s.connect((m5stick_addr, port))

# Send and receive data

while True:

s.sendall(b'Xn')

data = s.recv(1024)

print(data)

sleep(0.5)

s.close()

最后

以上就是受伤小刺猬为你收集整理的python蓝牙编程代码_以编程方式通过python将蓝牙设备绑定到rfcomm的全部内容,希望文章能够帮你解决python蓝牙编程代码_以编程方式通过python将蓝牙设备绑定到rfcomm所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部