###### tags: `NAGOYA-BOOST`
# 【発表用】WEBサーバー経由LED&サーボモーター遠隔制御
## 概要

## 動画
<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>
```