【问题标题】:如何通过蓝牙在两个树莓派之间进行通信并将传感器数据从一个树莓派发送到另一个树莓派?
【发布时间】:2022-01-22 06:08:44
【问题描述】:

我正在为某个学校项目工作。我想通过蓝牙将温度传感器数据从一个树莓派 4 发送到另一个 pi 4。 我搜索了很多教程,但没有找到任何相关的教程。请任何人对此提供帮助,否则任何建议都会非常有帮助。

【问题讨论】:

  • 我的回答解决了您的问题吗?如果是这样,请考虑接受它作为您的答案 - 通过单击计票旁边的空心对勾/复选标记。如果没有,请说出什么不起作用,以便我或其他人可以进一步为您提供帮助。谢谢。 meta.stackexchange.com/questions/5234/…

标签: python bluetooth raspberry-pi


【解决方案1】:

我对蓝牙知之甚少,这个答案可能已经过时或实践不佳,但至少它有效。如果有人知道更好,请提供更好的答案,我将删除此。

所以,我有两个运行 Raspbian 的 Raspberry Pi 4。我在两者上都安装了BlueDot

sudo pip3 install bluedot

然后我paired他们,首先运行这个:

sudo bluetoothctl
[bluetooth]# discoverable on
[bluetooth]# pairable on
[bluetooth]# agent on
[bluetooth]# default-agent

这是第二个:

sudo bluetoothctl
[bluetooth]# discoverable on
[bluetooth]# pairable on
[bluetooth]# agent on
[bluetooth]# default-agent
[bluetooth]# scan on

当第一个 RasPi (hostname=pi4) 出现时,我通过在第二个 RasPi 中键入以下内容与之配对:

[bluetooth]# pair DC:A6:32:03:0C:1B

然后我退出bluetoothctl

然后我在第一个 RasPi UNDER sudo 上运行了这个服务器代码(归属于 here):

#!/usr/bin/env python3

from bluedot.btcomm import BluetoothServer
from time import sleep
from signal import pause

def data_received(data):
    print("recv - {}".format(data))
    server.send(data)

def client_connected():
    print("client connected")

def client_disconnected():
    print("client disconnected")

print("init")
server = BluetoothServer(
    data_received,
    auto_start = False,
    when_client_connects = client_connected,
    when_client_disconnects = client_disconnected)

print("starting")
server.start()
print(server.server_address)
print("waiting for connection")

try:
    pause()
except KeyboardInterrupt as e:
    print("cancelled by user")
finally:
    print("stopping")
    server.stop()
print("stopped")

而这个代码(归属于here)在第二个,也在sudo下:

#!/usr/bin/env python3

from bluedot.btcomm import BluetoothClient
from datetime import datetime
from time import sleep
from signal import pause

def data_received(data):
    print("recv - {}".format(data))

print("Connecting")
c = BluetoothClient("pi4", data_received)

print("Sending")
try:
    while True:
        c.send("hi {} \n".format(str(datetime.now())))
        sleep(1)
finally:
    c.disconnect()

两个 RasPi 成功交换消息直到被中断。我测量了往返时间 (RTT),两个 RasPi 4 之间的平均间隔约为 30 毫秒,相距约一米。

最好将pi 用户添加到dialout Linux 组(或其他某个组),而不是在sudo 下运行。如果有人知道,请说。

【讨论】:

  • sudobluetoothctlbluedot 的蓝牙交互通常不需要。例外情况是“Raspberry Raspberry Pi OS Lite
  • @ukBaz 好的,谢谢。我发现我的系统上需要sudo,因为没有它就无法工作。
  • @Mark 感谢您回答我的问题。它有效:)
  • 酷 - 祝你的项目好运!
猜你喜欢
  • 2016-12-07
  • 2017-03-30
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 2018-06-16
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多