gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:55:57 24 4
gpt4 key购买 nike

我目前正在尝试从 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: Expecting byte-buffer, got str”。

还尝试过:

sock.send(str('2'))

它还会抛出一个错误:“TypeError: Expecting byte-buffer, got 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"):警告(来自警告模块): 文件“/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 类型的未初始化对象回溯(最近一次调用最后一次): 文件“”,第 1 行,位于 发送(“2”) 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PyBluez-0.22-py3.6.egg/bluetooth/osx.py”,第 122 行,发送 返回 self._sock.send(数据) 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PyBluez-0.22-py3.6.egg/lightblue/_bluetoothsockets.py”,第 524 行,发送 结果 = self.__conn.write(writebuf[:sendbytecount]) 文件“/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)),类型错误:需要字节缓冲区,得到 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 行,发送 返回 self._sock.send(数据) 文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PyBluez-0.22-py3.6.egg/lightblue/_bluetoothsockets.py”,第 487 行,发送 raise TypeError("数据必须是字符串,为 %s"% type(data))类型错误:数据必须是字符串,是类“字节”

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

最佳答案

解决方案

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

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

关于python - 使用 Python 3 通过蓝牙发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45577360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com