2017/07这篇博文的目的是从头开始记录如何搭建一个家庭监控环境,那我这里会将思路与可能遇到的问题都一一说明,本篇博客十分适合电子,计算机,通信专业本科生的第一个团队合作项目,实现简单,没有什么代码需要自己写,都是利用已有的开源项目完成,未来的可扩展性丰富。所有涉及到的软件部分都会放在GitHub中。
注:每一天的材料部分都不会重复之前提到过的材料。行内代码部分会有灰色背景。
This is not just another simple howto, please make your own note and try to think about each and every sentences. Keep asking why and how. Furthermore, you may adjust the pace of learning to fit your own plan. Day1 to Day7 are 7 logically independent sections, which doesn’t mean that you need to finish Day1 in just one day.
花销:硬件部分摄像头和wifi模块基本上100RMB能搞定,至于VPS部分看大家个人的情况。
(2020-07-06)
3年过去了,感谢大家在此期间的阅读,点赞和引用。我也在去年底结束了人生中的第一份工作。这篇博文写在工作之前,里面记录的家庭监控是当初为了照顾生病需要长期住院的外公而开发的。还记得外公对我说的最后两个字是“工作”,现在也算还了一小部分愿。特别想在这再说一句,在今年疫情的大背景下,希望大家继续秉持自己的信念和初心,流水不争先,争其滔滔不绝。当然也许注意锻炼身体哈!我们学电子计算机的孩子就是容易长时间在电脑前久坐。
Day 1
材料
- 一个支持刷写 OpenWRT 的路由器,推荐 TP-link WR703N,原因价格便宜(某宝上二手仅需 30 RMB 左右),在下面的教程当中称其为 wifi 模块。
- 一台 Linux 系统电脑,教程使用 Ubuntu 系统。
- 一根网线,用于连接 wifi 模块和电脑。
思路:利用 wifi 模块构建局域网(简称 AP 模式)
- 这一步是所有后续的基础,目的在于熟悉 OpenWRT。OpenWRT 系统自带了一个部署在 192.168.1.1:80 上的网页服务器,Luci。它和日常路由器中的登录管理页面是同一个东西,通过它我们可以很方便得设置路由器的不同功能和参数。但在本项目中,我并不推荐使用 Luci 执行后续相关的操作。原因有二,其一它占据空间很大!我们选用的 TP-link WR703N 的 SquashFS 只有 4 MB,因此每一个 bit 都很关键,所以一个本质是 UI 的软件对于本项目的开发者没有太大的必要。其二,对于像我们这样抱着学习目的的开发者来说,图形化用户界面可能会导致一定程度的依赖性,Luci 能完成的东西越多,我们自己能掌握到的东西就越少。
- AP 模式是以 wifi 模块为路由器,使用 DHCP 协议动态分配 ip 给所有加入的设备。所以第二点就是熟悉计算机网络的最基本内容,如何以一个路由器的视角看局域网。首先路由器作为主角分配 ip,此时默认包括路由器在内的所有设备都在同一个网段当中。这一点虽然看似也一点不重要,但在实际操作中我多次因为没有考虑到两个通信的设备是否在同一网段中,而导致通信失败。问题出现后,我还在到处查看是不是网线没插好,电源是不是不稳定之类的问题。所以希望大家不会重蹈覆辙,再次强调一下,wifi 模块和电脑用网线直连时保证能通信的大前提是:电脑 ip 所处的网段必须和 wifi 模块相同!
步骤
- 刷机。向 wifi 模块刷入不死引导以及 OpenWRT,具体步骤请看我的另一篇博文《OpenWRT刷机入门》。OpenWRT 官方给出 15.05 版本的针对 TP-Link WR703N 的固件可以在官网的这个页面找到,在网页里搜索关键字 703,然后你就可以发现名为 openwrt-15.05-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin 的官方固件。有了官方固件之后就继续参照《OpenWRT刷机入门》继续完成刷机!
- wifi 模块连电脑。用网线将电脑和 wifi 模块连接起来,设置电脑的ip和子网掩码为192.168.1.2/24。这样就保证电脑和 wifi 模块在同一网段下(因为 OpenWRT 默认的 ip 网段就是 192.168.1.XXX,如果之前有更改过默认的 ip 记得给电脑也配上同网段的 ip 即可),可以通过网线直接通信。Ubuntu 系统设置 ip 很简单,在插上网线后,电脑的网线接口(RJ45口)的数据灯闪烁就代表链接成功,接着在 Ubuntu 系统设置->网络中找到有线连接,修改 ipv4 选项卡下面的 ip 即可,更加具体的操作可以参考这里。
- 登录 OpenWRT 系统。Ubuntu 电脑打开 terminal,快捷键是
ctrl+alt+t
。如果已经用 ssh 命令登录过 OpenWRT 系统的就直接ssh root@192.168.1.1
(OpenWRT 刷机后默认的 ip 为 192.168.1.1),然后输入密码即可。如果是第一次登录 OpenWRT 系统,那么需要先telnet 192.168.1.1
用不加密方式登录系统,登录之后键入passwd
命令给 root 用户设置密码,设置好密码之后就必须要用 ssh 的方式登录。这一步使用 ssh 方式登录是为了给我们未来客制化的 wifi 模块提供多一层的安全保障,毕竟没有密码的根用户对于 Linux 而言是极其危险的。 - 使能 wifi。利用
cd /etc/config/
命令进入到 /etc/config/ 目录下,通过ls -altF
查看这个目录下的所有文件,我们使能 wifi 功能需要操作到的文件是 wireless。这是一个默认存在于 OpenWRT 文件系统中的重要配置文件。直接vim wireless
开始编辑。vim 是一款历史久远的命令行文本编辑器,里面的操作习惯和我们当下主流的编辑器相差甚远,需要一定时间的习惯和适应,如果对 vim 还不太熟悉的同学,我推荐在这里可以先暂停一下本项目进度,学习台湾同学编写一篇 vim 学习文档。vim 很难一下子掌握,但是我们不得不用它,因为在 TP-link WR703N 的 OpenWRT 中并没有给我们提供其他更好的编辑器。还有一个原因,它虽然“老”,但是特别优秀,快捷键的设置考虑到了方方面面,简而言之就是开发者的利器!了解它的基本内容对于嵌入式开发工作大有裨益。在看台湾同学的文章时,如果你觉得已经知道怎么在 vim 当中编写一个文档,那就回过来继续我们的教程吧。编辑 wireless 的内容其实很简单,里面有一行 option disabled “1”,我们所有要做的内容就是把它删除。除此之外,你还可以在 wifi-iface 部分看到我们的 AP 模式下默认的 ssid 和登录密码。如果需要更换一个具有个性的 ssid 和自己专属的登陆密码也只需要在这里修改即可。保存退出之后,用wifi
命令重新启动 wifi 功能,不久之后你就可以在电脑上搜索到一个名字是 OpenWRT 的 wifi 热点啦!恭喜,这是我们跨向成功的第一小步! - 用你手上的设备去连接这个热点试试吧!连上之后就代表第一天的内容结束了!
进阶
如果你是一名和我一样好奇心很重而且十分谨慎的开发者,并且觉得有必要粗浅了解 /etc/config/wireless 里存在的众多陌生设置,那么请看官方的英文文档!This could not harm you. Read it, my geek friend.
Day 2
材料
- 客制化OpenWRT固件工具:ImageBuilder,单击此处下载。解压在你喜欢的本地目录当中,我们称解压之后的ImageBuilder的目录为A目录,里面应该包含有:include, packages, scripts, target等等的目录以及.config, .targetinfo, Makefile, rules.mk等文件。A目录就是我们之后经常要在里面进行客制化OpenWRT的场所了。
- 支持mjpg格式输出的摄像头一枚,某宝上可以买到,40rmb左右。另外如果自己家有老的摄像头也可以拿来看看是不是支持mjpg输出。请看这个博文,学习一下如何用linux查看usb摄像头的基本信息,看看你的老摄像头是不是支持mjpg。这里必需要支持mjpg的原因是,首先jpg格式的图片是压缩过的图片,用的压缩算法又很经典,所以用mjpg传输图像要省流量,但是mjpg的压缩是需要很大计算量的!所以如果摄像头不支持mjpg的输出,只能靠wifi模块的CPU去进行格式转换,那就呵呵了,算死这个CPU,真的会算爆它的,因为我们选用的设备额定工作温度为0到40摄氏度。所以安全起见,实在没有mjpg的摄像头,那还是先停一下实战,买一个再说。
思路:在局域网中开启mjpg-streamer服务,并用其他加入该局域网的设备查看live video
- Mjpg-Streamer是一