В свободное от работы время…

... озадачился давеча организацией интерфейса управления роботом.

Поскольку, если у человека в руках молоток, то все вокруг ему напоминает гвоздь, решил остановиться на реализации оного интерфейса посредством flask. Поднимаем на Raspberry flask-server, получаем от процесса управления роботом данные, посылаем из фласка роботу команды. Все просто. Казалось бы.

Однако ж, оказалось не все.

Первоначально  хотел запускать  flask и основной скрипт  в одном скрипте в разных потоках и обмениваться данными  через глобальные переменные. Понятно, что глобальные переменные - не очень хорошая практика, но почему бы и нет? После некоторого количества экспериментов выяснил, что  фласк отказывается подниматься, будучи запущенным не в основном потоке.  Наверняка есть способы  обойти это, но тыкаться вслепую не хотелось, поэтому сразу перешел к следующему очевидному решению: обмен данными через сокеты.

Состряпал в основном скрипте сервер, а во фласке – клиент и давай проверять. Засада  оказалась, опять же,  во фласке – он категорически отказывался удерживать соединение. И снова – наверняка решение можно было найти, но тратить на это свободное от работы время не хотелось, поэтому сразу перешел к третьему очевидному  варианту:  обмен данными через БД.

Сказано сделано: на многострадальной малине был поднят MySql сервер, а в ем – две таблицы: первая status, а вторая  - order. Теперь  основной скрипт  пишет в status  json с текущими состояниями и проверяет, не ли новых повелений, а фласк, со своей стороны, при запросе страницы лезет в БД, что бы  получить последние новости о датчиках и пишет в нее  повеления  создателя.

Все работает, все довольны. Все, кроме SD-карты Малины,  которая наверняка в скором времени  выскажет свое недовольство  постоянной писаниной строк в БД и сдохнет в самый неподходящий момент.

З.Ы. С непрограммными делами на ниве роботостроения пока затык, так как ожидаю поставку комплектующих.