Wykonywanie skryptów Python za pośrednictwem interfejsu internetowego

15

Widziałem wiele projektów, które twierdzą, że kontrolują piny GPIO, ale chcę coś nieco innego, na przykład, aby móc mrugać diodą LED.

Czy istnieje system, w którym poprzez interfejs internetowy mogę kliknąć i uruchomić skrypt Pythona, na przykład „blink.py” na mojej malinie.

J.Zil
źródło

Odpowiedzi:

12

Możesz to zrobić na wiele sposobów, używając CGI lub innego skryptu po stronie serwera. Jednym z problemów będą uprawnienia do dostępu do pinów GPIO. Wydaje się, że nie ma czystego rozwiązania . Obecnie najłatwiej jest udostępnić pliki GPIO użytkownikowi, który uruchamia serwer WWW, wywołać program (suid), który może uzyskać dostęp do pinów lub mieć osobnego demona z dostępem do pinów, do których można wysyłać wiadomości (sygnał, potok / socket, other ipc ...).

Do „wykonywania skryptu Pythona poprzez interfejs WWW”, warto spojrzeć na web.py . Jest to bardzo schludny mały moduł, który pozwala napisać pojedynczy plik „usługa sieciowa”, który może zrobić wszystko. Bardzo przydatny do tego typu edytorów IME. Nie wymaga efektywnej konfiguracji ani specjalnego oprogramowania (oprócz wspólnej instalacji Pythona i samego pliku web.py). Wystarczy napisać moduły obsługi adresów URL w pythonie, opcjonalnie z szablonami HTML i uruchomić. Skieruj klienta (przeglądarkę, inny skrypt, wget ...) na właściwy port i to po prostu działa. :)

Edycja: Wykryto nowy projekt, serpint wydaje się pozwalać na poruszanie gpio z gniazda lub ewentualnie fałszywego interfejsu urządzenia char.

XTL
źródło
4
kolba wydaje się podobna do web.py. Istnieje również Django, które wydaje się mieć więcej funkcji - prawdopodobnie przesada w tym projekcie.
Frepa,
erm, aby uzyskać dostęp do GPIO, po prostu dodaj użytkownika do grupy gpio. Lub uruchom serwer jako root, co zresztą większość ludzi robi dla portu 80. Przykłady kolby mogą wywoływać skrypty lub wykorzystywać czas do dodania snu między przełączeniami. Główną cechą jest {{}} w szablonach, które, jak podejrzewam, nie były potrzebne.
mckenzm
Dziękuję za aktualizację. W przypadku „erm” odpowiedź ta pochodzi z 2012 r., Kiedy GPIO były notowane tylko jako root. Widzę, że jest teraz grupa gpio, która jest fantastycznym postępem i bardziej poprawnym sposobem dostępu do sprzętu.
XTL
2

Jeśli dopiero zaczynasz od tworzenia stron internetowych, spójrz na Bottle . Butelka jest prostsza niż flask w tym sensie, że jest kompletną strukturą internetową w jednym pliku. W przeciwieństwie do tego, Flask chce ponownie wykorzystać kod dźwiękowy z różnych bibliotek i dlatego może być bardziej solidny, ale także bardziej złożony.

Oto Hello World with Bottle:

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)

Uruchom z:

python HelloBottle.py

I otwórz w przeglądarce: http://localhost:8080/hello/world


Aby twoja strona dostępna z innych komputerów, zestaw hostdo 0.0.0.0w runmetodzie. Ostatni wiersz powyższego Hello World powinien brzmieć:

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

Powinieneś być teraz w stanie uzyskać dostęp do swojej witryny za pośrednictwem adresu IP Pi, w następujący sposób: http://192.168.0.123:8080/hello/world

Więcej informacji znajduje się w dokumentacji butelki dotyczącej wdrożenia .

Bengt
źródło
Na moim Raspberry Pi, jeśli wykonam curl http://localhost:8080/hello/world, otrzymuję oczekiwane wyniki. Jednak chcę mieć dostęp do tego na moim zwykłym komputerze przez sieć LAN. Po użyciu ifconfigna mój adres IP, następujący URL na mój zwykły komputer nie jest w stanie nawiązać połączenia: http://192.168.1.102:8080/hello/matthew. Mam dostęp do innej strony, którą utworzyłem pod adresem ` 192.168.1.102/home.php '. Czy masz jakiś pomysł, jak mogę przejść do mojej strony z butelkami?
Matthew Moisen
Twój home.php jest domyślnie dostępny przez port 80 (http), spróbuj uruchomić butelkę na tym porcie, a jeśli się powiedzie, upewnij się, że nie ma żadnych zapór ogniowych między lub na pulpicie a portem blokującym pi 8080.
Bengt
Okazuje się, że musiałem zmienić adres IP na localhost lub 0.0.0.0
Matthew Moisen
1

Zainstaluj iPython Notebook.

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

Następnie uruchom:

rpi#> ipython notebook

Uwaga: Możesz uzyskać do niego dostęp również z komputera:
rpi #> ipython notebook --ip = 10.0.0.7
# tutaj 10.0.0.7 to mój adres IP RPi.
# z innego komputera w przeglądarce piszę:
http://10.0.0.7:8888

wprowadź opis zdjęcia tutaj

Zobaczysz to:

wprowadź opis zdjęcia tutaj

Następnie utwórz nowy notatnik i uruchom tam swój kod:

wprowadź opis zdjęcia tutaj

Test metody:

wprowadź opis zdjęcia tutaj

Bibliografia:

http://ipython.org/
http://jupyter.org/
https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/
http://maxembedded.com/2014/07/ using-raspberry-pi-gpio-using-python /

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

Bardzo ważne:

Muzyka działa na RPi w tle w programie linux screen na 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.

Powodzenia!

Vitalie Ghelbert
źródło
Twoje pytanie można poprawić ... Po co instalować notatnik Python? Co to dokładnie robi? Z pewnością powinien komentować potencjalne problemy związane z bezpieczeństwem (takie jak pozostawienie go otwartego dla Internetu).
Jacobm001
@ Jacobm001, nie dzisiaj, nie teraz. W razie potrzeby postępuj zgodnie z bibliografią na dole.
Vitalie Ghelbert,
0

Oto samouczek, w jaki sposób można to osiągnąć: https://roderickvella.wordpress.com/2017/01/04/control-a-separate-running-script-from-a-web-server-python-rpi/

Joe
źródło
1
Uprzejmie streść samouczek w swojej odpowiedzi, na wypadek, gdyby link kiedyś zniknął lub nastąpiły zmiany treści.
tlhIngan
W tym miejscu wypróbowujemy nowe zasady dotyczące pozbawionych informacji odpowiedzi zawierających tylko linki. Jeśli ten post nie będzie edytowany, aby zawierał informacje, które mogą stanowić odpowiedź, choć minimalną, w ciągu 48 godzin zostanie przekonwertowany na Community Wiki, aby uprościć wprowadzanie poprawek przez społeczność.
Steve Robillard