เรียกใช้งาน Python Script ผ่านเว็บอินเตอร์เฟส


15

ฉันเห็นโครงการจำนวนมากที่อ้างว่าควบคุมพินของ GPIO แต่ฉันต้องการบางสิ่งที่แตกต่างออกไปเล็กน้อยเพื่อให้สามารถกะพริบไฟ LED

มีระบบออกจากที่นั่นผ่านเว็บอินเตอร์เฟสฉันสามารถคลิกและรันสคริปต์ python เช่น "blink.py" บนราสเบอร์รี่ของฉัน

คำตอบ:


12

คุณสามารถทำให้สิ่งนี้เกิดขึ้นได้หลายวิธีโดยใช้ CGI หรือสคริปต์ฝั่งเซิร์ฟเวอร์อื่น ๆ ปัญหาหนึ่งคือการอนุญาตให้เข้าถึงหมุด GPIO มีไม่ดูเหมือนจะเป็นทางออกที่สะอาด ในปัจจุบันอาจเป็นการง่ายที่สุดในการchown ไฟล์ gpioไปยังผู้ใช้ที่เรียกใช้เว็บเซิร์ฟเวอร์เรียกโปรแกรม (suid) ที่สามารถเข้าถึงหมุดหรือมี daemon แยกต่างหากพร้อมการเข้าถึงพินที่คุณสามารถส่งข้อความไปยัง (สัญญาณไปป์ / socket, ipc อื่น ๆ ... )

สำหรับ "สคริปต์หลามผ่านเว็บอินเตอร์เฟส" คุณอาจต้องการที่จะดูที่web.py มันเป็นโมดูลเล็ก ๆ ที่เรียบร้อยมากที่ให้คุณเขียน "บริการเว็บ" แบบสแตนด์อโลนไฟล์เดียวที่สามารถทำอะไรได้ มีประโยชน์มากสำหรับ IME ประเภทนี้ ต้องไม่มีการกำหนดค่าอย่างมีประสิทธิภาพหรือซอฟต์แวร์พิเศษ (นอกเหนือจากการติดตั้งหลามทั่วไปและ web.py ตัวเอง) เพียงแค่เขียนตัวจัดการสำหรับ url ใน python หรืออาจเลือกด้วยเทมเพลต html และเรียกใช้ ชี้ไคลเอ็นต์ (เบราว์เซอร์สคริปต์อื่น ๆ wget .. ) ที่พอร์ตที่ถูกต้องและใช้งานได้ :)

แก้ไข: โครงการใหม่พบserpintดูเหมือนว่าจะอนุญาตให้ gpio wiggling จากซ็อกเก็ตหรืออุปกรณ์อินเตอร์เฟซที่เป็นไปได้ปลอม


4
ขวดดูเหมือนกับ web.py นอกจากนี้ยังมีDjangoซึ่งดูเหมือนว่าจะมีคุณสมบัติเพิ่มเติม - น่าจะเกินราคาสำหรับโครงการนี้
Frepa

เดิมสำหรับการเข้าถึง GPIO เพียงเพิ่มผู้ใช้ในกลุ่ม gpio หรือเริ่มเซิร์ฟเวอร์ในฐานะรูทซึ่งคนส่วนใหญ่ทำเพื่อพอร์ต 80 อยู่ดี ตัวอย่างขวดสามารถเรียกใช้สคริปต์หรือใช้เวลาเพื่อเพิ่มสลีประหว่างสลับ คุณลักษณะหลักคือ {{}} ในเทมเพลตที่ฉันสงสัยว่า OP ไม่จำเป็นต้องใช้
mckenzm

ขอบคุณสำหรับการอัพเดท. สำหรับคำว่า "erm" คำตอบนี้มาจากปี 2012 เมื่อ GPIOs มีชื่อเสียงในระดับรากเท่านั้น ฉันเห็นว่าตอนนี้มีกลุ่ม gpio ซึ่งเป็นความก้าวหน้าที่น่าอัศจรรย์และวิธีการเข้าถึงฮาร์ดแวร์ที่ถูกต้องมากขึ้น
XTL

2

หากคุณเป็นเพียงการเริ่มต้นด้วย webdevelopment, มีลักษณะที่ขวด ขวดง่ายกว่าขวดในแง่ที่ว่ามันเป็นเว็บเฟรมเวิร์กที่สมบูรณ์ภายในไฟล์เดียว ในทางตรงกันข้าม 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ฉันจะได้รับผลลัพธ์ที่คาดหวัง อย่างไรก็ตามฉันต้องการที่จะสามารถเข้าถึงสิ่งนี้บนคอมพิวเตอร์ปกติของฉันผ่านทาง LAN หลังจากที่ใช้ifconfigสำหรับที่อยู่ IP ของฉัน URL http://192.168.1.102:8080/hello/matthewต่อไปนี้ในคอมพิวเตอร์ปกติของฉันไม่สามารถที่จะสร้างการเชื่อมต่อ: ฉันสามารถเข้าถึงหน้าเว็บอื่นที่ฉันทำที่ ` 192.168.1.102/home.php ' คุณมีความคิดเกี่ยวกับวิธีที่ฉันสามารถไปที่หน้าขวดของฉันได้อย่างไร
Matthew Moisen

home.php ของคุณเข้าถึงได้โดยทางพอร์ต 80 (http) ลองเรียกใช้ขวดบนพอร์ตนั้นและถ้าสำเร็จให้ตรวจสอบให้แน่ใจว่าไม่มีไฟร์วอลล์ระหว่างหรือบนเดสก์ท็อปของคุณและพอร์ตปิดกั้น pi 8080
Bengt

ปรากฎว่าฉันต้องเปลี่ยน IP ของฉันเป็น localhost หรือ 0.0.0.0
Matthew Moisen


1

ติดตั้ง iPython Notebook

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

จากนั้นเรียกใช้:

rpi#> ipython notebook

หมายเหตุ: คุณสามารถเข้าถึงได้จากพีซี:
rpi #> โน้ตบุ๊ก ipython --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/ โดยใช้ราสเบอร์รี่-Pi-GPIO โดยใช้หลาม /

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 ไม่ใช่วันนี้ไม่ใช่ตอนนี้ หากจำเป็นให้ทำตามบรรณานุกรมที่ด้านล่าง
Vitalie Ghelbert

0

1
กรุณาสรุปบทช่วยสอนในคำตอบของคุณในกรณีที่ลิงก์หายไปสักวันหนึ่งหรือการเปลี่ยนแปลง contrent
tlhIngan

เรากำลังลองใช้นโยบายใหม่เกี่ยวกับคำตอบสำหรับลิงก์ที่ไม่มีข้อมูลเท่านั้นที่นี่ หากโพสต์นี้ไม่ได้ถูกแก้ไขเพื่อให้มีข้อมูลที่สามารถเป็นคำตอบได้ แต่น้อยที่สุดใน 48 ชั่วโมงโพสต์นี้จะถูกแปลงเป็น Community Wiki เพื่อให้ง่ายต่อการแก้ไขโดยชุมชน
Steve Robillard
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.