如何解决通过蓝牙串口将 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。