- Python和GPIO
- Python,FastCGI的和Web服務器
- HTML和Javascript
Python和GPIO
RPi.GPIO Python庫被捆綁了Linux的Raspbian,所以我們只使用現在讓事情變得簡單。以下Python代碼將配置的GPIO管腳7(GPIO4)輸出,然後打開它。這段代碼以root身份運行,所以你需要將它保存到一個文件,然後用運作它:
Python,FastCGI的和Web服務器
這我們需要把樹莓派變成一個Web服務器,然後在其上創建一個小網站
安裝Web服務器並開始運作它使用:
sudo apt-get install lighttpd sudo service lighttpd start
lighttpd用一個網站,在目錄/ var / WWW。我們可以建立我們自己的網站在那裡創建一個新的文件/var/www/index.html
<html> <head> <title>Hello from the Pi</title> </head> <body> <h1>Hello world from the Raspberry Pi</h1> </body> </html>
現在,當我們點一個網頁瀏覽器在樹莓派的IP地址,如http://192.168.1.104/(替換你自己的IP地址到該網址),你應該得到的Hello World消息出現
為了我們的Python掛接到網絡服務器,我們需要安裝一個庫,與FastCGI協議幫助
sudo apt-get install python-flup然後我們改變python腳本採從Flup而不是從它進行raw_input輸入()等,作為root用戶運行。將下面的腳本/var/www/doStuff.py,然後執行命令chmod 755這樣的網絡服務器可以執行它。 sudo chmod 755 doStuff.py
#!/usr/bin/pythonRoot
# bring in the libraries
import RPi.GPIO as G
from flup.server.fcgi import WSGIServer
import sys, urlparse
# set up our GPIO pins
G.setmode(G.BOARD)
G.setup(7, G.OUT)
# all of our code now lives within the app() function which is called for each http request we receive
def app(environ, start_response):
# start our http response
start_response("200 OK", [("Content-Type", "text/html")])
# look for inputs on the URL
i = urlparse.parse_qs(environ["QUERY_STRING"])
yield (' ') # flup expects a string to be returned from this function
# if there's a url variable named 'q'
if "q" in i:
if i["q"][0] == "w":
G.output(7, True) # Turn it on
elif i["q"][0] == "s":
G.output(7, False) # Turn it off
#by default, Flup works out how to bind to the web server for us, so just call it with our app() function and let it get on with it
WSGIServer(app).run()
在/ usr / bin中/ Python的可執行文件運行的調用它的用戶。這很可能是任一“pi”用戶,如果你以交互方式使用它,或在“WWW的數據”用戶,如果是由web服務器上運行。易於配置的違反此安全的方法是將用戶的Linux的setuid的功能。這是一個潛在的危險的技術,所以需要一點心思縝密的,但很容易建立。
我們找出哪個版本的Python,然後做出一個副本命名的/ usr / bin中/ pythonRoot並使其運行setuid root的:
pi@raspberrypi /var/www $ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 9 Jun 6 2012 /usr/bin/python -> python2.7
pi@raspberrypi /var/www $ sudo cp /usr/bin/python2.7 /usr/bin/pythonRoot
pi@raspberrypi /var/www $ sudo chmod u+s /usr/bin/pythonRoot
pi@raspberrypi /var/www $ ls -l /usr/bin/pythonRoot
-rwsr-xr-x 1 root root 2674528 Mar 17 18:16 /usr/bin/pythonRoot
最後一步是配置我們的Web服務器,它的FastCGI模塊,並告訴它在哪裡可以找到我們的Python腳本。編輯/etc/lighttpd/lighttpd.conf這樣做:添加一行到server.modules=()的列表頂部:
"mod_fastcgi"
將下列代碼添加到該文件底部:
fastcgi.server = ( ".py" => ( "python-fcgi" => ( "socket" => "/tmp/fastcgi.python.socket", "bin-path" => "/var/www/doStuff.py", "check-local" => "disable", "max-procs" => 1) ) )需重新啟動Web服務器
sudo service lighttpd restart 那麼你現在應該能夠把你的LED開啟和關閉通過調用像這樣的網址:http://192.168.1.104/doStuff.py?q=w和http://192.168.1.104/doStuff.py?q=s(記得替換成你的IP地址)
參考資料:
http://davstott.me.uk/index.php/2013/03/17/raspberry-pi-controlling-gpio-from-the-web/
No comments:
Post a Comment