继上次文章使用树莓派(Raspberry Pi)实现智能家居(2/4)初步介绍了如何使用树莓派CLI(命令行)家里的简易电器进行控制之后,这篇文章将会进阶介绍一下,如何使用网页和手机APP对家里电器进行控制,实现智能家居。
其实原理上也并不是很难,大致上就是编写一个简单的HTTP页面,然后将页面上的点击事件触发系统调用其CLI命令,CLI命令对红外发射器的开和关进行操作;对于手机APP来说,也是在简易界面的基础上,将按钮和HTTP链接进行关联,即在手机APP上点击这个按钮,等同于用手机访问了某个URL,URL本身通过PHP来触发系统的CLI命令。
通过HTTP网页来控制家电
首先安装LNMP(Linux,Nginx,Msql,PHP)作为基础的HTTP环境
sudo apt-get install mysql-server mysql-client nginx php5 php5-fpm php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps0 php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
配置/etc/nginx/nginx.conf,限定线程数和开启gzip支持,gzip开启后将大幅降低传输html的流量占用
worker_processes 1;
worker_connections 256;
gzip on;
gzip_disable “msie6″;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
配置php
修改/etc/php5/fpm/php.ini,将
cgi.fix_pathinfo=1改为
cgi.fix_pathinfo=0
配置/etc/nginx/sites-avaliable/default,将大部分行前面的#注释符去掉
root /var/www/html ; #站点存储位置
index index.php index.html index.htm; #加入index.php为默认页面
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
#开启php解析,使用php-fpm作为Fastcgi通信模块
这个地方挨踢小茶调试了蛮久,WEB一直没有成功运行php页面,后来加上了fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;才生效。所以如果想测试php是否生效可用,可以在/var/www/html下创建phpinfo.php文件,内容如下
// Show all information, defaults to INFO_ALL
phpinfo();
?>
然后打开页面http:///phpinfo.php就可以看到一些关于主机和php的信息。如果这个页面可以显示正常则说明PHP和HTTP安装是成功的。否则,还需要重新对HTTP,PHP配置进行检查。
因为HTTP默认使用www-data这个用户来对主机进行操作,这个用户默认无法执行大多数CLI的权限(包括本文需要用到的irsend这个命令),因此需要赋予www-data这个用户可以使用irsend这个命令的root权限。
编辑/etc/sudoers文件(可能这个文件默认是不能编辑的,如果是这样,可以先用sudo +w /etc/sudoers赋予该文件写入的权限),再最后一行加入以下代码。
www-data ALL=NOPASSWD: /usr/local/bin/irsend
编写cmd.php, 保存在/var/www/html下。该文件为本文最关键的文件了,这个文件主要是用php来调用系统CLI的irsend命令,这样子任何网页只需要调用cmd.php即可红外发射器进行操作,控制家电了!
$cmd = $_POST['cmd'];
if(!$cmd){
$cmd = $_GET['cmd'];
}
$device = $_POST['device'];
if(!$device){
$device = $_GET['device'];
}
if($cmd&$device){
$cmdline = "/usr/bin/sudo /usr/bin/irsend SEND_ONCE ".$device." ".$
cmd ;
echo($cmdline);
$output = shell_exec($cmdline);
echo($output);
}
?>
这个时候,你就可以在客户端上使用http:///cmd.php?cmd=KEY_ENTER&device=xxx来控制你的家电啦!(其中,KEY_ENTER和xxx需要根据自己的情况进行相应的替换,请参考上一篇文章)
进阶
这个时候你可以写一个简单的Web界面,包含一些描述和开关按钮,只需要把开或关的按钮链接到上述的URL,就可以利用网页来对家里的简易电器进行开和关的操作了!本文就不做太细致的描述了。
利用手机APP对家里电器进行控制
利用手机APP控制家电基本原理和上述的差不多,只是GUI从Web网页变成了手机APP。然而如果你像挨踢小茶一样没有太多手机APP的开发经验的话,也可以利用别人开发好的来使用。比如苹果上可以使用iControl Web,安卓也可以使用类似的软件。之后,根据软件介绍中的,对配置文件进行定义,比方说第一页的Light开关的on键,是链接到http:///cmd.php?cmd=KEY_ENTER&device=xxx的,这样就可以了。
挨踢小茶也录了一个简单的视频,抛砖引玉了,前面一部分拍得比较暗,请不要见怪!
http://v.youku.com/v_show/id_XMTM4ODE5ODY0MA==.html?from=y1.7-1.2
后面将会在使用树莓派(Raspberry Pi)实现智能家居(4/4)中给大家介绍,如何使用语音来控制家里电器(类似Siri)!