#python #raspberry-pi
#python #raspberry-pi
Вопрос:
Я управляю выводами GPIO Raspberry Pi по сети Wi-Fi с устройства управления (в данном случае ноутбука Linux), на котором запущена программа Python, использующая функцию удаленного GPIO библиотеки gpiozero для управления выводами.
В случае, если соединение Wi-Fi между устройством управления и Raspberry Pi разорвано, я хочу иметь возможность обнаружить, что это произошло, чтобы я мог принять меры для обеспечения того, чтобы программа на устройстве управления не блокировалась.
Чтобы привести пример наиболее вероятного сценария, предположим, что робот Raspberry Pi установлен на дисках вне зоны действия Wi-Fi.
Функция, которую я использую для выхода из программы управления устройством, настроена на автоматическое указание роботу прекратить движение перед выходом из программы. Это делается путем установки значений на выводах GPIO, которые подключаются к драйверу двигателя.
Проблема в том, что когда я имитирую разрыв соединения, отключая Wi-Fi на Raspberry Pi, если я затем нажимаю кнопку выхода в программе устройства управления, выполнение кода, похоже, останавливается в тот момент, когда он пытается установить соответствующие контакты GPIO для остановки двигателей робота.
Я подозреваю, что программа управления устройством просто вечно ожидает ответа сокета, который никогда не придет.
Чтобы решить эту проблему, кто-нибудь может дать мне совет по выполнению любого из следующих действий:
- Обнаружение разрыва соединения между управляющим устройством и запуск функции в ответ.
- Установка времени ожидания для удаленного подключения GPIO, которое я затем могу перехватить с помощью инструкции try.
- Любое другое исправление, которое, по вашему мнению, может сработать (пожалуйста, сообщите подробности).
Спасибо.
Комментарии:
1. почему бы вам просто не выполнить пинг вашего raspberry?
2. @Sadap (пустое выражение лица), потому что я не знаю, как это сделать. Можно ли это сделать из программы Python?
3. google «python ping». Я уверен, что вы что-нибудь найдете
4. С помощью селекторов вы можете легко определить, когда выполняется подключение к сокетам. Возможно, эта ссылка могла бы вам помочь.