ã¯ããã«
ç§ã®åºçç©[1,2,3]ã§ã¯ãã»ã³ãµãŒãã§ãŒã³ã®è©³çŽ°ã説æãããŠããŸã-Python Arduinoã€ã³ã¿ãŒãã§ã€ã¹ã å·¥æ¥çç£ã®å®éã®æ¡ä»¶ã§ã¯ãã»ã³ãµãŒã¯ãäºãããã ãã§ãªãã枬å®æ å ±ã®éäžåŠçãå®è¡ãããå Žæãããããªãã®è·é¢ã«é 眮ãããŸãã ååã«éçºããããããã¯ãŒã¯æè¡ã䜿çšããŠãã³ã³ãã¥ãŒã¿ãŒLANãä»ããŠã»ã³ãµãŒããæ å ±ãéä¿¡ããããšã¯è«ççã§ãã ãã®åºçç©ã¯ãèªå® ã§Arduinoã䜿çšããŠãããã¯ãŒã¯ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããã³æ§æããããã®æŒç¿ã®ã¹ã¿ã€ã«ã§æžãããŠããŸãã
åé¡ã®å£°æ
- Arduino Ethernet Shieldæ¡åŒµæ©èœãåããArduino Ethernetã©ã€ãã©ãªã䜿çšããŠãWebãµãŒããŒãäœæããŸãã
- èªå® ã®ã³ã³ãã¥ãŒã¿ãŒãããã¯ãŒã¯ã䜿çšããŠArduinoãžã®ãªã¢ãŒãã¢ã¯ã»ã¹ãäœæããŸãã
- æšæºã®Arduinoã®äŸã䜿çšããŠãWebãµãŒããŒã䜿çšããŠæ¹¿åºŠããã³ã¢ãŒã·ã§ã³ã»ã³ãµãŒãæäŸããŸãã
- Pythonã䜿çšããŠWebã¢ããªã±ãŒã·ã§ã³ãéçºããŸãã
ã¿ã¹ã¯ã解決ãã段é
- Arduinoãšã€ãŒãµãããã·ãŒã«ãã䜿çšããããã®ããŒããŠã§ã¢ãèšèšããã³æ§ç¯ããŸãã
- ãµãŒããŒãäœæããããã®éå§ç¹ãšããŠãArduinoéçºç°å¢ããããã©ã«ãã®äŸãå®è¡ããŸãã
- ããŒããŠã§ã¢ããã¹ãããã³ãŒããåå±éããããã«äŸãå€æŽããŸããã
- 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>
ãããã«
.