使用Python 3通过蓝牙发送消息

时间:2017-08-08 20:17:53

标签: python python-3.x bluetooth arduino pybluez

我目前正在尝试从Python 3向Arduino(使用HC-06)发送消息。我设法建立了连接,但我似乎无法找到发送邮件的正确方法。

以下是我用来设置连接的代码(我使用PyBluez进行蓝牙处理):

import sys
import bluetooth

bd_addr = '[MAC-address for HC-06]'
port = 1
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((bd_addr,port))

发送我尝试:

sock.send("2")

抛出错误:" TypeError:期望字节缓冲区,得到str"。

也尝试过:

sock.send(str('2'))

它也会抛出一个错误:" TypeError:期望字节缓冲区,得到str"。

我已经尝试过其他类似的" sock.send(2)"," sock.send(b' 2')" ,bytearray," sock.send(bytes([" 2"]))"。基本上,无论我试图发送它的数据类型都需要另一种数据类型。

我已经设法通过Android手机上的蓝牙终端发送了我的所有命令(目前只有1和2),因此Arduino网站没有问题。

有很多指南都有我无法复制的例子。谁能告诉我如何发送基本命令?我甚至接近答案了吗?

修改 我现在尝试过" sock.send(" 2" .encode())"它也会抛出一个错误:" TypeError:数据必须是字符串,是类'字节'"

使用另一个ide给了我更多关于错误的具体信息:

sock.send(" 2&#34): 警告(来自警告模块):   文件" /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PyBluez-0.22-py3.6.egg/lightblue/_bluetoothsockets.py" ;,第737行     Foundation.NSData.alloc()。initWithBytes_length_(data,len(data)), UninitializedDeallocWarning:泄漏_NSPlaceholderData类型的未初始化对象 Traceback(最近一次调用最后一次):   文件"",第1行,in     sock.send(" 2&#34)   File" /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PyBluez-0.22-py3.6.egg/bluetooth/osx.py" ;,第122行,发送     return self._sock.send(data)   File" /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PyBluez-0.22-py3.6.egg/lightblue/_bluetoothsockets.py" ;,第524行,发送     result = self .__ conn.write(writebuf [:sendbytecount])   File" /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PyBluez-0.22-py3.6.egg/lightblue/_bluetoothsockets.py" ;,第737行,在写     Foundation.NSData.alloc()。initWithBytes_length_(data,len(data)), TypeError:期望字节缓冲区,得到str

sock.send(" 2" .encode()): Traceback(最近一次调用最后一次):   文件"",第1行,in     sock.send(" 2" .encode())   File" /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PyBluez-0.22-py3.6.egg/bluetooth/osx.py" ;,第122行,发送     return self._sock.send(data)   File" /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PyBluez-0.22-py3.6.egg/lightblue/_bluetoothsockets.py" ;,第487行,发送     引发TypeError("数据必须是字符串,是%s"%type(data)) TypeError:data必须是string,是class' bytes'

我开始怀疑图书馆。安装PyBluez时我完全有可能做错了。我想看看它是否适用于我的Raspberry Pi 3。

1 个答案:

答案 0 :(得分:1)

<强>解决方案

当您通过套接字发送数据时,您必须对其进行编码,否则会抛出字节缓冲区错误。通过套接字发送数据时,只需使用。

sock.send("2".encode())
相关问题