Мне нужна помощь, чтобы найти лучший способ закодировать программу python для малины.
В этой программе мне нужно отслеживать несколько значений, поступающих от различных датчиков, подключенных к малине, и взаимодействовать с этими значениями из графического интерфейса pyqt. Графический интерфейс и драйверы датчиков должны быть полностью разделены.
Для этого я рассматривал возможность создания и использования объекта "Variable Manager" между графическим интерфейсом и датчиками, как "буфер" или что-то в этом роде. С использованием потоков и блокировок датчики непрерывно обновляли Variable Manager (с циклом while в соответствующих драйверах), тогда как GUI будет запрашивать значения certains всякий раз, когда мне нужно.
Было бы также неплохо иметь возможность отправлять некоторые команды датчикам из gui, но я не знаю, как это сделать в этой конфигурации.
Считаете ли вы, что это может работать правильно? Есть ли другой способ более эффективный/более адаптированный для этого?
Большое вам спасибо заранее!
Я бы сделал это так:
[Физические датчики] → [Монитор датчика Python] → [PubNub/аналогичный]
# Not tested, probably not good
from threading import Thread
from pubnub import PubNub
class SensorMonitor(threading.Thread):
def __init__(self):
self.pubnub = PubNub("demo", "demo")
self.switch = True
def _on_receive(self, sensor_data):
# can also do async() with a callback - https://www.pubnub.com/docs/python/data-streams-publish-and-subscribe
self.pubnub.publish().channel('raw_data').message(sensor_data).sync()
@staticmethod
def _poll_sensor(address):
data = get_sensor_data(address)
return data
def run(self):
while self.switch:
_data = poll_sensor('my_address')
self._on_receive(_data)
time.sleep(1)
def terminate(self):
self.switch = False
monitor = SensorMonitor()
monitor.start()
Тогда ваш графический интерфейс может использовать пользователя PubNub для получения данных по мере его потоковой передачи и проверки/выполнения данных. Здесь вы можете использовать JS или Python!
__init__
к вашему новому каналуsensor_config
и обратный вызов для того, что делать с сообщениями конфигурации.