Я создал тестовую программу, которая будет включена в мой основной проект, включающий многопроцессорность.Я использую многопроцессорный массив для хранения значения, отправленного по Bluetooth и передающего его другому процессу, но вместо этого отправленная переменная Bluetooth отправляет случайную строку символов, в то время как переменная с определенным значением передается правильно и печатает правильное значение.
import multiprocessing
import time
import os
import sys
#import bluetooth
from bluetooth import*
from ctypes import*
#Make device discoverable
#os.system("hciconfig hci0 piscan")
#Create a new server
server_socket = BluetoothSocket(RFCOMM)
#Bind to any port
server_socket.bind(("", PORT_ANY))
#Start listening
server_socket.listen(1)
#Get the port the service is listening
port = server_socket.getsockname()[1]
#The Service UUID to advertise
uuid = "00001101-0000-1000-8000-00805F9B34FB"
advertise_service(server_socket, "Camaro",
service_id=uuid,
service_classes=[uuid, SERIAL_PORT_CLASS],
profiles=[SERIAL_PORT_PROFILE])
#Items in queue
def bt(a,z):
while True:
print("Waitng for connection on rfcomm channel %d" %port)
try:
client_socket = None
client_socket, client_info = server_socket.accept()
print("Accepted connection from", client_info)
while client_socket != None:
data=client_socket.recv(1024)
a[1]=data
print(data)
a[0]=b'test'
z.set()
except IOError:
pass
def ret(b,y):
while(True):
if y.is_set():
print("Bluetooth sent: ",b[:])
y.clear()
d = multiprocessing.Event()
t = multiprocessing.Array(c_char_p,[b'',b''])
bluetooth_thread=multiprocessing.Process(target=bt, args=(t,d))
bt1=multiprocessing.Process(target=ret, args=(t,d))
bluetooth_thread.start()
bt1.start()
Это то, что я получаю при тестировании программы:
linaro@tinkerboard:~/Documents$ python3 Blue.py
Waitng for connection on rfcomm channel 1
Accepted connection from ('08:AE:D6:09:DC:D3', 1)
b'Hello'
Bluetooth sent: [b'test', b'9{b_\x8bT\x8eo\xa2Gw~+:\x9bN']