Выполнять скрипты Python через веб-интерфейс

15

Я видел много проектов, которые утверждают, что управляют выводами GPIO, но я хочу, чтобы что-то немного отличалось, например, чтобы можно было мигать светодиодом.

Есть ли там система, где через веб-интерфейс я могу щелкнуть и выполнить скрипт Python, например, «blink.py» на моей малине.

J.Zil
источник

Ответы:

12

Вы можете сделать это любым способом, используя CGI или другой серверный скрипт. Одной из проблем будут права доступа к выводам GPIO. Кажется, не существует чистого решения . В настоящее время может быть проще всего прикрепить файлы gpio к пользователю, который запускает веб-сервер, вызвать программу (suid), которая может получить доступ к контактам, или иметь отдельный демон с доступом к контактам, на которые можно отправлять сообщения (сигнал, канал). / сокет, другой ipc ...).

Для «выполнений питона скрипта через веб - интерфейс», вы можете захотеть взглянуть на web.py . Это очень аккуратный маленький модуль, который позволяет вам написать отдельный файловый «веб-сервис», который может делать все что угодно. Очень удобно для такого рода вещей IME. Эффективно не требует настройки или специального программного обеспечения (кроме обычной установки Python и самого web.py). Просто напишите обработчики для URL в python, опционально с html-шаблонами и запустите. Направьте клиента (браузер, другой скрипт, wget ..) на правильный порт, и он просто работает. :)

Редактировать: Новый проект обнаружен, Serpint, кажется, позволяет шевелить gpio из сокета или, возможно, интерфейс поддельного устройства char.

XTL
источник
4
фляга похожа на web.py. Существует также Django, который, кажется, имеет больше возможностей - вероятно, излишним для этого проекта.
Фрепа
эм, для доступа к GPIO просто добавьте пользователя в группу gpio. Или запустите сервер от имени пользователя root, что большинство людей делают для порта 80 в любом случае. Примеры Flask могут вызывать сценарии или использовать время для добавления режима сна между переключателями. Главная особенность - это {{}} в шаблонах, которые, я подозреваю, не нужны для OP.
Маккензм
Спасибо за обновление. Для «ээээээ», однако, этот ответ с 2012 года, когда GPIO были общеизвестно только root. Я вижу, что сейчас есть группа gpio, которая является фантастическим прогрессом и более правильным способом доступа к оборудованию.
XTL
2

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

Вот Hello World с бутылкой:

from bottle import route, run, template

@route('/hello/:name')
def index(name='World'):
    return template('<b>Hello {{name}}</b>!', name=name)

run(host='localhost', port=8080)

Запустите это с:

python HelloBottle.py

И откройте в браузере: http://localhost:8080/hello/world


Для того, чтобы ваш сайт доступен с других компьютеров, установленных hostна 0.0.0.0в runметоде. Последняя строка приведенного выше Hello World должна выглядеть следующим образом:

run(host='0.0.0.0', port=8080)

Теперь вы сможете получить доступ к своему веб-сайту через IP-адрес Pi, например: http://192.168.0.123:8080/hello/world

Более подробную информацию смотрите в документации по размещению

Бенгт
источник
На моем Raspberry Pi, если я выполню, curl http://localhost:8080/hello/worldя получу ожидаемые результаты. Однако я хочу иметь доступ к этому на моем обычном компьютере через локальную сеть. После использования ifconfigна мой IP адрес, следующий URL на моем обычном компьютере не может установить соединение: http://192.168.1.102:8080/hello/matthew. Я могу получить доступ к другой веб-странице, которую я создал по адресу 192.168.1.102/home.php . Не могли бы вы представить, как я могу попасть на страницу с бутылкой?
Мэтью Мойзен
Ваш home.php неявно доступен через порт 80 (http), попробуйте запустить бутылку на этом порту и, если это удастся, убедитесь, что между вашим рабочим столом и портом блокировки 8080 нет межсетевых экранов.
Бенгт
Оказывается, мне нужно было сменить IP на localhost или 0.0.0.0
Мэтью Мойзен,
1

Установите iPython Notebook.

rpi#> sudo apt-get install ipython-notebook ipython3-notebook

Затем запустите это:

rpi#> ipython notebook

Примечание. Вы также можете получить к нему доступ с ПК:
rpi #> ipython notebook --ip = 10.0.0.7
# здесь 10.0.0.7 - это мой RPi IP.
# с другого компьютера в браузере я набираю:
http://10.0.0.7:8888

введите описание изображения здесь

Вы увидите это:

введите описание изображения здесь

Затем создайте новую записную книжку и запустите там свой код:

введите описание изображения здесь

Метод испытания:

введите описание изображения здесь

Список используемой литературы:

http://ipython.org/
http://jupyter.org/
https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/
http://maxembedded.com/2014/07/ используя-малина-пи-GPIO-помощь-Python /

Youtube: https://www.youtube.com/watch?v=cJuF4IDMuLY

Очень важный:

Музыка запускается на RPi в фоновом режиме в экранной программе linux через mps-youtube.

rpi#> sudo apt-get install python3-pip
rpi#> sudo pip3 install --upgrade mps-youtube  
rpi#> sudo pip3 install --upgrade https://github.com/mps-youtube/pafy/archive/develop.zip
rpi#> mpsyt # to start it
    # configure mpsyt to show video, player.
    mpsyt#> set show_video True
    mpsyt#> set player omxplayer
    mpsyt#> set search_music False
    mpsyt#> . lindsey stirling
    mpsyt#> 2 # to play song from a list.

Удачи!

Виталий Гельберт
источник
Ваш вопрос может быть улучшен ... Зачем устанавливать ноутбук Python? Что именно это делает? Следует обязательно прокомментировать потенциальные проблемы безопасности (например, оставить его открытым для Интернета).
Jacobm001
@ Jacobm001, не сегодня, не сейчас. При необходимости следуйте Библиографии внизу.
Виталий Гельберт
0

Вот учебник, как этого можно достичь: https://roderickvella.wordpress.com/2017/01/04/control-a-separate-running-script-from-a-web-server-python-rpi/

Джо
источник
1
Просьба кратко изложить учебник в своем ответе на случай, если ссылка когда-нибудь исчезнет или изменения будут изменены.
17
Мы пробуем новую политику в отношении ответов без информации только здесь. Если это сообщение не будет отредактировано и содержать информацию, которая может быть ответом, пусть и минимальным, через 48 часов, оно будет преобразовано в вики сообщества, чтобы упростить его исправление сообществом.
Стив Робиллард