RaspberryPI телемеханика

Телемеханика на Flask + RaspberryPi. Часть 1

Итак, задача — научиться управлять удаленной нагрузкой через локальную сеть или еще лучше интернет. Например, я хочу включать и отключать что то в своем доме, который очень далеко(ну как пример, фонари или ворота). Начинаем изучать вопрос, есть свободный RaspberryPi самой первой модели, и вопросы отпадают сами собой! Будем управлять нагрузкой через Raspberry.

Собираем тестовый полигон: 2 светодиода + Raspberry + маршрутизатор + WiFi + домашний компьютер. Вот такая нехитрая цепочка получается. Само управление будет черех web интерфейс, для его создания буду использовать фреймворк Flask. Микрофреймворк как пишут, но недолго поизучав я понял, что его хватит на вполне годный сайт. У меня Raspberry подключен к маршрутизатору с DHCP, т.е. он получает адрес автоматически. Всю работу проводить буду через SSH в консоли. Конечно было бы удобнее прямо на Raspberry с монитором, но монитора нет. Имеем, что имеем.

Погнали!

  1. Подключаемся к Raspberry через ssh, командой

    pi — это имя пользователя по умолчанию, а далее IP адрес Raspberry.

    SSH RaspberryPi

    SSH RaspberryPi

 

SSH Raspberry

пароль по умолчанию raspberry.

Подключились, хорошо. Теперь устанавливаем Python свежей версии командой:

У меня уже установлена верси 3.7 была. Версии 2.х уже не рекомендуются. С питоном устанавливается и менеджер пакетов pip3. С его помощью мы установим Flask для нашего питона.

Если никаких ошибок вы не увидели, то считай дело в шляпе:)

Подготовка боевой среды завершена, начинаем собирать конструктор. Создаем где нибудь папку, у меня она называется telemeh. В этой папке заранее создайте еще одну, с именем templates. Имя должно быть именно таким. В ней будут храниться html шаблоны нашего проекта. Итоговый путь должен быть примерно таким: /home/user/telemeh/templates.

2. Давайте в папке «templates» создадим файл index.html, в этой части он будет один (это исключительно для простоты проекта). Я приведу полный код этого файла:

Тут все просто, стандартный html файл в котором есть 2 формы типа CheckBox, которые если они выбраны отправляют значение «1» на обработку дальше. И кнопка «Отправить». Ничего сложного.

А вот этот код:

— тут в двойных скобках указывается переменная, которая будет отправляться в этот html файл с помощью Flask. То есть, когда в этой переменной ничего нет, она не отобразиться просто. Если есть, то отобразить, то что в нее передали. В эти переменные мы будет отправлять состояние CheckBox’ов. Просто для себя, чтобы контролировать процесс.

3. Теперь бэк-энд. Управляющая программа, которая и будет этим всем рулить.

Декоратор @app.route(‘/’, methods=[‘GET’, ‘POST’]) просто будет вызывать метод index() при переходе по URL «/». У нас функция будет пока только одна (для простоты), она и будет все обрабатывать.Забыл from flask import Flask, render_template, request — тут render_template для отображения наших html страниц, а request для обработки запросов (get и post  в нашем случае).

Эта часть кода:

Тут мы выясняем, была ли нажата кнопка «отправить», у которой метод «POST» в свойствах, если была нажата, то мы считываем в переменные load1 и load2 значения из checkbox’ов и отображаем наш index.html, но при этом передаем в него эти две переменные. Если они будут пусты, то отобразться как None. Если кнопка не была нажата, т.е. мы просто зашли на страницу, то index.html тоже отобразится, но уже в переменных будет пусто.

Запускаем собственно обьект Flask при чем у меня в параметрах указан host=’0.0.0.0′, это значит, что встроенные сервер будет широковещательным и я даже через WiFi смогу к нему подключиться. Если работаете непосредственно на Raspberry то можете указать host=’localhost’ и уже ваше приложение не будет доступно из вне. debug=True очень полезная вещь, отображает в браузере ошибки, которые возникают на стадии разработки. После окончания ее можно отключить.

Файлы созданы, теперь из директории где файл .py запускаем проект:

Этим запускается встроенные сервер Flask и ваше приложение доступно из браузера по адресу «127.0.0.1:5000» или как у меня с удаленного компьютера «192.168.0.104:5000».

start Flask

Теперь можете попробовать как формы передают данные и данные принимаются этой же страницей и отображаются.

Flask RaspberryPi

Это были подготовительные работы, в следующей части подкрутим код, который будет включать- отключать светодиоды из нашего веб-интерфейса. 🙂 интерфейс конечно срамной получился, но это для простоты. Его мы кардинально поменяем, чтобы радовал глаз. И подумаем об обратной связи. Плюс нужно будет установить сервер NGINX, т.к. этот сервер только для отладки и использовать его надо только в процессе отладки. Итак, кому интересно — пишите и вторая чать выйдет быстрее!

 

 

Оставьте ответ

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.