我想通过蓝牙从手机接收到覆盆子的消息
我写了下面的代码,
import bluetooth
hostMACAddress = '18:9E:FC:A1:81:93' # The MAC address of my iphone
port = 3
backlog = 1
size = 1024
s = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
s.bind((hostMACAddress, port))
s.listen(backlog)
try:
client, clientInfo = s.accept()
while 1:
data = client.recv(size)
if data:
print(data)
client.send(data) # Echo back to client
except:
print("Closing socket")
client.close()
s.close()
当我运行此代码时,如何接收到发送给Raspberry的消息,我看不到任何消息,我的Raspberry检测到了我的iPhone的MAC地址,但是我想发送一些消息,看看Raspberry的蓝牙是否可以接收它
请让我知道我必须在此代码中进行哪些修改才能实现蓝牙连接
最佳答案
我尚未使用Flutter完成构建应用程序,但已使用python准备好服务器/客户端代码。
Server.py
import socket
import os
import multiprocessing
from multiprocessing import pool
os.system('sudo python3 relay.py C') #runs relay program and setups up GPIO pins
hostMACAddress = 'B8:27:EB:A3:B6:EB' # The MAC address of a Bluetooth adapter on the server.
backlog = 4
port=3
size = 1024
s = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
s.bind((hostMACAddress,port))
s.listen(backlog)
def new_client(client):
while 1:
data = client.recv(size)
if data:
n=data.decode("utf-8")
if n == 'ON':
os.system('sudo python3 relay.py ON')
if n == 'OFF':
os.system('sudo python3 relay.py OFF')
if n == 'CLOSE':
break
client.send(data)
if __name__ == '__main__':
client, address = s.accept()
pool = multiprocessing.Pool(4)
pool.map(new_client, (client, ))
pool.close()
pool.join
print("Closing socket")
client.close()
s.close()
这是我在树莓派上运行的服务器程序。由于蓝牙与Web套接字编程有点不同,因此我实现了多线程以始终允许4个 Activity 连接(套接字),因此我必须要有创造力才能在任何客户端关闭连接后保持应用程序的运行。
基本上,如果我得到消息ON / OFF,它依次运行另一个python程序来打开或关闭继电器,如果我得到CLOSE消息,则终止线程。
Client.py
import bluetooth
bd_addr = 'B8:27:EB:A3:B6:EB'
port = 3
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((bd_addr,port))
print("Connected")
while True:
try:
data = input()
sock.send(data.encode())
if data == 'CLOSE':
break
except KeyboardInterrupt:
sock.close()
这是我的计算机上运行的客户端程序。请注意,两个代码的地址相同(我的raspberry pi的MAC地址),因为raspberry pi需要使用蓝牙适配器的地址(如果某些机器具有多个接口),并且客户端需要顺序使用服务器蓝牙MAC地址启动套接字连接。您还需要在raspbery pi中配置的端口以在我的情况3中接收连接。
让我知道您是否需要任何其他信息。
制作实现套接字编程的应用程序会很有趣!