首页 文章

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

提问于
浏览
1

我目前正在尝试从Python 3向Arduino(使用HC-06)发送消息 . 我已经设法 Build 连接,但我似乎无法找到正确的方式来发送消息 .

这是我用来设置连接的代码(我使用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网站没有问题 .

那里有很多指南,其中有一些我无法复制的例子 . 谁能告诉我如何发送基本命令?我甚至接近答案了吗?

EDIT: 我现在尝试了"sock.send(" 2 ".encode())"并且它也抛出了一个错误:"TypeError: data must be string, was class '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行Foundation.NSData.alloc() . initWithBytes_length(data,len(data)),UninitializedDeallocWarning:泄漏_NSPlaceholderData Traceback类型的未初始化对象(最近一次调用最后一次):文件“ ", line 1, in sock.send(" 2 ") File " /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PyBluez-0.22-py3.6.egg/bluetooth/osx.py ", line 122, in send 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 ", line 524, in send 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(最近一次调用最后一次):文件“", line 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 ", line 122, in send 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 ", line 487, in send raise TypeError("数据必须是字符串,是%s “%type(data))TypeError:数据必须是字符串,是类'bytes'

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

1 回答

  • 1

    Solution

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

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

相关问题