树莓派论坛

 找回密码
 立即注册

使用手机控制家电

whtech1 发表于 2013-2-2 16:10:46 | 显示全部楼层 |阅读模式
本帖最后由 whtech1 于 2013-2-2 22:54 编辑

心血来潮想通过树莓派对家里的电器进行控制,网上查了不少资料,决定动手一试。首先决定对电暖器开刀,这个电暖器有一个红外的遥控器,可以开关、定时、设定高低档功能,我要做的就是模拟遥控器对其发出指令。初级篇,通过电脑命令行进行控制,高级篇使用手机进行控制。

参照baoxiaozhong的红外接收http://www.shumeipai.net/thread-12265-1-1.html 设置好了红外接收器,然后尝试用相似的方法实现了红外发射器,成功控制电暖器,后续将考虑控制电视,空调等 设备。

初级篇:用电脑来控制电暖器
参照 我的另外一篇,在这里http://www.shumeipai.net/thread-12646-1-1.html

高级篇:通过手机来控制电暖器
  1. 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-ps
  2. php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
复制代码
mysql我没有做优化
配置nginx
先配置/etc/nginx/nginx.conf,需要做的就是限定线程数和开启gzip支持,gzip开启后将大幅降低传输html的流量占用。
  1. worker_processes 1; #只有一个CPU,单进程即可
  2. worker_connections 256; #一般支持100在线连接就达到raspberry pi的极限了
  3. gzip on; #gzip开启取消前面的#让默认设置生效即可
  4. gzip_disable “msie6″;
  5. gzip_vary on;
  6. gzip_proxied any;
  7. gzip_comp_level 6;
  8. gzip_buffers 16 8k;
  9. gzip_http_version 1.1;
  10. gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
复制代码
接下来设置/etc/nginx/sites-avaliable/default ,配置站点属性
  1. root /var/www ; #站点存储位置
  2. index index.php index.html index.htm; #加入index.php为默认页面
  3. location ~ \.php$ {
  4. fastcgi_split_path_info ^(.+\.php)(/.+)$;
  5. fastcgi_pass unix:/var/run/php5-fpm.sock;
  6. fastcgi_index index.php;
  7. include fastcgi_params;
  8. }
  9. #开启php解析,使用php-fpm作为Fastcgi通信模块
复制代码

然后配置php sudo权限,这样php执行命令的时候不需要输入自己的密码
为 nginx,而想透过 PHP 发送irsend,用 root 输入指令 vi /etc/sudoers,
在档案最底加上以下一行:
www-data ALL=NOPASSWD: /usr/local/bin/irsend

在/usr/share/nginx/www/下 编写cmd.php
  1. <?php
  2. $cmd = $_POST['cmd'];
  3. if(!$cmd){
  4. $cmd = $_GET['cmd'];
  5. }
  6. $device = $_POST['device'];
  7. if(!$device){
  8. $device = $_GET['device'];
  9. }
  10. if($cmd&$device){
  11. $cmdline = “/usr/bin/sudo /usr/local/bin/irsend SEND_ONCE “.$device.” “.$cmd ;
  12. echo($cmdline);
  13. $output = shell_exec($cmdline);
  14. echo($output);
  15. }
  16. ?>
复制代码
然后就可以通过http://ip地址/cmd.php?cmd=KEY_UP&device=xxx控制你的设备了。
这里的xxx是可以不同设备的哦。看你前面irrecord里面配置的
当然这种方式操作不方便,和shell操作差不多,所以可以自己做一个html页面,放上若干按钮,每个按钮分别调用cmd.php上面的指令。

这是个简单的例子

index.html

  1. <html xmlns=”http://www.w3.org/1999/xhtml”>
  2. <head>
  3. <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
  4. <meta name=”apple-mobile-web-app-capable” content=”yes”>
  5. <title>智能家庭控制台</title>
  6. <script type=”text/javascript” src=”js/jquary-1.7.1.js”></script>
  7. <script type=”text/javascript”>
  8. var xmlHttp;
  9. //创建XMLHttpRequest对象
  10. function createXMLHttpRequest(){
  11. if (window.ActiveXObject){
  12. xmlHttp=new ActiveXObject(“Microsoft.XMLHTTP”);
  13. }else if (window.XMLHttpRequest){
  14. xmlHttp=new XMLHttpRequest();
  15. }
  16. }
  17. function checkMe(url){
  18. createXMLHttpRequest();
  19. xmlHttp.open(“post”,url,true);
  20. xmlHttp.onreadystatechange=send; //用send函数进行发数
  21. xmlHttp.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded;”);
  22. xmlHttp.send(null);
  23. }
  24. function send(){
  25. //alert(“指令成功发送!”);
  26. }
  27. </script>
  28. </head>
  29. <body>
  30. <div id=”content”>
  31. <div id=”menu_mode”>
  32. <ul>
  33. <li><input type=”button” onclick=”checkMe(‘cmd.php?cmd=KEY_ON&device=heater’)” value=”开/关”/></li>
  34. <li><input type=”button” onclick=”checkMe(‘cmd.php?cmd=KEY_LOW&device=heater’)” value=”低档”/></li>
  35. <li><input type=”button” onclick=”checkMe(‘cmd.php?cmd=KEY_HIGH&device=heater’)” value=”高档”/></li>
  36. <li><input type=”button” onclick=”checkMe(‘cmd.php?cmd=KEY_HIGH&device=heater’)” value=”定时”/></li>
  37. </ul>
  38. </div>
  39. </div>
  40. </body>
  41. </html>
复制代码
然后通过http://ip地址/index.html访问

对于使用iphone或者ipad的用户,还可以把网页快捷方式放到主屏幕,打开就是一个操作界面,是不是很来福啊?

后记:
根据相同的方式,控制机顶盒基本成功,但是有bug,还要继续测试。
TCL电视的遥控器,扫描记录成功,但是发射后电视没有反应,还没找到原因。
空调还没测试,不过之前研究过,它的码比较特别,是N个键组合的结果,所以将来在考虑加入。
其他的遥控器,比如DVD的,接收器有信号输入表示,但是没有去解码。


不过红外控制有个弊端,就是无法知道设备的运行状态,比如说你通过远程试图开启设备,而如果设备之前已经开启,反而将设备关闭了,这大概是目前无法解决的问题吧,只能等到物联网真正普及,设备能够自动上报状态才行。

评分

参与人数 1 +1 收起 理由
树老大 + 1

查看全部评分

树老大 发表于 2013-2-2 16:29:44 | 显示全部楼层
同上一篇较之,更精彩。。。
whtech1  楼主| 发表于 2013-2-2 16:31:44 | 显示全部楼层
树老大 发表于 2013-2-2 16:29
同上一篇较之,更精彩。。。

上篇是集成,该篇是原创。
树老大 发表于 2013-2-2 16:33:14 | 显示全部楼层
whtech1 发表于 2013-2-2 16:31
上篇是集成,该篇是原创。

希望兄弟能整理或者编写些更详细的智能家居方面的教程帖子,或者我可以设立一个专门的“RPI智能家居”版块,让大家都受益。谢谢。
whtech1  楼主| 发表于 2013-2-2 16:36:26 | 显示全部楼层
树老大 发表于 2013-2-2 16:33
希望兄弟能整理或者编写些更详细的智能家居方面的教程帖子,或者我可以设立一个专门的“RPI智能家居”版块 ...

自己摸索太费时间和精力,有自己的本职工作,所以个人不太可能持续产出,所以可以建议大家一起努力。
树老大 发表于 2013-2-2 16:38:04 | 显示全部楼层
是的。需要大家共同努力!智能家居,还是很不错的。
geekr 发表于 2013-2-2 16:43:26 | 显示全部楼层
迟点也自己弄弄家电控制,反正不玩白不玩!
whtech1  楼主| 发表于 2013-2-2 16:45:29 | 显示全部楼层
geekr 发表于 2013-2-2 16:43
迟点也自己弄弄家电控制,反正不玩白不玩!

但是都需要外围的设备,也比较麻烦
mengfeng009 发表于 2013-2-2 22:29:44 | 显示全部楼层
很好谢谢,我也准备看看
linux0ne 发表于 2013-2-3 18:15:53 | 显示全部楼层
哇噢 ,恭喜你了,终于走出了第一步,继续努力。保持联系。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版 | Archiver | 树莓派论坛 ( 粤ICP备15075382号-1 )