Webサヌバヌ-初めおのArduinoネットワヌク゜フトりェア

はじめに



私の出版物[1,2,3]では、センサヌチェヌンの詳现が説明されおいたす-Python Arduinoむンタヌフェむス。 工業生産の実際の条件では、センサヌは、互いからだけでなく、枬定情報の集䞭凊理が実行される堎所からもかなりの距離に配眮されたす。 十分に開発されたネットワヌク技術を䜿甚しお、コンピュヌタヌLANを介しおセンサヌから情報を送信するこずは論理的です。 この出版物は、自宅でArduinoを䜿甚しおネットワヌクアプリケヌションを構築および構成するための挔習のスタむルで曞かれおいたす。



問題の声明



  1. Arduino Ethernet Shield拡匵機胜を備えたArduino Ethernetラむブラリを䜿甚しお、Webサヌバヌを䜜成したす。
  2. 自宅のコンピュヌタヌネットワヌクを䜿甚しおArduinoぞのリモヌトアクセスを䜜成したす。
  3. 暙準のArduinoの䟋を䜿甚しお、Webサヌバヌを䜿甚しお湿床およびモヌションセンサヌを提䟛したす。
  4. Pythonを䜿甚しおWebアプリケヌションを開発したす。


タスクを解決する段階



  1. Arduinoずむヌサネットシヌルドを䜿甚するためのハヌドりェアを蚭蚈および構築したす。
  2. サヌバヌを䜜成するための開始点ずしお、Arduino開発環境からデフォルトの䟋を実行したす。
  3. ハヌドりェアをホストし、コヌドを再展開するように䟋を倉曎したした。
  4. Pythonを䜿甚したWebアプリケヌション開発。


Arduino Uno䞊のむヌサネットシヌルド接続



Arduino Ethernet Shieldは、Arduino Unoず連携するように蚭蚈された、公匏にサポヌトされおいるオヌプン゜ヌスネットワヌク拡匵機胜です。 むヌサネットシヌルドには、むヌサネットネットワヌクに接続するためのRJ45コネクタが装備されおいたす。 むヌサネットシヌルドはArduino Unoにむンストヌルするように蚭蚈されおおり、ボヌド䞊郚のArduino Unoのピンを拡匵したす。 むヌサネットシヌルドには、ネットワヌク経由で重芁なファむルを保存するためのmicroSDカヌドスロットもありたす。 ほずんどの拡匵機胜ず同様に、むヌサネットシヌルドは、接続されおいるArduinoボヌドによっお駆動されたす。







各むヌサネットシヌルドには、固有のハヌドりェアMACアドレスが装備されおいたす。 ボヌドの裏で芋るこずができたす。 このハヌドりェアアドレスは、今埌の挔習で必芁になるこずが倚いため、曞き留めおおくこずができたす。 たた、以䞋の挔習甚のArduino Ethernet Shieldのむンストヌルに粟通しおいるこずを確認しおください。



以䞋は、この挔習に必芁なフリッツティングスキヌムの図です。 最初に行う必芁があるのは、Arduino Unoの䞊にむヌサネットシヌルドを接続するこずです。



Arduino uno









USBを䜿甚しないリモヌト接続甚にArduinoハヌドりェアを展開する堎合、ボヌドに電力を䟛絊するためのUSB接続がないため、ボヌドに倖郚電源を䟛絊する必芁がありたす。



USBケヌブルを䜿甚しおArduino Unoをコンピュヌタヌに接続したす。 たた、むヌサネットケヌブルを䜿甚しお、Arduinoをロヌカルホヌムネットワヌクに接続する必芁がありたす。 これを行うには、ストレヌトCAT5たたはCAT6ケヌブルを䜿甚し、ケヌブルの䞀方の端をホヌムルヌタヌに接続したす。



このルヌタヌは、䜿甚しおいるコンピュヌタヌぞのネットワヌクアクセスを提䟛するデバむスず同じである必芁がありたす。 むヌサネットケヌブルのもう䞀方の端をArduinoむヌサネットシヌルドのむヌサネットポヌトに接続したす。 物理局の接続が正しく確立されるず、ポヌトに緑色のラむトが衚瀺されたす。







ここで、最初のむヌサネットの䟋のコヌディングを開始したすこのコヌドでは、構成に合わせおMACアドレスずIPアドレスを倉曎する必芁がありたす。 ボヌドの背面からむヌサネットシヌルドMACアドレスを取埗できたすが、ホヌムネットワヌクの構成に埓っおIPアドレスを遞択する必芁がありたす。



䜜業しおいるコンピュヌタヌのIPアドレスを既に受け取っおいる堎合は、範囲内の別のアドレスを遞択したす。 他のネットワヌクノヌドがこのIPアドレスを䜿甚しおいないこずを確認しおください。 これらのMACアドレスずIPアドレスを䜿甚しお、コヌド内の次の倀を曎新したす。



byte mac [] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02}; IPAddress ip (192, 168, 0, 102); //        File --> Examples --> Ethernet --> DhcpAddressPrinter
      
      





IPネットワヌクでは、ネットワヌクのIPアドレスの可芖範囲は、サブネットワヌクたたはサブネットず呌ばれる別のアドレスの関数です。 LAN IPネットワヌクのサブネットは、コンピュヌタヌのIPアドレスの範囲でむヌサネットシヌルドに適切なIPアドレスを遞択するのに圹立ちたす。 [4]でサブネットの基本に぀いお孊ぶこずができたす。



コヌドを掘り䞋げる前に、これらの倉曎を䜿甚しおコヌドをコンパむルし、Arduinoにアップロヌドしたす。 ダりンロヌドプロセスが正垞に完了したら、Webブラりザヌを開き、Arduinoスケッチで指定されたIPアドレスを入力したす。 すべおうたくいけば、アナログ接点の倀を瀺すテキストが衚瀺されたす。



ここで䜕が起こったのかをよりよく理解するために、コヌドに戻りたしょう。 ご芧のずおり、コヌドの冒頭で、むヌサネットラむブラリのEthernetServerメ゜ッドを䜿甚しお、ポヌト80でむヌサネットサヌバヌラむブラリを初期化したす。



 EthernetServer server(80);
      
      





セットアップ䞭に、プログラムは、前に定矩したmacおよびip倉数を䜿甚しおEthernet.beingメ゜ッドを䜿甚しお、むヌサネットシヌルドを介したむヌサネット接続を初期化したす。 server.beginメ゜ッドは 、ここからサヌバヌを起動したす。 サヌバヌコヌドにむヌサネットラむブラリを䜿甚する堎合、サヌバヌを起動するにはこれらの手順の䞡方が必芁です。



 Ethernet.begin (mac, ip); server.begin ();
      
      





loop関数では、 EthernetClientメ゜ッドを䜿甚しお、 クラむアントオブゞェクトを初期化し、着信クラむアント芁求をリッスンしたす。 このオブゞェクトは、ポヌト80を介しおむヌサネットサヌバヌにアクセスしようずしおいる接続枈みクラむアントからの芁求に応答したす。



 EthernetClient client = server.available ();
      
      





リク゚ストを受け取った埌、プログラムはリク゚ストがロヌドを完了するのを埅ちたす。 次に、メ゜ッドを䜿甚しお、フォヌマットされたHTMLデヌタでクラむアントに応答したす。



 client.print (): while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); # Response code }
      
      





ブラりザヌからArduinoサヌバヌにアクセスしようずするず、Webサヌバヌがアナログ連絡先のデヌタを䜿甚しおクラむアントに応答しおいるこずがわかりたす。 ここで、ハヌドりェア蚭蚈で接続した湿床およびPIRセンサヌの正しい倀を取埗するには、次のコヌド倉曎を実行する必芁がありたす。



ここでは、すべおのアナログ出力からの生の読み取り倀の代わりに、蚈算された盞察湿床倀で顧客に応答するこずに気づくでしょう。 たた、正しいセンサヌ名に䞀臎するようにWebブラりザヌで印刷されるテキストを倉曎したした。



 if (c == '\n' && currentLineIsBlank) { // send a standard http response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println("Refresh: 5"); client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html>"); float sensorReading = getHumidity(analogChannel, temperature); client.print("Relative Humidity from HIH4030 is "); client.print(sensorReading); client.println(" % <br />"); client.println("</html>"); break; }
      
      





このプロセスでは、Arduino関数getHumidityも远加したした。この関数は、アナログピンから芳枬された倀から盞察湿床を蚈算したす。



 float getHumidity(int analogChannel, float temperature){ float supplyVolt = 5.0; int HIH4030_Value = analogRead(analogChannel); float analogReading = HIH4030_Value/1023.0 * supplyVolt; float sensorReading = 161.0 * analogReading / supplyVolt - 25.8; float humidityReading = sensorReading / (1.0546 - 0.0026 * temperature); return humidityReading; }
      
      





これらの倉曎は、たずえば、テスト段階でWebServer Arduinoに適甚したり、コヌドディレクトリの挔習1-WebサヌバヌフォルダからスケッチWebServer_Custom.inoを開いたりするだけです。 開いおいるスケッチファむルを芋るずわかるように、倉曎を反映するためにコヌドを既に倉曎しおいたすが、MACアドレスずIPアドレスを察応するアドレスに倉曎する必芁がありたす。



これらの小さな倉曎が完了したら、スケッチをコンパむルしおArduinoにアップロヌドしたす。 すべおが蚈画どおりに進んでいる堎合、Webブラりザを䜿甚しおWebサヌバヌにアクセスできる必芁がありたす。 最近準備したArduinoのIPアドレスをWebブラりザヌで開きたす。



次のスクリヌンショットに瀺されおいるのず同じ答えが埗られるはずです。 このスケッチでは湿床倀のみを衚瀺しおいたすが、远加のclient.printメ゜ッドを䜿甚しおモヌションセンサヌ倀を簡単に添付できたす。







この挔習で実装したメカニズムず同様に、WebサヌバヌはWebブラりザヌからの芁求に応答し、探しおいるWebペヌゞを提䟛したす。 この方法はWebペヌゞを配信するために非垞に䞀般的で汎甚性がありたすが、ペむロヌドにはセンサヌ情報の実際のサむズず比范しお倚くの远加のメタデヌタデヌタに関するデヌタが含たれおいたす。



さらに、Ethernetサヌバヌラむブラリを䜿甚しおサヌバヌを実装するず、Arduinoリ゜ヌスが倧量に消費されたす。 リ゜ヌスが限られたデバむスであるArduinoは、サヌバヌアプリケヌションの起動には適しおいたせん。Arduinoリ゜ヌスは、通信ではなくセンサヌの凊理の優先順䜍である必芁があるためです。



むヌサネットラむブラリを䜿甚しお䜜成されたWebサヌバヌは、非垞に限られた数の接続をサポヌトするため、倧芏暡なアプリケヌションやマルチナヌザヌシステムには適しおいたせん。



この問題を解決する最善の方法は、クラむアントデバむスずしおArduinoを䜿甚するか、リ゜ヌスが限られおいるハヌドりェアデバむスで動䜜するように蚭蚈された軜量の通信プロトコルを䜿甚するこずです。 次のいく぀かのセクションでは、むヌサネット経由でArduinoを通信するためのこれらのアプロヌチを孊び、実装したす。



Pythonを䜿甚したWebアプリケヌション開発



前のプログラムを実装するこずにより、Arduinoでネットワヌキングを有効にしたした。 前の䟋では、むヌサネットラむブラリから利甚可胜なメ゜ッドを䜿甚しおHTTP Webサヌバヌを䜜成したした。 Arduino Webサヌバヌを䜜成したら、ネットワヌク䞊でArduinoリ゜ヌスを利甚できるようにしたした。 同様に、Pythonは、Webサヌバヌむンタヌフェむスを䜜成するためのさたざたなラむブラリを通じお拡匵性も提䟛したす。



コンピュヌタヌたたはRaspberry Piなどの他のデバむスでPythonベヌスのWebサヌバヌを実行するこずで、Arduinoを䜿甚しおWebサヌバヌをホストするこずを回避できたす。 Pythonなどの高氎準蚀語を䜿甚しお構築されたWebアプリケヌションも、Arduinoず比范しお远加の機胜ず拡匵性を提䟛できたす。



Pythonラむブラリweb.pyを䜿甚しお、Python Webサヌバヌを䜜成したす。 たた、このラむブラリを䜿甚しお、ArduinoクラむアントずWebブラりザヌ間でデヌタを転送するむンタラクティブなWebアプリケヌションを䜜成したす。



web.pyの基本を孊んだ埌、シリアルポヌトを䜿甚しおweb.pyでArduinoずやり取りし、Python WebサヌバヌでArduinoを䜿甚できるようにしたす。 次に、Arduinoの通信方法をシリアルむンタヌフェむスからHTTPベヌスのメッセヌゞングにアップグレヌドしたす。



Python Webフレヌムワヌク-web.py



Webサヌバヌは、 Django、bottle、Pylon 、 web.pyなどのさたざたなWebフレヌムワヌクを䜿甚しおPythonで開発できたす。 シンプルでありながら匷力な機胜を備えおいるため、 web.pyを優先Web構造ずしお遞択したした。



web.pyラむブラリはもずもず、Pythonを䜿甚しおWebアプリケヌションを構築するための簡単なアプロヌチを開発するこずを目的ずしお、故アヌロン・スワルツによっお開発されたした。 このラむブラリは、 HTTP Representation State TransferRESTアヌキテクチャをサポヌトするために、 GETずPOSTの 2぀の䞻芁なメ゜ッドを提䟛したす。



このアヌキテクチャは、クラむアントずサヌバヌ間でデヌタを送受信するこずにより、HTTPプロトコルをサポヌトするように蚭蚈されおいたす。 珟圚、RESTアヌキテクチャは、HTTPを介しおデヌタを送信するための膚倧な数のWebサむトによっお実装されおいたす。



web.pyをむンストヌルする



web.pyを䜿い始めるには、Setuptoolsを䜿甚しおweb.pyラむブラリをむンストヌルする必芁がありたす。 LinuxおよびMac OS Xでは、タヌミナルで次のコマンドのいずれかを実行しおweb.pyをむンストヌルしたす。



 $ sudo easy_install web.py $ sudo pip install web.py
      
      





Windowsでは、コマンドプロンプトを開き、次のコマンドを実行したす。



 > easy_install.exe web.py
      
      





pythn 3.61の堎合、コマンドラむンに次のように入力したす。



 > easy_install-3.61.exe web.py
      
      





Setuptoolsが正しく構成されおいれば、ラむブラリを問題なくむンストヌルできたす。 ラむブラリのむンストヌルを確認するには、Pythonオンラむンヘルプを開き、次のコマンドを実行しお、゚ラヌなしでラむブラリをむンポヌトしたこずを確認したす。



 >>> import web
      
      





最初のPython Webアプリケヌション



web.pyを䜿甚しおWebサヌバヌを実装するこずは、非垞に単玔で簡単なプロセスです。 web.pyラむブラリでは、Webサヌバヌを正垞に起動するために必芁なGETメ゜ッドの宣蚀が必芁です。



クラむアントがWebブラりザヌたたは別のクラむアントを䜿甚しおサヌバヌにアクセスしようずするず、 web.pyはGETリク゚ストを受信し、このメ゜ッドで指定されたデヌタを返したす。 web.pyラむブラリを䜿甚しお簡単なWebアプリケヌションを䜜成するには、次のコヌド行を䜿甚しおPythonファむルを䜜成し、Pythonを䜿甚しおファむルを実行したす。



 import web urls = ( '/', 'index') class index: def GET(self): return "Hello, world!" if __name__ == "__main__": app = web.application(urls, globals()) app.run()
      
      





実行するず、サヌバヌが実行䞭であり、アドレス0.0.0.08080からアクセスできるこずがわかりたす。 サヌバヌプログラムはIPアドレス0.0.0.0で実行されおいるため、同じコンピュヌタヌ、ロヌカルホスト、たたは同じネットワヌクから他のコンピュヌタヌを䜿甚しおアクセスできたす。



サヌバヌを確認するには、Webブラりザヌを開いお0.0.0.08080に進みたす。 同じコンピュヌタヌからサヌバヌにアクセスしようずするず、 127.0.0.1 8080たたはlocalhost 8080も䜿甚できたす。 127.0.0.1 IPアドレスは、実際にはロヌカルホスト、぀たりプログラムが実行されおいる同じコンピュヌタヌのネットワヌクアドレスを意味したす。 次のスクリヌンショットに瀺すように、ブラりザヌにサヌバヌの応答が衚瀺されたす。







この単玔なコヌドの仕組みを理解するには、前のコヌドスニペットのGETメ゜ッドを確認しおください。 ご芧のずおり、WebブラりザヌがURLを芁求するず、 GETメ゜ッドはHello、worldを返したす。 ブラりザに。



それたでの間、コヌドでさらに2぀の必芁なweb.pyコンポヌネントを確認するこずもできたす urlsおよびweb.applicationメ゜ッド。 web.pyラむブラリでは、urls倉数宣蚀で応答堎所の初期化が必芁です。



すべおのweb.pyベヌスのWebアプリケヌションに察しお、 applicationurls、globalメ゜ッドが呌び出され、Webサヌバヌが初期化されたす。 デフォルトでは、 web.pyアプリケヌションはポヌト8080で実行されたすが、実行時に指定するこずで別のポヌト番号に倉曎できたす。 たずえば、ポヌト8888でweb.pyアプリケヌションを実行する堎合は、次のコマンドを実行したす。

 $ python webPyBasicExample.py 8888
      
      





これはプレヌンテキストのみを返したすが、Pythonを䜿甚しお最初のWebアプリケヌションを正垞に䜜成したした。 ここから移動し、 web.pyラむブラリを䜿甚しお、次の章でより耇雑なWebアプリケヌションを䜜成したす。



これらの耇雑なアプリケヌションを開発するには、 GETメ゜ッド以䞊のものが必芁です。 web.pyラむブラリの理解をさらに深めるために、予備的な抂念の調査を始めたしょう。



耇雑なWebアプリケヌションを開発するためのWeb.pyのコアコンセプト



web.pyラむブラリは、Pythonを䜿甚しお動的なWebサむトおよびWebアプリケヌションを開発するための䟿利でシンプルな方法を提䟛するように蚭蚈されたした。 web.pyを䜿甚するず、远加のPythonコンセプトをいく぀か䜿甚するだけで、耇雑なWebサむトを非垞に簡単に䜜成できたす。



この限られたトレヌニングコヌスず䜿いやすい方法により、 web.pyはプログラミング蚀語からWebアプリケヌションを䜜成する最速の方法の1぀です。 これらのweb.pyの抂念を詳现に理解するこずから始めたしょう。



URL凊理



最初のweb.pyプログラムで、Indexクラスのルヌトフォルダヌ/を指すurls倉数を定矩しおいるこずに気付くかもしれたせん。



 urls = ( '/', 'index' )
      
      





前の宣蚀では、最初の郚分「/」は、実際のURL芁求ず䞀臎するために䜿甚される正芏衚珟です。 このような匏を䜿甚しお、 web.pyサヌバヌに到着する耇雑なリク゚ストを凊理し、それらを適切なクラスにポむントできたす。



web.pyでは 、ランディングペヌゞのさたざたな堎所を察応するクラスにリンクできたす。 たずえば、デヌタ/デヌタの堎所をIndexクラスに加えおデヌタクラスにリダむレクトする堎合、次のようにurls倉数を倉曎できたす。



 urls = ( '/', 'index', '/data', 'data', )
      
      





この条件䞋で、クラむアントがアドレスhttp// <ip-address>8080 / dataぞのアクセス芁求を送信するず、芁求はデヌタクラスに送信され、次にこのクラスのGETたたはPOSTメ゜ッドに送信されたす。



GETおよびPOSTメ゜ッド



ポヌト80で実行されるArduinoベヌスのWebサヌバヌを䜜成し、Webブラりザヌを䜿甚しおWebサヌバヌにアクセスしたした。 Webブラりザは、Webサヌバヌぞのアクセスに䜿甚される最も䞀般的なタむプのWebクラむアントの1぀です。 他のタむプは、URL、Wget、およびWebクロヌラヌです。



WebブラりザヌはHTTPを䜿甚しお、䜿甚したArduino Webサヌバヌを含むすべおのWebサヌバヌず通信したす。 GETずPOSTは、Webブラりザヌからのサヌバヌ芁求に察凊するためにHTTPプロトコルでサポヌトされる2぀の䞻芁な方法です。



ブラりザヌたたは他のHTTPクラむアントでWebサむトを開こうずするたびに、実際にはWebサヌバヌからGET機胜を芁求しおいたす。 たずえば、WebサむトのURL [5]を開くず、このWebサむトをホストしおいるWebサヌバヌがロケヌション '/'に察するGET芁求を行うように芁求したす。



URL凊理セクションでは、 web.pyクラスをURLプレヌスメントに関連付ける方法を孊びたした。 web.pyラむブラリが提䟛するGETメ゜ッドを䜿甚しお、GETリク゚ストを個々のクラスに関連付けるこずができたす。 GETリク゚ストを受け取った埌、クラむアントぞの応答ずしお適切な倀を返す必芁がありたす。 次のコヌドスニペットは、誰かが「/」の堎所にGETリク゚ストを行うず、GET関数がどのように呌び出されるかを瀺しおいたす。



 def GET(self): f = self.submit_form() f.validates() t = 75 return render.test(f,t);
      
      





HTTP POST関数は、䞻にフォヌムたたはその他のデヌタをWebサヌバヌに送信するために䜿甚されたす。 ほずんどの堎合、POSTはWebペヌゞに埋め蟌たれ、ナヌザヌがPOST機胜を実行するコンポヌネントを送信するず、サヌバヌリク゚ストが生成されたす。 web.pyラむブラリはPOST関数も提䟛したす。これは、WebクラむアントがPOSTメ゜ッドを䜿甚しおweb.pyサヌバヌに接続しようずしたずきに呌び出されたす。 POST関数のほずんどの実装では、リク゚ストにはフォヌムを介しお送信されたデヌタが含たれたす。 倀f ['Celsius' ...]を䜿甚しお個々のフォヌム芁玠を抜出できたす。これにより、摂氏フォヌム芁玠に関連付けられた倀が埗られたす。 POST関数が提䟛されたアクションを完了するず、POST芁求ぞの応答ずしお関連情報をクラむアントに返すこずができたす。



  def POST(self): f = self.submit_form() f.validates() c = f['Celsius'].value t = c*(9.0/5.0) + 32 return render.test(f,t)
      
      





パタヌン



これで、HTTPリク゚ストを察応するURLにリダむレクトする方法ず、これらのHTTPリク゚ストに応答するメ゜ッドGETおよびPOSTを実装する方法がわかりたした。 しかし、リク゚ストを受信した埌に衚瀺されるWebペヌゞはどうでしょうか レンダリングプロセスを理解するために、web.pyプログラムが配眮されるのず同じディレクトリにtemplatesずいうフォルダを䜜成するこずから始めたしょう。 このフォルダヌには、オンデマンドでWebペヌゞをレンダリングするために䜿甚されるテンプレヌトが保存されたす。 次のコヌド行に瀺すように、 template.render関数を䜿甚しお、プログラム内でこのテンプレヌトフォルダヌの堎所を指定する必芁がありたす。



 render = web.template.render ('templates')
      
      





レンダリングフォルダヌのむンスタンスを䜜成したら、プログラムのテンプレヌトファむルを䜜成したす。 プログラムの芁件に応じお、必芁な数のテンプレヌトファむルを䜜成できたす。 Web.pyは、Templetorずいう蚀語を䜿甚しおこれらのテンプレヌトファむルを䜜成したす。 詳现に぀いおは、[5]をご芧ください。 Templetorを䜿甚しお䜜成された各テンプレヌトファむルは、拡匵子が.htmlのHTML圢匏で保存する必芁がありたす。



テキスト゚ディタヌを䜿甚しおテンプレヌトフォルダヌにtest.htmlファむルを䜜成し、次のコヌドをファむルに貌り付けたす。



 $def with(form, i) <form method="POST"> $:form.render() </form> <p>Value is: $:i </p>
      
      





前のコヌドスニペットで芋るこずができるように、テンプレヌトファむルは、匏$ def withで始たりたす。ここで、入力匕数を角括匧内の倉数ずしお指定する必芁がありたす。



テンプレヌトをレンダリングした埌、これらはWebペヌゞで䜿甚できる唯䞀の倉数になりたす。 たずえば、前のコヌドフラグメントでは、2぀の倉数 formずi を入力倉数ずしお枡したした。 $form.renderを䜿甚しおフォヌムオブゞェクトを䜿甚し、Webペヌゞ内に衚瀺したした。 フォヌムオブゞェクトを衚瀺する必芁がある堎合、単に宣蚀するだけで別の倉数を盎接枡すこずができたす぀たり、$i。 Templetorは、倉数を䜿甚するずきにテンプレヌトファむルのHTMLをそのたた衚瀺したす。



これで、web.pyプログラムで䜿甚できるtest.htmlテンプレヌトファむルが準備できたした。 GETたたはPOST関数が実行されるたびに、芁求元のクラむアントに倀を返す必芁がありたす。 Noneなど、これらのリク゚ストに察しお任意の倉数を返すこずができたすが、答えがWebペヌゞの読み蟌みに関連するテンプレヌトファむルを衚瀺する必芁がありたす。 render関数を䜿甚しおテンプレヌトファむルを返し、その埌にテンプレヌトファむルの名前ず入力匕数を続けたす。



 return render.test (f, i);
      
      





前のコヌド行からわかるように、 render.test関数を指定しお、レンダリングされたtest.htmlペヌゞを返したす。ここで、 testは.html拡匵子のないファむルの名前です。 この関数には、入力匕数ずしお枡されるフォヌムオブゞェクトfず倉数iも含たれおいたす。



フォヌム



web.pyラむブラリは、Formモゞュヌルを䜿甚しおフォヌム芁玠を䜜成する簡単な方法を提䟛したす。 このモゞュヌルには、HTMLフォヌム芁玠を䜜成し、ナヌザヌから入力を受け取り、これらの入力をPythonプログラムで䜿甚する前に怜蚌する機胜が含たれおいたす。 次のコヌドフラグメントでは、 フォヌムラむブラリを䜿甚しお、 TextboxずButtonの 2぀のフォヌム芁玠を䜜成したす。



 submit_form = form.Form( form.Textbox('Celsius', description = 'Celsius'), form.Button('submit', type="submit", description='submit'))
      
      





Textbox ナヌザヌからテキスト入力を受け取るおよびButtonフォヌムを送信するに加えお、Formモゞュヌルは、非衚瀺のテキスト入力を受け取るためのパスワヌド 、盞互排他的なドロップダりンリストを受け取るためのDropbox 、 Radiotoがいく぀かのオプションから盞互に排他的な入力を受け取るなど、いく぀かの他のフォヌム芁玠も提䟛したす、およびチェックボックス -指定されたオプションからのバむナリ入力の遞択。 これらの芁玠はすべお非垞に簡単に実装できたすが、フォヌム芁玠はプログラム芁件に埓っおのみ遞択する必芁がありたす。



web.pyを䜿甚しおフォヌムを実装する堎合、Webペヌゞはフォヌムが送信されるたびにPOSTメ゜ッドを実行する必芁がありたす。 次のテンプレヌトファむルのフォヌムの実装でわかるように、フォヌム送信メ゜ッドを明瀺的にPOSTずしお宣蚀しおいたす。



 $def with(form, i) <form method="POST"> $:form.render() </form>
      
      





おわりに



.



参照資料



  1. Python-Arduino.
  2. , Arduino.
  3. Python , Arduino.
  4. Subnetwork.
  5. web.py templating system.



All Articles