サーボモータとLED の制御コマンドを利用して今回はブラウザ経由で動くくだらないおもちゃを作ってみます。

こんなやつです(笑)

legopiko
apacheとPHPとシェルで実装します。

apt-get で apacheとphp をインストールします。

$ sudo apt-get install apache2
$ sudo apt-get install php5

apache経由でsudoができるようにします。(検証用なので公開する際は真似しないでください。)

 $sudo nano /etc/sudoers

 

一番 下に以下を追加し保存します。

 www-data ALL=(root) NOPASSWD: ALL

これでWebサーバの準備が整いました。

次に スクリプトの準備です。
以下の4つの簡単なシェルを用意して適当な場所に置きます。(今回は全部/var/www/htmlに置きました。)

piko.sh(モータ制御1)

#/bin/sh
echo 2=75% > /dev/servoblaster

pata.sh(モータ制御2)

#/bin/sh
echo 2=95% > /dev/servoblaster

pika.sh(LED制御(点ける))

#/bin/sh
echo 26 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio26/direction
echo 1 >/sys/class/gpio/gpio26/value

kesu.sh(LED制御(消す))

#/bin/sh
echo 0 >/sys/class/gpio/gpio26/value
echo 26 > /sys/class/gpio/unexport

rendo.sh(モータとLED制御の両方 5回繰り返し)

#/bin/sh
echo 26 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio26/direction
for i in `seq 1 5`
do
echo 1 >/sys/class/gpio/gpio26/value
echo 2=75% > /dev/servoblaster
sleep 1
echo 0 >/sys/class/gpio/gpio26/value
echo 2=95% > /dev/servoblaster
sleep 1
done
echo 26 > /sys/class/gpio/unexport

次にhtmlファイルを作成します。(/var/www/index.htmlを書き換えてます)
シャットダウンやリブートもブラウザ経由でできると楽なので実装します。

<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />
<meta http-equiv=”Content-Script-Type” content=”text/javascript” />
<meta http-equiv=”Content-Style-Type” content=”text/css” />
<script type=”text/javascript”>
//<![CDATA[
function createXMLHttpRequest() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
} else {
return new ActiveXObject(“Microsoft.XMLHTTP”);
}
}function entryClickEvent(id, handler) {
var obj = document.getElementById(id);
if (window.addEventListener) {
obj.addEventListener(“click”, handler, false);
} else {
obj.attachEvent(“onclick”, handler);
}
}function doCommand(command) {
var request = createXMLHttpRequest();
request.open(“POST”, “command.php”, true);
request.setRequestHeader(“Content-Type”, “application/x-www-form-urlencoded”);
request.send(“cmd=” + encodeURIComponent(command));
}function doCommandConfirm(command)
{
ret = confirm(“本当に実行してもよろしいですか?n” + command);
if (ret == true) {
doCommand(command);
}
}function command1() {
doCommand(“sudo sh /var/www/html/piko.sh”);
}
function command2() {
doCommand(“sudo sh /var/www/html/pata.sh”);
}
function command3() {
doCommand(“sudo sh /var/www/html/pika.sh”);
}
function command4() {
doCommand(“sudo sh /var/www/html/kesu.sh”);
}
function command5() {
doCommand(“sudo sh /var/www/html/rendo.sh”);
}function command6() {
doCommandConfirm(“sudo shutdown -r now”);
}
function command7() {
doCommandConfirm(“sudo shutdown -h now”);
}
window.onload = function() {
entryClickEvent(‘btn1’, command1);
entryClickEvent(‘btn2’, command2);
entryClickEvent(‘btn3’, command3);
entryClickEvent(‘btn4’, command4);
entryClickEvent(‘btn5’, command5);
entryClickEvent(‘btn6’, command6);
entryClickEvent(‘btn7’, command7);}
//]]>
</script>
<title>pikopikoLegoSystem</title>
</head>
<body>
<center>
<h1>ピコピコ レゴ人形システムVer0.01</h1>
<hr>
<br>
サーボモータ
<br>
<input type=”button” id=”btn1″ value=”開ける” style=”width:20%; height:20%; font-size:30px” />
<input type=”button” id=”btn2″ value=”閉める” style=”width:20%; height:20%; font-size:30px” />
<br><br>
LED
<br>
<input type=”button” id=”btn3″ value=”光る” style=”width:20%; height:20%; font-size:30px” /><input type=”button” id=”btn4″ value=”消す” style=”width:20%; height:20%; font-size:30px” />
<br><br>
<input type=”button” id=”btn5″ value=”モータLED連動” style=”width:30%; height:20%; font-size:30px” /><hr>
システム制御
<br>
<input type=”button” id=”btn6″ value=”リブート” style=”width:15%; height:5%; font-size:20px” />
<input type=”button” id=”btn7″ value=”シャットダウン” style=”width:15%; height:5%; font-size:20px” />
</body>
</html>

次にhtml からインプット情報を実行する以下のようなphpファイルをindex.htmlと同じ場所に作ります。

<?php
$command = filter_input(INPUT_POST, “cmd”);
if ($command) {
shell_exec($command);
}
?>

これで実装完了です。

あとは前回の配線プラスレゴでてきとうに組み上げて
ブラウザからアクセスします。無線LAN内であればスマホ経由でもアクセス可です。

http://IPアドレス/

以下のようなページが表示されます。

lego_piko_html
各ボタンを押すと制御可能です。

今回は何の役にも立たないシステムですが(笑)、、
この原理を利用し色々な物理的な制御を伴うシステムの構築が可能と思っております。