因为近两年内有家装的需求,考察了市面上的智能家居方案,要么不靠谱看不上眼,要么价格高得离谱。想着自己原来也搞过一段时间单片机,Linux 靠着 Google 和 StackOverflow 也能解决一些问题。于是开始尝试 Arduino 和 RPi 在家居控制方面的各种实践。总结一些想法给大家作为参考:
- RPi 和 Arduino 两个完全不同运算水平的平台。毕竟 RPi 使用的是一颗运行在 700MHZ 的 ARM11 CPU;而常用的 Arduino UNO 则是一颗在工业控制领域常见的 8-bit ATmega328,最高运行频率仅 20MHz。
- RPi 可以运行完整的操作系统,如 Debian 等常见 Linux 发行版 – RPi Distributions。这意味着你可以使用你熟练的语言(如 Python、Java)和熟悉的库来进行开发,同时后台运行多个进程也毫无压力。而 Arduino 作为一款真正传统意义上的单片机系统,一次只能运行一个你烧进去的程序,功能也相对单一。
- RPi 自带的接口比较全面,USB-host、RJ45、HDMI、SD读卡器等常用接口都有;而 Arduino 比较单纯,与外部设备打交道需要另外采购接口板。
- RPi 因为是一个相对完整的「电脑」,其成本肯定比 Arduino 高,目前 B 版在淘宝普遍 280 元左右;而常用的 Arduino UNO 40 元搞定。
- RPi 拥有更完整的操作系统,这也意味着每次复电后所需的启动时间很长,而且还不能保证重启后你写的相关服务都能正常启动(Linux 大拿可能会觉得是我技术渣);但 Arduino 因为用途单一,重启速度超快,而且重启结束后立即就在运行你让它做的事。
综合考虑后,我的选择是:
- RPi 作为家居中央控制服务器,负责与互联网的通信、采样存储 Arduino 上报的状态数据、处理数据量大的工作(如音频、视频、图片相关)、提供 API 给 iOS 及 Android 以方便用手机控制家居。RPi 与 Arduino 间通过以太网和 Zigbee 进行数据传输。
- Arduino 负责家居传感器采样,如光线强度、温度、人体红外感应等。有的模块比较独立,比如人体感应的夜间走廊灯,单个 Arduino 可以自己实现监控加控制,就不需要上报数据给 RPi 了。需要上报和接收数据的 Arduino ,通过 Zigbee 及以太网和 RPi 进行通信。
这样的好处就是投资小,而且把计算任务都放在了 RPi 上,算是物尽其用。