用php来控制树莓派的GPIO

首先我们需要安装wiringPi,具体步骤如下:

1
2
3
4
5
6
7
sudo apt-get install git-core
sudo apt-get update
sudo apt-get upgrade
git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin
./build

安装成功之后执行

1
gpio readall

如果显示如下图就代表安装成功:

然后我们插入一个LED在P1口(严格意义上来说是应该给LED接限流电阻的,220欧姆):

根据GPIO的定义呢,我们可以知道GPIO .1口在wiringPi中对应的口是1:

然后我们在终端中输入如下命令:

1
2
gpio mode 1 OUTPUT
gpio write 1 1

其中第一句话是定义引脚1输出,第二句话是给引脚1输出1(高电平) 我们可以看到灯会亮.

如果我们再输入

1
gpio write 1 0

就能看到灯熄灭了. 好了,我们学会了怎么去控制灯的亮和灭.接下来就应该去通过php来控制了. 首先需要在树莓派上装好php,apache2.

1
2
sudo apt-get install apache2
sudo apt-get install php5

然后访问你的树莓派的IP地址,如果出现It works则代表你安装成功了. 由于apache默认目录在/var/www/,如果你像我一样不习惯你可以按照以下步骤将路径改到/home/pi/www/

1
sudo nano /etc/apache2/sites-enabled/000-default

DocumentRoot 就是apache2的默认目录,我改成了/home/pi/www,Ctrl+X再Y回车保存. 重启apache2服务

1
sudo /etc/init.d/apache2 restart

目录就成功的改好了.

然后我们到/home/pi/www目录下新建一个index.php

1
2
cd /home/pi/www
nano index.php

php的内容也很简单,让灯闪一下吧.

1
2
3
4
5
6
7
<?php
$pin = 1;
system("gpio mode $pin OUTPUT");
system("gpio write $pin 1");
system("gpio write $pin 0");
echo "blink~";
?>

然后我们去访问树莓派的IP地址,会发现灯闪了一下.

pi.zip

上面是我写的一个三个网页,index.php是主页,通过ajax方式实现后台访问php,control.php是控制GPIO的php,访问方式是http://192.168.0.107/control.php?pin=1&state=1 还有一个blink.php就是闪一下.

这是control的代码:

1
2
3
4
5
6
7
<?php
$pin = $_GET['pin'];
$state = $_GET['state'];
echo "pin:$pin, state:$state";
echo system("gpio mode $pin OUTPUT");
echo system("gpio write $pin $state");
?>

这里是index.php对control.php发送命令的代码(部分),

1
2
3
4
5
6
7
8
9
10
11
12
13
<script type="text/javascript">
function light(state)
{
xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET","/control.php?pin="+$("#io").val()+"&state="+state,true);
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4)
if(xmlhttp.status==200)$("#returndata").html(xmlhttp.responseText);
}
xmlhttp.send();
}
</script>

然后实际上你看到的网页是这个样子:

通过点击不同的按钮就可以实现远程控制灯的亮灭了. 同样在手机上也可以控制: