我目前正在尝试从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。
答案 0 :(得分:1)
<强>解决方案强>
当您通过套接字发送数据时,您必须对其进行编码,否则会抛出字节缓冲区错误。通过套接字发送数据时,只需使用。
sock.send("2".encode())