20-2ラズベリーパイビルドサーバートルネードWebサーバー

Drive.google.com/drive/folders/1ahbeoEHkjxoo4NV1wReOmpoRWbl448z-

 

1.Tornadoプロフィール

トルネードは、非ブロッキングのサーバーだけでなく、非常に高速であり、比較的単純なノン・ブロッキングのWebサーバーを使用して、Pythonで書かれました。その非ブロックモードとのepollの使用の濃縮、トルネードは、毎秒数千の接続を処理することができますので、トルネードは、リアルタイムWebサービスのための理想的なフレームワークです。

公式サイト:のhttp://www.tornadoweb.cn

公式書類ます。http://www.tornadoweb.cn/documentation

Webページ上の文書全体、一般的に使用される機能は再びそれについてあるhttpサーバは、基礎をプログラムした場合、あなたはすぐに使い始めることができるはずです。

2.Tornadoインストール

モード1:インストールPIP:
sudoのPIPトルネードをインストール


実施例2:ソース・インストール:
https://pypi.python.org/packages/source/t/tornado/tornado-4.3.tar.gz wgetの
トルネードxvzfタール-4.3.tar.gzを
CD-トルネード4.3
Pythonのsetup.pyビルドの
sudoのPythonはsetup.py installを

 

第二に、基本的な原理

 

竜巻の公式は、Hello Worldの例を借ります:

輸入tornado.ioloop 
輸入tornado.webの
 
クラスMainHandler(tornado.web.RequestHandler):
    デフを取得(自己):
        self.write( "こんにちは、世界")
 
アプリケーション= tornado.web.Application([ 
    (R "/"、MainHandler )、
])
 
であれば__name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance())(開始。

  

一般的な考え方は次のとおりです。httpトルネードによってポートオープンリスニング、要求はルーティングルールを満たしたとき、プリセットルーティングルールです、ほとんどのWebサーバアプローチで処理するために対応するハンドラを呼び出します。取得し、ポストの要求をサポートしています。

 

それを拡張し、トルネードはhttpサーバをセットアップし使用し、Webページの一番上に置く、Webクライアントの着信GPIOピンの数や状態を制御する必要がある、サーバーが着信パラメータを受け取り、適切な治療を行い、制御GPIOピンのレベルを達成することができます出力。



第三に、実装手順

1.フロントエンドhtmlページ

<!DOCTYPE HTML> 
<HTML LANG = "ZH-CN"> 
<HEAD> 
    <メタのcharset = "UTF-8"> 
    <META HTTP-当量= "X-UA-互換性のある"コンテンツ= "IE =エッジ"> 
    <メタ名= "ビューポート"コンテンツ= "幅=装置幅、初期の規模= 1"> 
    <タイトル>树莓派のWeb控制中心</ TITLE> 
    <スクリプトSRC = "静的/ JS / jqueryの-3.2.1。 min.js "タイプ= "テキスト/ javascriptの"> </ SCRIPT> 
    <スクリプトSRC = "静的/ JS / bootstrap.min.js"タイプ= "テキスト/ javascriptの"> </ SCRIPT> 
    <リンクのhref =" /静的CSS / bootstrap.css "のrel = "スタイルシート"タイプ= "テキスト/ cssの"/> 
    <リンクのhref ="静的/ CSS /フォント-素晴らしい-4.7。0 / CSS /フォントawesome.min.css」REL = "スタイルシート" 
        タイプ= "テキスト/ CSS" /> 
    <スタイルタイプ= "テキスト/ cssの">
        .PAGEヘッダー{マージン:20ピクセル0。border-bottom:1pxの固体#eee。パディングボトム:0; テキスト整列:センター; } 
        .btn項目{テキスト整列:センター。} 
        I {マージン右:3px。表示:インラインブロック。} 
        H1 {テキスト整列:センター。} 
        .tip {フォント重量:太字。色:ブラック。} 
        .lead {フォントサイズ:小さいです。} 
        .gpio項目{テキスト整列:センター。} 
        .btn-GND、.btn-GPIO {パディング:10pxの5pxの。マージン下:5pxの; 幅:100%; フォントサイズ:小; } 
        .gpio .row {マージントップ:5pxの。} 
    </スタイル> 
</ head> 
<body> 
    <DIV CLASS = "コンテナ"> 
        <DIV CLASS = "ページヘッダ">  
            <H3>
                树莓派ウェブ控制中心</ H3>
            <Pクラス= "つながる"> 
                用于控制连接到树莓派的各种传感器
            </ P> 
        </ div> 
        <divのクラス= "パネルパネル-デフォルト"> 
            <DIV CLASS = "パネルの見出し"> 
                设备</ DIV> 
            <DIV CLASS = "パネル体"> 
                <DIV CLASS = "行"> 
                    <DIV CLASS = "COL-XS-3 BTN項目"> 
                    </ div> 
                    <DIV CLASS = "COL-XS- 3 BTN項目">  
                        <a class="btn btn-danger btn-trigger"> <Iクラス= "FA-FA電源OFF"> </ I>关机</a>の
                    </ div> 
                    <DIV CLASS = "COL-XS-3 BTN項目">
                        <a class="btn btn-primary btn-trigger"> <I CLASS =" FA FA-リフレッシュ"> </ I>重启する</a>
                    </ DIV> 
                    <DIV CLASS = "COL-XS-3 BTN項目"> 
                    </ div> 
                    <スクリプトタイプ= "テキスト/ javascriptの"> 
                        のvar URL = "/"; 
                        $(関数(){ 
                            $( "BTN-トリガー")。クリックしてください(関数(){ 
                                VARのテキスト= $(この)の.text()。、(/ /グラムを置き換える"").replace(/ \ N / G、 "").replace(/ \ R / G、 "").replace(/ \ T / gであり、 ""); 
                                VAR CMD = ""; 
                                スイッチ(テキスト){ 
                                    ケース"关机": 
                                        破る; 
                                    ケース"重启":
                                        CMD =" 
                                } 
                                IF( "?あなたは必ず、コマンドを実行したい"(確認して)){ 
                                    $アヤックス({ 
                                        タイプの"POST"、
                                        URL:URL、
                                        データ:{ 
                                            アクション:「RUN-シェル-CMD " 
                                            CMD:CMD 
                                        }、
                                        成功:機能(結果){ 
                                            // $("。。チップ」)HTML(結果)。
                                        } 
                                    })。 
                                } 
                            })。
                        }); 
                    </スクリプト> 
                </ div> 
            </ div> 
        </ div> 
        <divのクラス= "パネルパネル-デフォルト"> 
            <DIV CLASS = "パネルの見出し"> 
                GPIO(蓝色- >低电平、红色- >高电平)</ DIV> 
            <DIV CLASS = "パネル本体GPIO"> 
                <DIV CLASS = "行"> 
                    <DIV CLASS = "COL-XS-6 GPIO項目"> 
                        左侧
                    </ DIV> 
                    <DIVクラス= "COL-XS-6 GPIO項目"> 
                        右侧
                </ div>
                        <ボタンが無効= "無効"クラス= "GND BTN-BTN-INFO BTN"> 
                            GND(9)左05 </ボタン> 
                    </ div> 
                    <DIV CLASS = "COL-XS-6 GPIO項目"> 
                        <ボタン無効= "無効"クラスは= "GND BTN-BTN BTN-INFO"> 
                            GND(6)右03 </ボタン> 
                    </ div> 
                </ div> 
                <DIV CLASS = "行"> 
                    <DIV CLASS = "col- XS-6 GPIO項目"> 
                        <a class="btn btn-primary btn-gpio" pin="17"> 17(11)左06 </a>の
                    </ div> 
                    <DIV CLASS = "COL-XS-6 GPIO項目">
                        <a class="btn btn-primary btn-gpio" pin="18"> 18(12)右06 </a>の
                    </ div> 
                </ div> 
                <DIV CLASS = "行"> 
                    <DIV CLASS =」 COL-XS-6 GPIO項目"> 
                        <a class="btn btn-primary btn-gpio" pin="27"> 27(13)左07 </a>の
                    </ div> 
                    <DIV CLASS =" col- XS-6 GPIO-アイテム"> 
                        <ボタンを無効化="無効」クラス= "BTN BTN-情報BTN-GND"> 
                            GND(14)右07 </ボタン> 
                    </ div>
                </ DIV> 
                <DIV CLASS = "行"> 
                    <DIVクラス= "COL-XS-6 GPIO項目">
                        <a class="btn btn-primary btn-gpio" pin="22"> 22(15)左08 </a>の 
                    </ div>クラス= "BTN BTNプライマリBTN-GPIO"端子= "22"> 22(15)左08 </a>の
                    </ div>
                    <DIV CLASS = "COL-XS-6 GPIO項目"> 
                        <a class="btn btn-primary btn-gpio" pin="23"> 23(16)右08 </a>の
                    </ div> 
                </ DIV> 
                <DIV CLASS = "行"> 
                    <DIV CLASS = "COL-XS-6 GPIO項目"> 
                        無効<ボタン= "無効"クラス= "GND BTN-BTN BTN-INFO"> 
                            GND(25)左13 </ボタン> 
                    </ div> 
                    <DIV CLASS = "COL-XS-6 GPIO項目"> 
                        <a class="btn btn-primary btn-gpio" pin="24">24(18)右09 </a>の
                </ div> 
                <DIV CLASS = "行"> 
                    <DIV CLASS = "COL-XS-6 GPIO項目"> 
                        <a class="btn btn-primary btn-gpio" pin="5"> 05(29)左15 </a>の
                    </ DIV> 
                    <DIV CLASS = "COL-XS-6 GPIO項目"> 
                        = "無効"クラス= "GND BTN-BTN BTN-INFO">無効<ボタン
                            GND(20)右10 </ボタン> 
                    </ div> 
                </ DIV> 
                <DIV CLASS = "行"> 
                    <DIV CLASS = "COL-XS-6 GPIO項目"> 
                        <クラス=」BTNプライマリBTN-GPIO BTN」端子= "6"> 06(31)左16 </a>の
                    </ div> 
                    <DIV CLASS = "COL-XS-6 GPIO項目">
                        <a class="btn btn-primary btn-gpio" pin="25"> 25(22)右11 </a>の
                    </ div> 
                </ div> 
                <DIV CLASS = "行"> 
                    <DIV CLASS =」 COL-XS-6 GPIO項目"> 
                        <a class="btn btn-primary btn-gpio" pin="13"> 13(33)左17 </a>の
                    </ div> 
                    <DIV CLASS =" col- XS-6 GPIO項目"> 
                        <ボタンを無効に="無効」クラス= "BTN BTN-INFO-BTN GND"> 
                            GND(30)右15 </ボタン> 
                    </ div>
                </ DIV> 
                <DIV CLASS = "行"> 
                    <DIVクラス= "COL-XS-6 GPIO項目"> 
                        <クラス= "BTN BTNプライマリBTN-GPIO"端子= "19"> 19(35)左18 </a>の
                    </ div>
                    <DIV CLASS = "COL-XS-6 GPIO項目"> 
                        <a class="btn btn-primary btn-gpio" pin="12"> 12(32)右16 </a>の
                    </ div> 
                </ DIV> 
                <DIV CLASS = "行"> 
                    <DIV CLASS = "COL-XS-6 GPIO項目"> 
                        <a class="btn btn-primary btn-gpio" pin="26"> 26(37)左19 </a>の
                    </ div> 
                    <DIV CLASS = "COL-XS-6 GPIO項目"> 
                        <ボタンを無効に= "無効"クラスは= "BTN-GND BTN BTN-INFO"> 
                            GND(34)右17 </ボタン>  
                    </ div>
                </ div> 
                <DIV CLASS = "行">
                    <DIV CLASS = "COL-XS-6 GPIO項目"> 
                        <a class="btn btn-primary btn-gpio" pin="20"> 20(37)右19 </a>の
                    </ DIV> 
                    <DIVクラス= "COL-XS-6 GPIO項目"> 
                        <a class="btn btn-primary btn-gpio" pin="16"> 16(36)右18 </a>の
                    </ div> 
                </ div> 
                <DIV CLASS = "行"> 
                    <DIV CLASS = "COL-XS-6 GPIO項目"> 
                        <ボタンは無効になって= "無効"クラス= "BTN BTN-INFO GND BTN-"> 
                            GNDを(39)右20 </ボタン> 
                    </ div> 
                    <DIV CLASS = "COL-XS-6 GPIO項目">
                        <a class="btn btn-primary btn-gpio" pin="21"> 21(40)右20 </a>の
                    </ div> 
                </ div> 
                <スクリプトタイプ= "テキスト/ javascriptの"> 
                    $(関数(){ 
                        $( "BTN-GPIO。 ")をクリックします(関数(){。
                            VAR GPIO = $(この).ATTR("ピン"); 
                            場合($(この).hasClass(" BTN-危険")) { 
                                $(この).removeClass( "BTN-危険")addClass( "BTN-プライマリ"); 
                            }他{ 
                                $(この).removeClass( "BTN原色")addClass(」。BTN-危険"); 
                            }
                            VARステータス= $(この).hasClass( "BTN-危険")?1:0。
                            $アヤックス({
                                タイプ: "POST"、
                                URL:URL、
                                データ:{ 
                                    アクション: "セットGPIOピン"、
                                    ピン:GPIO、
                                    ステータス:ステータス
                                }、
                                成功:関数(結果){ 
                                    //$(".tip").html (結果); 
                                } 
                            })。
 
                        }); 
                    })
                </スクリプト> 
            </ div> 
        </ div> 
    </ div> 
</ BODY> 
</ HTML>


  

2.Pythonスクリプト

#coding:UTF8の
インポートsysが
GPIOのようRPi.GPIOをインポートする
インポート時間
インポートOS 
インポートtornado.ioloopの
インポートtornado.webの
tornado.httpserverインポート
インポートtornado.options 
tornado.optionsからは、定義オプションインポート
 
#初始化
デフのinit():
    GPIO.setwarnings (偽)
    GPIO.setmode(GPIO.BCM) 
 设置GPIO针脚电平输出
デフSetPinStatus(ピン、ステータス):
    GPIO.cleanup(int型(ピン))
    GPIO.setup(INT(ピン)、GPIO.OUT)
    の場合( INT(ステータス)== 0):
        GPIO.output(int型(ピン)、GPIO.LOW)
    他:
        GPIO.output(int型(ピン)、GPIO.HIGH)
    
#1路由の处理の	 
クラスIndexHandler(tornado.web.RequestHandler):
        DEF(自己)GET:
                self.render( "index.htmlの")
        DEF POST(自己):
                のinit()
		アクション= self.get_argument( 'アクション') 設定GPIOピンレベル出力
		の場合(アクション==「セット- PIN-GPIO "):
		    PIN = self.get_argument( 'PIN')
                    ステータス= self.get_argument( 'ステータス')
		    SetPinStatus(PIN、ステータス)
		    self.write("真「)の
		ような#シェルスクリプト、:シャットダウン、再起動
		elif(==アクション"RUN-シェル-CMD"):
		    CMD = self.get_argument( 'CMD')
                    os.system(CMD)					 
                
__name__ == '__main__' IF: コンソール出力応答結果、正式な環境が開かないことが
    #1 tornado.options。parse_command_line() 
    設定= { 
        "static_path":os.path.join(OS。path.dirname(__ファイル__)、 "静的") 
        } 
    アプリ= tornado.web.Application(
        ハンドラー= [ 
            (R "/"、IndexHandler)、
            (R "(アップルタッチ-icon \ .PNG)」、tornado.web.StaticFileHandler、辞書(パス=設定[ 'static_path']))
        ]、**設定)
    
    HTTP_Serverの= tornado.httpserver.HTTPServer(APP)
    http_server.listen(8020)
    竜巻。 ioloop.IOLoop.instance()。(スタート)
    GPIO.cleanupを()

  

3.ディレクトリ構造

 

4.展開のデバッグ

ターミナルに入力します:python /var/www/html/pi/gpio/gpio.py(ファイルパスに私のパスのラズベリーパイ、独自の環境への実際のパスが優先。)

します。http:// localhost:端末がエラーではない場合は、ブラウザを開いて、その後、アドレス入力ページへのアクセスに8020を、リスニングポート8020でのPythonスクリプトで、あなた自身を設定することができます。

5.ファイル名を指定して実行結果

 

6.ソースコードをダウンロードしてください

http://download.csdn.net/download/a497785609/9990088

おすすめ

転載: www.cnblogs.com/kekeoutlook/p/11267389.html