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

时间:2015-11-02 11:05:53

标签: ubuntu bluetooth

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

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

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

2 个答案:

答案 0 :(得分:1)

由于Python是一个选项,请查看PyBluezPyOBEX Python模块。两者都允许您通过蓝牙传输任何类型的数据,并有详细记录。 PyOBEX仅在您的客户端支持OBEX协议时才有效。

答案 1 :(得分:0)

回答我自己的问题,问题是我为我的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)

它完美无缺