###### tags: `NAGOYA-BOOST` # 【発表用】WEBサーバー経由LED&サーボモーター遠隔制御 ## 概要 ![](https://i.imgur.com/EnifzmK.png) ## 動画 <iframe width="560" height="315" src="https://www.youtube.com/embed/YYzc2ExdiKo" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> ## 仕組み WEBサーバーソフトウェアであるlighttpd(Apache)を使用して、 スマホやPCのWEBブラウザからラズベリーパイを制御する。 ラズベリーパイがWEBサーバーとなりクライアント(スマホWEBブラウザ)からリクエストを受け付ける。 (今回は同一ネットワーク内限定だが、外出先などの外部からの制御も可能) ## 応用例 - 外出先から自宅の機器の操作 - ネットワークストレージ など ## コード python ```python:doStuff.py #!/usr/bin/pythonCGI import RPi.GPIO as GPIO from flup.server.fcgi import WSGIServer import sys, urlparse import time #GPIO.setmode(GPIO.BOARD) GPIO.setmode(GPIO.BCM) GPIO.setup(21, GPIO.OUT) GPIO.setup(11, GPIO.OUT) GPIO.setup(20, GPIO.OUT) GPIO.setup(4, GPIO.OUT) def app(environ, start_response): start_response("200 OK", [("Content-Type", "text/html")]) i = urlparse.parse_qs(environ["QUERY_STRING"]) yield (' ') # flup expects a string to be returned from this function if "q" in i: if i["q"][0] == "r": GPIO.output(21, True) # R Turn it on elif i["q"][0] == "g": GPIO.output(11, True) # G Turn it on elif i["q"][0] == "b": GPIO.output(20, True) # B Turn it on elif i["q"][0] == "s": GPIO.output(21, False) # R Turn it off GPIO.output(11, False) # G Turn it off GPIO.output(20, False) # B Turn it off elif i["q"][0] == "m": #GPIO.output(11, True) # B Turn it on #GPIO.output(4, True) # p = GPIO.PWM(4, 50) p.start(0.0) p.ChangeDutyCycle(2.5) time.sleep(1.0) for degree in range(-90, 91): dc = 2.5 + (12.0-2.5)/180*(degree+90) p.ChangeDutyCycle(dc) time.sleep(0.01) p.ChangeDutyCycle(0.0) WSGIServer(app).run() ``` html ```html <html> <head> <title>Hello from the Pi</title> <script src="//ajax.googleapis.com/ajax/libs/prototype/1.7.1.0/prototype.js" type="text/javascript"> </script> </head> <body> <h1>LED Controll from the Raspberry Pi</h1> <form> <input type="button" value="R_ON" onclick="go('r')" style="font-size:200%;"> <input type="button" value="G_On" onclick="go('g')" style="font-size:200%;"> <input type="button" value="B_On" onclick="go('b')" style="font-size:200%;"> <input type="button" value="Off" onclick="go('s')" style="font-size:200%;"> <br> <input type="button" value="Servo" onclick="go('m')" style="font-size:200%;"> </form> <script type="text/javascript"> function go(qry) { new Ajax.Request('doStuff.py?q=' + qry,{method: 'GET'} ); } </script> </body> </html> ```