在ubuntu中通过蓝牙发送二进制数据

在ubuntu中通过蓝牙发送二进制数据,ubuntu,bluetooth,Ubuntu,Bluetooth,我在一个项目中工作,我需要在Ubuntu中通过蓝牙向RFID阅读器发送/读取数据 我可以使用rfcomm connect连接读卡器,但现在我需要通过蓝牙向读卡器发送/接收二进制数据。在寻找信息时,我没有在Ubuntu中找到这样做的方法。我发现如何使用minicom发送整个文件,但这不是我需要的,因为我需要从C/C++/Python发送/接收二进制数据 有人知道如何通过蓝牙发送/接收二进制数据吗?由于Python是一个选项,请查看或Python模块。两者都允许您通过蓝牙传输任何类型的数据,并且都有

我在一个项目中工作,我需要在Ubuntu中通过蓝牙向RFID阅读器发送/读取数据

我可以使用
rfcomm connect
连接读卡器,但现在我需要通过蓝牙向读卡器发送/接收二进制数据。在寻找信息时,我没有在Ubuntu中找到这样做的方法。我发现如何使用minicom发送整个文件,但这不是我需要的,因为我需要从C/C++/Python发送/接收二进制数据


有人知道如何通过蓝牙发送/接收二进制数据吗?

由于Python是一个选项,请查看或Python模块。两者都允许您通过蓝牙传输任何类型的数据,并且都有很好的文档记录。只有当您的客户端支持OBEX协议时,PyOBEX才能工作

在回答我自己的问题时,问题是我为我的RFID阅读器实现了一个过时的通信协议,当它“理解”接收到的消息时,它只是响应。这意味着,使用过时协议编码的消息没有响应,程序似乎被阻止,但仅仅因为它没有响应

由于这对某些人很有用,我使用的通过蓝牙与使用PyBluez的CAEN RFID阅读器进行双向通信的代码如下:

uuid = "00001101-0000-1000-8000-00805f9b34fb"
addr = "00:12:F3:20:D7:E7"
service_matches = find_service( uuid = uuid, address = addr )

if len(service_matches) == 0:
     print("couldn't find the SampleServer service =(")
     sys.exit(0)

first_match = service_matches[0]
port = first_match["port"]
host = first_match["host"]

sock=BluetoothSocket( RFCOMM )
sock.connect((host, port))

string_set_protocol = "\x80\x01\x00\x00\x00\x00\x53\x58\x00\x1C\x00\x00\x00\x08\x00\x01\x00\x74\x00\x00\x00\x0A\x00\x54\x00\x00\x00\x03"

sock.send(string_set_protocol)
received_str = sock.recv(1024)
received_binary = ":".join("{:02x}".format(ord(c)) for c in received_str) #Print each byte in hexadecimal separated by ":"
print(received_binary)

而且它工作得很好

谢谢你的回答,PyBluez似乎是个不错的选择。现在我在双向通信方面遇到了麻烦。这是很容易获得单向的方向,但由于我需要与RFID阅读器通信,我需要发送命令,并接收结果。你知道怎么做吗?@tonytr,对于双向通信,你必须实现某种侦听器,在建立连接后,在某个端口上侦听来自RFID阅读器的传入数据包。您应该查看打开端口并侦听的示例。然后您应该根据调用socket.recv()之类的函数。完成后别忘了断开并关闭插座。谢谢你的回答@balt,我终于成功地与读者进行了完美的沟通。下面我将介绍我是如何做到这一点的。再次感谢