Мониторинг датчиков с помощью Python на Rapsberry

1

Мне нужна помощь, чтобы найти лучший способ закодировать программу python для малины.

В этой программе мне нужно отслеживать несколько значений, поступающих от различных датчиков, подключенных к малине, и взаимодействовать с этими значениями из графического интерфейса pyqt. Графический интерфейс и драйверы датчиков должны быть полностью разделены.

Для этого я рассматривал возможность создания и использования объекта "Variable Manager" между графическим интерфейсом и датчиками, как "буфер" или что-то в этом роде. С использованием потоков и блокировок датчики непрерывно обновляли Variable Manager (с циклом while в соответствующих драйверах), тогда как GUI будет запрашивать значения certains всякий раз, когда мне нужно.

Было бы также неплохо иметь возможность отправлять некоторые команды датчикам из gui, но я не знаю, как это сделать в этой конфигурации.

Считаете ли вы, что это может работать правильно? Есть ли другой способ более эффективный/более адаптированный для этого?

Большое вам спасибо заранее!

Теги:
multithreading
iot
raspberry-pi
pyqt

1 ответ

1

Я бы сделал это так:

[Физические датчики] → [Монитор датчика 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!

  • 0
    Что касается команд для датчика - вы можете отправить ТЕ непосредственно в систему PubNub из графического интерфейса, и Python может читать их и выполнять в режиме реального времени. Вы добавили бы подписку в блоке __init__ к вашему новому каналу sensor_config и обратный вызов для того, что делать с сообщениями конфигурации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню