本帖最后由 tll 于 2014-2-10 19:44 编辑
cubieboard做智能家居需要无线与电脑、Mac笔记本、Arduino、TP-LINK 703N交互,花的钱数大于1500,那是因为自己没经验啊……现在在这里给大家经验,大家就不用花那么多钱了。
本帖已经进入投票了,大家可以去投本帖哦!
想做智能家居,以下是我使用的方法:
iPhone手机的Siri
|wifi
Cubieboard
|网线
TP-Link 8xxN(我的主路由,不能刷openwrt)
|网线
TP-Link 703N(刷了openwrt的迷你路由)
|通过USB转串口
Arduino
|红外发射
电视 机顶盒
=============================
我本来有个703N,用这个测试成功,后来坏了,后来买了个水星改的703N,配置比703N还好
开始~
材料:
红外发射LED(这个没分型号,一般是5MM 3MM的) 红外接收管(这个有分型号,我买的是能用的,大家自己上网查查吧)
Arduino(我在智能家居上用的是mega,实际上mega太大了,放在机顶盒那边好像要掉下去一样,大家还是买我的葫芦duino吧,算是帮助我继续开发)
两个路由,一个型号随便,一个要能刷openwrt的,推荐大家买703N,便宜,再不然就是DIR-505,内存和flash比703N大,比703N贵几十块,别说刷dd-wrt,那个rootfs无法写入,重启东西没了
一台iOS device,需要有siri
电视、机顶盒遥控器(采集编码用)
电视、机顶盒(。。。)
Cubieboard(建议买cb1,cb2的话我弄siriproxy老不成功)
还有电源适配器若干,电线若干……
先弄Arduino红外,看:
http://diy.elecfans.com/P/166/752
里面引号改改即可,采集好编码以后呢,往arduino里面放这个程序(编码换成你的):- #include <IRremote.h> // 引用 IRRemote 函式库
- IRsend irsend; // 定义 IRsend 物件来发射红外线讯号
- void setup()
- {
- Serial.begin(9600);
- }
-
- void loop(){
- char rd = char(Serial.read());
- if (rd == '1'){
- irsend.sendNEC(0xAF5E817, 32);
- Serial.println("TV open!");
- //Open TV
- }
- if (rd == '2'){
- irsend.sendNEC(0x12EEA857, 32);
- Serial.println("Up!");
- //Up BTN
- }
- if (rd == '3'){
- irsend.sendNEC(0x12EE6897, 32);
- Serial.println("Down!");
- //Down BTN
- }
- if (rd == '4'){
- irsend.sendNEC(0x12EE48B7, 32);
- Serial.println("OK!");
- //OK BTN
- }
- if (rd == '5'){
- irsend.sendNEC(0x12EE28D7, 32);
- Serial.println("Left!");
- //Left BTN
- }
- if (rd == '6'){
- irsend.sendNEC(0x12EEE817, 32);
- Serial.println("Right!");
- //Right BTN
- }
- if (rd == '7'){
- irsend.sendNEC(0x12EEC03F, 32);
- Serial.println("Mute!");
- //mute BTN
- }
- if (rd == 'a'){
- irsend.sendNEC(0x12EE708F, 32);
- Serial.println("0");
- //mute BTN
- }
- if (rd == 'b'){
- irsend.sendNEC(0x12EE807F, 32);
- Serial.println("1");
- //mute BTN
- }
- if (rd == 'c'){
- irsend.sendNEC(0x12EE40BF, 32);
- Serial.println("2");
- //mute BTN
- }
- if (rd == 'd'){
- irsend.sendNEC(0x12EE609F, 32);
- Serial.println("3");
- //mute BTN
- }
- if (rd == 'e'){
- irsend.sendNEC(0x12EE20DF, 32);
- Serial.println("4");
- //mute BTN
- }
- if (rd == 'f'){
- irsend.sendNEC(0x12EEA05F, 32);
- Serial.println("5");
- //mute BTN
- }
- if (rd == 'g'){
- irsend.sendNEC(0x12EEE01F, 32);
- Serial.println("6");
- //mute BTN
- }
- if (rd == 'h'){
- irsend.sendNEC(0x12EE10EF, 32);
- Serial.println("7");
- //mute BTN
- }
- if (rd == 'i'){
- irsend.sendNEC(0x12EE50AF, 32);
- Serial.println("8");
- //mute BTN
- }
- if (rd == 'j'){
- irsend.sendNEC(0x12EED02F, 32);
- Serial.println("9");
- //mute BTN
- }
- }
复制代码 烧录好以后接上发射LED,然后打开串口工具,输入1 2 3这些数字和字母看看能不能用
如果可以,继续~
然后开703N,直接连接电脑,刷openwrt就不用我说了吧,很简单的
刷好以后,telnet一下路由器,连上网,ip改成192.168.1.4,安装usb驱动和usb的pl2303和cp2102驱动
好了~接下来要建http通信了
哦,对了可以顺便先把cubie的ip设为192.168.1.105,也是固定,我是在路由器里面加了mac地址与ip的绑定,你也可以这样防止冲突
记得修改root密码……修改完后telnet将爆掉,请用ssh
执行:- mkdir /var/www/control/cgi-bin -p
- opkg install nano
复制代码 安装个nano,我喜欢的编辑器
在cgi-bin里面新建send.cgi,写上:- #!/bin/sh
- echo "Content-Type:text/html"
- echo ""
- eval `/www/control/cgi-bin/proccgi.sh $*`
- echo $FORM_text
- echo "$FORM_text" >> /dev/ttyUSB0
复制代码 新建proccgi.sh(这个是我从网上cp的),大家搜索这个sh即可,时间不够就不放地址了
好了后把葫芦板接上703N(转换器用的是pl2303芯片【旧】或cp2102芯片【新】),先说一下,arduino mega是FTDI的串口芯片,直接驱动的话在/dev里叫ttyATH0,而我引出了tx rx vCC gnd到ttl转usb板(pl2303芯片的)
然后在rc.local里加:- uhttpd -p192.168.1.4:81 -h /www/control
复制代码 Then,reboot your device.
接着呢,访问http://192.168.1.4:81/cgi-bin/send.cgi?text=1
如果电视开了,那么你成功了一半
别忘了刷新一下把电视关掉……
至此703N设置完成
接下来玩siriproxy,看我帖子
http://cn.cubieboard.org/forum.php?mod=viewthread&tid=860&extra=
然后以后再写
==以下是老信息==
8 21,又把siriproxy弄好了
加入新浪微博控制器,红外成功
已经花超过1500元了,弄这个真的很花钱啊!!!
然后成功把siri控制电视弄好了,晚上给视频
==========今天无聊焊703N的电路板,把703N给焊坏了…………………………下面作废======================
今天先把703N和arduino的通信弄好了(703N是usb供电,可以用移动电源)
================================Arduino与703N通信=================================
Arduino程序(注释不要管,乱写的):- char a[100];
- boolean ac = false;
- int led= 13;
- // the setup routine runs once when you press reset:
- void setup() {
- // initialize serial communication at 9600 bits per second:
- Serial.begin(9600);
-
- }
- // the loop routine runs over and over again forever:
- void loop() {
- /*while(Serial.available()>0)
- {
- digitalWrite(led, HIGH);
- delay(500);
- digitalWrite(led, LOW);
- delay(500);
- /sprintf(a,"%s%c",a,Serial.read());
- ac = true;/
- }*/
- // print out the value you read:
- /*if(ac&&a!=""){
- Serial.println(a);
- ac = false;
- }*/
- Serial.println("Hello
- ");
- delay(1000);
- }
复制代码 倒数第三句是发送hello<br />到串口,<br />是html里的换行标签
在703N上:
为了让703N也能移动,特地把703N调成无线接收, 收我tp-link 8xxN的wifi,记得要把以太网IP调成192.168.0.1,否则会冲突,把wifi的ip调成192.168.1.4而不是动态以便使用,另外请记得把防火墙里的入站设置给设为接受
如果没安装pl2303驱动要先安装,- opkg install kmod-usb-serial-pl2303
复制代码 and:- uhttpd -f -h /web -r OpenWrt -x /cgi-bin -p 81
复制代码 /web/cgi-bin/check.cgi- #!/bin/sh
- echo "Content-type: text/html"
- echo ""
- echo ""
- echo "data from arduino:
- "
- cat /tmp/tty
- echo ""
- echo ""
复制代码 /web/cgi-bin/clear.cgi- #!/bin/sh
- echo "Content-type: text/html"
- echo ""
- rm -rf /tmp/tty
- cat /dev/ttyUSB0 > /tmp/tty &
- echo ""
复制代码 然后访问
http://192.168.1.4:81/cgi-bin/init.cgi
是空的
关闭窗口,访问
http://192.168.1.4:81/cgi-bin/check.cgi
得到:- data from arduino:
- Hello
- Hello
- Hello
- Hello
- Hello
- Hello
- Hello
- Hello
- Hello
- Hello
- Hello
- Hello
- Hello
- Hello
- Hello
- Hello
- Hello
- Hello
- Hello
复制代码 每秒arduino给703N发送一次数据,刷新就能看见
======================================================================
|