通过蓝牙串口将 2 个 ESP32 连接到 Raspberry

问题描述

希望你没事!真的希望你能帮我解决这个问题。
我有 2 个 ESP32 和 1 个覆盆子。每个 ESP32 都有一个按钮,当我按下任何一个按钮时,必须通过每个 ESP32 的蓝牙发送一条消息。

ESP32_1 消息:“1L 100 100 200 200”
ESP32_2 消息:“2R 100 100 200 200”

我可以在 2 个不同的终端中使用以下命令通过蓝牙成功连接 ESP32 和 raspBerry

sudo rfcomm 连接 1 XX:XX:XX:XX:XX (MAC1)
须藤 rfcomm 连接 2 XX:XX:XX:XX:XX (MAC2)

我需要的是,如果我按下 ESP32_1 的 button_1,消息 1 必须以树莓派接收。否则,如果我按下 ESP32_2 的 button_2,则必须收到消息 2 并在树莓派中打印。

问题是当我按下button_2时不发送任何内容,然后当我按下button_1时,正在发送button_2 + button_1的信息,似乎端口正在等待接收另一个中的信息。

这里是我的树莓派 Python 代码

#! /usr/bin/python
import serial
import time

Incoming_Data1 = ""
Incoming_Data2 = ""

bluetoothSerial1 = serial.Serial("/dev/rfcomm1",baudrate =115200) #Connecting to source 1
bluetoothSerial2 = serial.Serial("/dev/rfcomm2",baudrate =115200) #Connecting to source 1
print("Bluetooth Connected GBF")

def Flush_all():
  bluetoothSerial1.flush()
  bluetoothSerial2.flush()

while 1:

  try:
    Flush_all()
    Incoming_Data1 = bluetoothSerial1.readline()
    print(Incoming_Data1)
    Flush_all()
  except:
    Flush_all()

  try:
    Flush_all()
    Incoming_Data2 = bluetoothSerial2.readline()
    print(Incoming_Data2)
    Flush_all()
  except:
    Flush_all()

提前致谢!

解决方法

最好避免使用 rfcomm,因为它是 deprecated 早在 2017 年

http://blog.kevindoran.co/bluetooth-programming-with-python-3/中所述,串行端口配置文件 (SPP) 蓝牙客户端连接可以使用 Python3 标准套接字库完成(在 bluetoothctl 中进行配对后)。

Kevin 博客中的示例可以扩展为连接到两个设备。也许是这样的:

import socket

serverMACAddress1 = 'XX:XX:XX:XX:XX:XX'
serverMACAddress2 = 'XX:XX:XX:XX:XX:XX'

port = 1  # Needs to match value used on the device you are connecting to
SIZE = 1024
s1 = socket.socket(socket.AF_BLUETOOTH,socket.SOCK_STREAM,socket.BTPROTO_RFCOMM)
s2 = socket.socket(socket.AF_BLUETOOTH,socket.BTPROTO_RFCOMM)

s1.connect((serverMACAddress1,port))
s2.connect((serverMACAddress2,port))

while True:
    data = s1.recv(size) 
    if data: 
        print(data)
    data = s2.recv(size) 
    if data: 
        print(data)

s1.close()
s2.close()

还有一个 Bluedot 库可以帮助抽象出一些细节: https://www.stuffaboutcode.com/2017/07/python-bluetooth-rfcomm-client-server.html