---
# System prepended metadata

title: 【発表用】WEBサーバー経由LED&サーボモーター遠隔制御
tags: [NAGOYA-BOOST]

---

###### 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>

```
