BPI-R1+QQ制作智能家居控制

作者: PokeBox
上传时间为: 2014-11-14 02:46 PM
2014-11-14
阅读:

前些天申请到了BPI_R1开源智能路由器,折腾了几天,现在终于把我的智能家居项目放到上面运行成功了。下面来详解一下~

材料准备:

BPI_R1路由器

4G以上U盘或存储卡+读卡器

8GTF卡

1A以上电源

BPI_R1安卓或openwrt镜像

首先,先在8GTF卡里烧入镜像,这里就不多做解释,如果烧的是安卓镜像我们使用的其实也只是openwrt那块的功能。

然后,再在U盘或读卡器烧写Banana Pi的Raspbian镜像,或者其他带有debian的镜像也可以,烧写好后最好能先在香蕉派或者R1上运行,然后使用raspi-config的第一个选项对磁盘扩充,不然就白白浪费那么多的磁盘空间了。

镜像都弄好后,插上TF卡上电,配置好网络,确保能连接到网络,再用ssh连接BPI_R1,IP地址如果你没有修改的话默认是10.0.0.1,修改了你就自己重新设置,我是改成了192.168.1.3,避免和我现有的2个路由器地址冲突,又保证了在同一个局域网内。

然后,插上烧写了Raspbian镜像的U盘,在ssh上建立一个空文件夹,并把U盘挂载到那个文件夹下。比如:

mkdir -p /mnt/Raspbian		##在/mnt目录下建立一个Raspbian文件夹
mount /dev/sda2 /mnt/Raspbian	##把烧有Raspbian镜像的磁盘第二个分区挂载到刚建立的文件夹里
ls /mnt/Raspbian
挂载后可以使用ls来查看挂载是否成功。

继续,使用chroot命令切换系统的运行环境到Raspbian里

chroot /mnt/Raspbian/ bash	##切换到Raspbian系统里,并运行bash解释器
这样你就可以使用Raspbian里的命令行了。

注意:因为是直接切换到系统里,一切都没有初始化,所以这时候直接运行命令行是会不正常的,因为一些特殊目录下是空的,所以我们需要先把系统挂载,把tmp、proc、dev等设备映射,这样才能正确的使用系统。

因为/etc/fstab里已经写了目录的配置,所以我们只需要直接读取这个配置镜像挂载就可以,命令如下:

mount -a
可能会弹出找不到mmcblk0p2的提示,这是因为我们是从一个现有系统上接U盘挂载的,所以设备是sda2,并且用chroot到这个系统里,dev里初始化后当然不会有这个设备,因为这里的一切都相当于虚拟的。当然这并不影响我们工作,因为我们挂载sda2其实就相当于mmcblk0p2设备了,因为那就是存储卡的第二个分区。

然后我们先更新一下系统,建议更新前先修改一下软件源,不然下载速度可能会很慢的……

apt-get update
apt-get upgrade
然后,准备好之前写好的QQ机器人代码,在Windows上建立FTP或者http服务,把代码放上去,然后下载它或者之前先把源码放到Raspbian磁盘的boot分区,然后挂载它复制过去,再或者就再插个U盘,把代码复制过去。

为什么要这样做?因为chroot的系统貌似没法发布,只能接收。也就是说,只能在机器上下载……不知道为何,openwrt的ssh貌似不支持sftp服务。

wget http://你发布了http服务的电脑的IP地址/源码所在位置
下载好源码,解压,运行。

##################################################################################

下面,是关于QQ做智能家居的,上面的前奏略长~

其实, 要在智能设备上使用QQ做智能机器人并不困难,虽然QQ没有开放API,但是我们可以使用webQQ或者3GQQ。webQQ可以群发,可以发图片,功能上比较多,但是代码处理起来也更困难。而3GQQ则相对容易,但是功能也简单,只能发文字消息,并且不支持群消息。但是作为智能家居控制来说,3GQQ的功能已经足够了,并且处理难度也小,便于在嵌入式设备上运行。

处理思路:

1.使用wget下载3GQQ页面,因为在下载的同时你提交的地址其实就是上传了你的消息内容。

下面是我的QQ机器人的关于登录上的变量配置,通过组合这些地址来进行登录和获取、发送消息

TIZ='<a href="http://pt.3g.qq.com/s?aid=nLogin3gqqbysid&3gqqsid='">http://pt.3g.qq.com/s?aid=nLogin3gqqbysid&3gqqsid=...</a> ##登录地址
HQDZ="<a href="http://q32.3g.qq.com/g/s?aid=nqqChat&g_f=1660&sid=" "="">http://q32.3g.qq.com/g/s?aid=nqqChat&g_f=1660&sid=...</a> ##获取消息 &u=要获取的对方Q号

就比如你在百度的时候,在搜索框输入要搜索的内容,点击百度一下后你会发现你的地址栏上显示的地址就包含了你填写的搜索内容。如果你手动修改地址栏上的那个内容再重新打开那个地址,显示到的页面就是你重新修改的内容搜索到的结果。

2.分析3GQQ页面,使用grep命令初步锁定消息位置,用sed、awk等命令来抓取页面上的消息。

3.抓取到消息后,用判断或选择语句来处理消息,执行相关动作,最后再用wget返回消息处理结果。

比如我们从页面上抓取到了“你好”的消息,然后我们就可以利用case选择语句来处理这个消息。

read -p "输入消息内容:" A		##模拟获取到的页面消息,把消息放到变量A
case $A in			##多项选择命令,如C语言的switch
你好)				##如果输入的是 你好
  echo "hi,我是BPI-R1!"	##输出hi,我是BPI-R1!
;;
我是*)				##如果是任何以 我是 开头的消息
  echo "很高兴认识你~"
;;
*)				##如果上面的都不是
  echo "oh,抱歉,我不知道你在说什么&hellip;&hellip;"
;;
esac				##结束选择语句

嗯,大概思路就是这样。因为现在R1还没有关于GPIO的程序资料,所以对外部控制现在暂时只能通过串口和单片机通讯连接,利用单片机来控制其他的器件。

相关经验
全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示