Jalankan Skrip Python Melalui antarmuka Web

15

Saya telah melihat banyak proyek yang mengklaim untuk mengontrol pin GPIO, tetapi saya ingin sesuatu yang sedikit berbeda, misalnya, untuk dapat berkedip LED.

Apakah ada sistem di luar sana di mana, melalui antarmuka web, saya dapat mengklik dan menjalankan skrip python, misalnya "blink.py" pada raspberry saya.

J.Zil
sumber

Jawaban:

12

Anda bisa mewujudkannya dalam berbagai cara menggunakan CGI atau skrip sisi server lainnya. Satu masalah adalah izin untuk mengakses pin GPIO. Sepertinya tidak ada solusi bersih . Saat ini mungkin lebih mudah untuk mengaitkan file gpio ke pengguna yang menjalankan server web, memanggil program (suid) yang dapat mengakses pin atau memiliki daemon terpisah dengan akses ke pin yang dapat Anda kirimi pesan (sinyal, pipa / socket, ipc lainnya ...).

Untuk "mengeksekusi skrip python melalui antarmuka web", Anda mungkin ingin melihat web.py . Ini adalah modul kecil yang sangat rapi yang memungkinkan Anda menulis satu file mandiri "layanan web" yang dapat melakukan apa saja. Sangat berguna untuk IME hal semacam ini. Tidak memerlukan konfigurasi atau perangkat lunak khusus secara efektif (terlepas dari instal python umum dan web.py sendiri). Cukup tulis penangan untuk url dengan python, opsional dengan templat html dan jalankan. Arahkan klien (browser, skrip lain, wget ..) di port yang tepat dan berfungsi. :)

Sunting: Sebuah proyek baru terlihat, serpint tampaknya memungkinkan gpio goyang dari soket atau mungkin antarmuka perangkat char palsu.

XTL
sumber
4
labu tampaknya mirip dengan web.py. Ada juga Django yang tampaknya memiliki lebih banyak fitur - mungkin berlebihan untuk proyek ini.
Frepa
erm, untuk akses GPIO tambahkan saja pengguna ke grup gpio. Atau jalankan server sebagai root, yang kebanyakan orang lakukan untuk port 80. Contoh labu dapat memanggil skrip atau menggunakan waktu untuk menambahkan tidur di antara matikan. Fitur utamanya adalah {{}} di templat yang saya duga OP tidak perlu.
mckenzm
Terima kasih atas pembaruannya. Namun untuk "erm", jawaban ini dari 2012 ketika GPIO terkenal hanya root. Saya melihat ada grup gpio sekarang, yang merupakan kemajuan fantastis dan cara yang lebih benar untuk mengakses perangkat keras.
XTL
2

Jika Anda baru memulai dengan pengembangan web, lihat Bottle . Botol lebih sederhana daripada labu dalam arti bahwa itu adalah kerangka kerja web lengkap dalam satu file. Sebaliknya, Flask bertujuan untuk menggunakan kembali kode suara dari berbagai pustaka dan karenanya mungkin lebih solid, tetapi juga lebih kompleks.

Inilah 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)

Jalankan dengan:

python HelloBottle.py

Dan buka di browser: http://localhost:8080/hello/world


Untuk membuat situs web Anda tersedia dari komputer lain, atur hostke 0.0.0.0dalam runmetode ini. Baris terakhir Hello World di atas harus dibaca:

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

Anda sekarang harus dapat mengakses situs web Anda melalui alamat IP Pi, seperti ini: http://192.168.0.123:8080/hello/world

Lihat dokumentasi botol tentang penggunaan untuk perincian lebih lanjut.

Bengt
sumber
Pada Raspberry Pi saya, jika saya mengeksekusi curl http://localhost:8080/hello/worldsaya menerima hasil yang diharapkan. Namun saya ingin dapat mengakses ini di komputer biasa saya melalui LAN. Setelah menggunakan ifconfigalamat IP saya, berikut URL pada komputer biasa saya tidak dapat membuat sambungan: http://192.168.1.102:8080/hello/matthew. Saya dapat mengakses halaman web lain yang saya buat di ` 192.168.1.102/home.php '. Apakah Anda punya ide tentang bagaimana saya bisa ke halaman botol saya?
Matthew Moisen
Home.php Anda secara implisit diakses melalui port 80 (http) coba jalankan botol pada port itu dan jika berhasil, pastikan tidak ada Firewall di antara atau di desktop Anda dan port pi blocking 8080.
Bengt
Ternyata saya perlu mengubah IP saya menjadi localhost atau 0.0.0.0
Matthew Moisen
1

Instal iPython Notebook.

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

Kemudian jalankan:

rpi#> ipython notebook

Catatan: Anda dapat mengaksesnya juga dari PC:
rpi #> ipython notebook --ip = 10.0.0.7
# di sini 10.0.0.7 adalah RPi IP saya.
# dari komputer lain di browser saya ketikkan:
http://10.0.0.7:8888

masukkan deskripsi gambar di sini

Anda akan melihat ini:

masukkan deskripsi gambar di sini

Kemudian buat buku catatan baru dan jalankan kode Anda di sana:

masukkan deskripsi gambar di sini

Tes metode:

masukkan deskripsi gambar di sini

Bibliografi:

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

Sangat penting:

Musik berjalan pada RPi di latar belakang dalam program layar linux melalui 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.

Semoga berhasil!

Vitalie Ghelbert
sumber
Pertanyaan Anda dapat ditingkatkan ... Mengapa menginstal notebook Python? Apa fungsinya? Seharusnya komentar tentang masalah keamanan potensial (seperti biarkan terbuka untuk internet).
Jacobm001
@ Jacobm001, bukan hari ini, tidak sekarang. Jika perlu, ikuti Daftar Pustaka di bagian bawah.
Vitalie Ghelbert
0

Berikut adalah tutorial bagaimana hal ini dapat dicapai: https://roderickvella.wordpress.com/2017/01/04/control-a-separate-running-script-from-a-web-server-python-rpi/

joe
sumber
1
Silakan meringkas tutorial dalam jawaban Anda, kalau-kalau tautannya hilang suatu hari nanti atau perubahannya berubah.
tlhIngan
Kami sedang mencoba kebijakan baru sehubungan dengan jawaban tanpa tautan informasi saja di sini. Jika posting ini tidak diedit mengandung informasi yang dapat dijadikan jawaban, namun minimal, dalam 48 jam itu akan dikonversi ke Komunitas Wiki untuk menyederhanakan setelah diperbaiki oleh komunitas.
Steve Robillard