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

使用Python 3通过蓝牙发送消息,python,python-3.x,bluetooth,arduino,pybluez,Python,Python 3.x,Bluetooth,Arduino,Pybluez,我目前正试图从Python 3向Arduino(使用HC-06)发送一条消息。我设法建立了联系,但似乎找不到发送消息的正确方式 以下是我用于设置连接的代码(我使用PyBluez进行蓝牙): 要发送,我正在尝试: sock.send("2") 它抛出错误:“TypeError:需要字节缓冲区,得到str” 还尝试: sock.send(str('2')) 它还抛出一个错误:“TypeError:需要字节缓冲区,得到str” 我试过很多其他的方法,比如“sock.send(2)”,“sock.s

我目前正试图从Python 3向Arduino(使用HC-06)发送一条消息。我设法建立了联系,但似乎找不到发送消息的正确方式

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

要发送,我正在尝试:

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:数据必须是字符串,was类是‘bytes’”

使用另一个ide为我提供了有关错误的更具体信息:

sock.send(“2”): 警告(来自警告模块): 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/PyBluez-0.22-py3.6.egg/lightblue/_bluetoothsockets.py”,第737行 Base.NdData .AcLoor().InthByTeSyLangthHyg(数据,LeN(data)) UninitializedAllocWarning:泄漏类型为_NSPlaceholderData的未初始化对象 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 短袜发送(“2”) 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/PyBluez-0.22-py3.6.egg/bluetooth/osx.py”,第122行,在send中 返回self.\u sock.send(数据) 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/PyBluez-0.22-py3.6.egg/lightblue/_bluetoothsockets.py”,第524行,在send中 结果=自身连接写入(writebuf[:sendbytecount]) 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/PyBluez-0.22-py3.6.egg/lightblue/_bluetoothsockets.py”,第737行,书面形式 Base.NdData .AcLoor().InthByTeSyLangthHyg(数据,LeN(data)) TypeError:应为字节缓冲区,但得到str

sock.send(“2.encode()): 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 sock.send(“2.encode()) 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/PyBluez-0.22-py3.6.egg/bluetooth/osx.py”,第122行,在send中 返回self.\u sock.send(数据) 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site packages/PyBluez-0.22-py3.6.egg/lightblue/_bluetoothsockets.py”,第487行,在send中 raise TypeError(“数据必须是字符串,为%s”%type(数据)) TypeError:数据必须是字符串,was类为“字节”


我开始怀疑图书馆。安装PyBluez时,我完全有可能出错。我要看看它对我的树莓皮3是否有效。

解决方案

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

sock.send("2".encode())

这是在使用bluez库,对吗?请尝试使用
sock.send('2'.encode())
@cunniemm我很确定它是PyBluez。@ClockSlave谢谢你的提示。不幸的是,它没有起作用。(更新原始帖子)谢谢你的想法。不幸的是,它没有起作用。更新了原始帖子,提供了更多关于错误的信息。@CarlBratt我不认为这很奇怪,我试着在我的笔记本电脑上用blue Toth做这件事,效果很好!我会进一步调查的。那么,这对我来说很可能是个问题。你在运行什么系统?@CarlBratt我在ubuntu和windows上试过!只是想对windows的代码做一点修改,但对我来说仍然有效!我现在已经成功地在树莓皮3上运行了它,谢谢你的帮助!
sock.send("2".encode())