Originally published at
Data Digging. You can comment here or
there.
... озадачился давеча организацией интерфейса управления роботом.
Поскольку, если у человека в руках молоток, то все вокруг ему напоминает гвоздь, решил остановиться на реализации оного интерфейса посредством flask. Поднимаем на Raspberry flask-server, получаем от процесса управления роботом данные, посылаем из фласка роботу команды. Все просто. Казалось бы.
Однако ж, оказалось не все.
Первоначально хотел запускать flask и основной скрипт в одном скрипте в разных потоках и обмениваться данными через глобальные переменные. Понятно, что глобальные переменные - не очень хорошая практика, но почему бы и нет? После некоторого количества экспериментов выяснил, что фласк отказывается подниматься, будучи запущенным не в основном потоке. Наверняка есть способы обойти это, но тыкаться вслепую не хотелось, поэтому сразу перешел к следующему очевидному решению: обмен данными через сокеты.
Состряпал в основном скрипте сервер, а во фласке - клиент и давай проверять. Засада оказалась, опять же, во фласке - он категорически отказывался удерживать соединение. И снова - наверняка решение можно было найти, но тратить на это свободное от работы время не хотелось, поэтому сразу перешел к третьему очевидному варианту: обмен данными через БД.
Сказано сделано: на многострадальной малине был поднят MySql сервер, а в ем - две таблицы: первая status, а вторая - order. Теперь основной скрипт пишет в status json с текущими состояниями и проверяет, не ли новых повелений, а фласк, со своей стороны, при запросе страницы лезет в БД, что бы получить последние новости о датчиках и пишет в нее повеления создателя.
Все работает, все довольны. Все, кроме SD-карты Малины, которая наверняка в скором времени выскажет свое недовольство постоянной писаниной строк в БД и сдохнет в самый неподходящий момент.
З.Ы. С непрограммными делами на ниве роботостроения пока затык, так как ожидаю поставку комплектующих.