Thực thi tập lệnh Python qua giao diện Web


15

Tôi đã thấy rất nhiều dự án tuyên bố điều khiển các chân GPIO, nhưng tôi muốn một cái gì đó hơi khác một chút, ví dụ, để có thể nháy đèn LED.

Có một hệ thống nào ở đó không, thông qua giao diện web, tôi có thể nhấp và thực thi một tập lệnh python, ví dụ như "blink.py" trên quả mâm xôi của tôi.

Câu trả lời:


12

Bạn có thể thực hiện điều này theo bất kỳ cách nào bằng cách sử dụng CGI hoặc tập lệnh phía máy chủ khác. Một vấn đề sẽ là quyền truy cập vào chân GPIO. Dường như không có một giải pháp sạch . Hiện tại, có thể dễ dàng nhất để tạo các tệp gpio cho người dùng chạy máy chủ web, gọi chương trình (suid) có thể truy cập vào các chân hoặc có một daemon riêng có quyền truy cập vào các chân mà bạn có thể gửi tin nhắn đến (tín hiệu, đường ống / ổ cắm, ipc khác ...).

Đối với "thực hiện một kịch bản python thông qua một giao diện web", bạn có thể muốn xem xét web.py . Đây là một mô-đun nhỏ rất gọn gàng cho phép bạn viết một "dịch vụ web" độc lập có thể làm bất cứ điều gì. Rất tiện dụng cho loại điều này IME. Yêu cầu hiệu quả không có cấu hình hoặc phần mềm đặc biệt (ngoài cài đặt python thông thường và chính web.py). Chỉ cần viết trình xử lý cho các url trong python, tùy chọn với các mẫu html và chạy. Trỏ một máy khách (trình duyệt, tập lệnh khác, wget ..) vào đúng cổng và nó chỉ hoạt động. :)

Chỉnh sửa: Một dự án mới được phát hiện, serpint dường như cho phép gpio ngọ nguậy từ một ổ cắm hoặc có thể là giao diện thiết bị char giả.


4
bình có vẻ tương tự như web.py. Ngoài ra còn có Django dường như có nhiều tính năng hơn - có thể là quá mức cần thiết cho dự án này.
Frepa

erm, để truy cập GPIO, chỉ cần thêm người dùng vào nhóm gpio. Hoặc khởi động máy chủ với quyền root, điều mà hầu hết mọi người đều làm cho cổng 80. Các ví dụ Flask có thể gọi các tập lệnh hoặc sử dụng thời gian để thêm giấc ngủ giữa các toggles. Tính năng chính là {{}} trong các mẫu mà tôi nghi ngờ OP không cần.
mckenzm

Cảm ơn các cập nhật. Tuy nhiên, đối với "erm", câu trả lời này là từ năm 2012 khi GPIO chỉ nổi tiếng là root. Tôi thấy bây giờ có một nhóm gpio, đó là một tiến bộ tuyệt vời và cách truy cập phần cứng chính xác hơn.
XtL

2

Nếu bạn chỉ mới bắt đầu với phát triển web, hãy xem Chai . Chai đơn giản hơn bình theo nghĩa là nó là một khung web hoàn chỉnh trong một tệp duy nhất. Ngược lại, Flask nhằm mục đích sử dụng lại mã âm thanh từ các thư viện khác nhau và do đó có thể vững chắc hơn, nhưng cũng phức tạp hơn.

Đây là thế giới Hello với chai:

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)

Chạy nó với:

python HelloBottle.py

Và mở trong trình duyệt: http://localhost:8080/hello/world


Để làm cho trang web của bạn có sẵn từ các máy tính khác, thiết lập hostđể 0.0.0.0trong runphương pháp. Dòng cuối cùng của Hello World ở trên nên đọc:

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

Bây giờ bạn có thể truy cập trang web của mình thông qua địa chỉ IP của Pi, như thế này: http://192.168.0.123:8080/hello/world

Xem tài liệu về việc triển khai chai để biết thêm chi tiết.


Trên Raspberry Pi của tôi, nếu tôi thực thi curl http://localhost:8080/hello/worldtôi sẽ nhận được kết quả mong đợi. Tuy nhiên tôi muốn có thể truy cập cái này trên máy tính thông thường của mình qua lan. Sau khi sử dụng ifconfigcho địa chỉ IP của tôi, URL sau trên máy tính thông thường của tôi không thể thiết lập kết nối : http://192.168.1.102:8080/hello/matthew. Tôi có thể truy cập một trang web khác mà tôi đã tạo tại ` 192.168.1.102/home.php '. Bạn có biết làm thế nào tôi có thể vào trang chai của tôi không?
Matthew Moisen

Home.php của bạn được truy cập ngầm qua cổng 80 (http) hãy thử chạy chai trên cổng đó và nếu nó bị khóa, hãy đảm bảo không có Tường lửa giữa hoặc trên máy tính để bàn của bạn và cổng chặn pi 8080.
Bengt

Hóa ra tôi cần thay đổi IP của mình thành localhost hoặc 0.0.0.0
Matthew Moisen


1

Cài đặt iPython Notebook.

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

Sau đó chạy nó:

rpi#> ipython notebook

Lưu ý: Bạn cũng có thể truy cập nó từ PC:
rpi #> ipython notebook --ip = 10.0.0.7
# ở đây 10.0.0.7 là IP RPi của tôi.
# từ một máy tính khác trong trình duyệt Tôi đang gõ:
http://10.0.0.7:8888

nhập mô tả hình ảnh ở đây

Bạn sẽ thấy điều này:

nhập mô tả hình ảnh ở đây

Sau đó tạo một sổ ghi chép mới và chạy mã của bạn ở đó:

nhập mô tả hình ảnh ở đây

Phương pháp kiểm tra:

nhập mô tả hình ảnh ở đây

Thư mục:

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

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

Rất quan trọng:

Âm nhạc đang chạy trên RPi trong nền trong chương trình màn hình linux qua 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.

Chúc may mắn!


Câu hỏi của bạn có thể được cải thiện ... Tại sao phải cài đặt sổ ghi chép Python? Chính xác thì nó làm gì? Nó chắc chắn nên bình luận về các mối quan tâm bảo mật tiềm năng (chẳng hạn như để nó mở cho internet).
Jacobm001

@ Jacobm001, không phải hôm nay, không phải bây giờ. Nếu cần, hãy làm theo Tài liệu tham khảo ở phía dưới.
Vitalie Ghelbert

0

1
Vui lòng tóm tắt hướng dẫn trong câu trả lời của bạn, trong trường hợp liên kết biến mất một ngày nào đó hoặc thay đổi tương phản.
tlhIngan

Chúng tôi đang thử một chính sách mới liên quan đến các câu trả lời chỉ liên kết không có thông tin ở đây. Tuy nhiên, nếu bài đăng này không được chỉnh sửa để chứa thông tin có thể là câu trả lời, tuy nhiên tối thiểu, trong 48 giờ, nó sẽ được chuyển đổi thành Community Wiki để đơn giản hóa việc cộng đồng đã sửa nó.
Steve Robillard
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.