【发布时间】:2022-07-14 17:04:46
【问题描述】:
众所周知,BT 通信是我们在日常生活中使用的东西。多个设备在彼此之间发送复杂的数据,并且运行非常顺利。所以我想要实现的是发送几乎 4 个介于 0 和 255 之间的变量值,以使用以下代码从 Android 手机通过蓝牙控制我的灯光(颜色和亮度):
btSocket.getOutputStream().write(instructions.getBytes(StandardCharsets.UTF_8));
指令或值作为字符串发送。此函数实际上将字符串转换为逐行发送的字节,因此如果我使用来自 UART 的 Python 代码(因为我的 BT 模块使用这种类型的通信)在无限循环中读取它,如下所示:
while True:
while uart.any():
read_instruction = uart.readline().decode()
我得到这样的输出:
2
5
5
5
2
2
1
考虑到我只是想通过蓝牙控制 LED 灯条,这处理起来非常复杂且烦人。我知道有很多应用程序可以做到所有这些,但我想自己学习并制作一个。我已经在 Google 和 YT 上搜索了好几个小时,那里的所有人都在使用只给出简单指令的代码,例如 1 = 做某事,2 = 做其他事情,这很容易编程。但正如我已经提到的,BT 用于发送更复杂的数据甚至播放音乐,那么问题在哪里呢?我是否必须编写复杂的函数来将我的“行”数据处理为变量,或者我是否使用错误的函数来发送数据?或者也许是为了接收数据?
如果我总是发送相同的数据,例如 255,255,255,1,我会使用这样的函数:
while True:
while uart.any():
red = uart.read(3).decode()
etc
但是数字从 0 变为 255,所以我不能给它们一个固定的长度。
感谢您的想法,我是初学者,所以可能我错过了一些我应该学习的非常简单和重要的东西。或者我只需要艰难地去做。
【问题讨论】:
-
to send pretty much 4 variable values between 0 and 255从定义这些变量开始您的代码,因为目前还不清楚您在做什么。这些变量是整数吗?我们不知道。你没说。你从一个没有赋值的字符串开始,所以我们不知道会发生什么。 -
实际上我确实在代码示例下方告诉了
where instructions or values are sent as a String。抱歉,如果我没有提供示例而使您感到困惑。处理后的字符串如下所示:instructions = ("255 255 255 3");。我已经通过玩代码找到了解决方案,请您检查一下,如果我使用了正确的方法,请告诉我?谢谢 -
如果你有四个数值,那么你可以只发送四个字节。我不明白你为什么要先将它们转换为字符串然后再转换回来。如果您只需要 4 个字节,为什么还要发送 14 个字节?此外,您仍然没有告诉您如何从四个变量值构建该字符串。或者你的四个变量值是什么类型。
-
感谢您的意见,我基本上是初学者,所以我从错误中吸取教训。我知道 UART 无论如何都会接收字节,而且我必须在接收设备上处理它们的转换,所以我没有太在意发送字符串还是整数。您为我指明了正确的方向,谢谢。解决方案现已更新。如果有问题或相关问题,我很乐意收到负面反馈。