阿库娅很不错,现在归你了 (Part 2)

在前一篇中咱介绍了网关应用,初号机的机能看起来有些稚嫩,目前只能做到温度检测,运动检测,远程监控,自动控制,远程控制等功能。其中最引人注目的还要数这个敷衍的传感器节点了。单单是 8051 MCU 就占据了一半面积。不过第一版本就是试验品,本文先来介绍下当前的硬件施工进度,并进行软硬件联合测试。

# 施工标准

完整的体验至少需要准备如下硬件,不完整的体验只需一台带有摄像头的电脑。部分模块桃饱网有,剩下的用面包板凑合下呗(提供 PCB 参考)。

  • Raspberry Pi 4B ×1
  • PI Camera ×1
  • 8051 MCU ×1
  • 1-Wire temp sensor DS18B20 ×1
  • ZigBee CC2530 SoC ×3

# 传感器节点

8051 有存储空间少,处理性能差,耗能高等众多优点,本来是不会选的。不过传感器节点也就读个数据,压箱底的有几块 8051,就直接拿来用了。其他组件还有 ZigBee,传感器和电源。MCU 运行控制程序,处理和保存数据;传感器负责环境参数的感知和转换;ZigBee 负责与其他节点或网关通信,实现指令和数据的双向传输;电源为传感器节点提供额定电压。

# 温度传感器

DS18B20 温度传感器使用 1-Wire 总线协议通信。控制线路需要一个上拉电阻,因为所有器件通过一个三态或漏极开路端口连接到总线。微处理器使用每个设备唯一的 64 位代码识别和寻址总线上的设备。每个设备都有唯一的地址,总线上的设备数量实际上是无限的。

为了确保可靠的数据传输,同一时间只能有一个信号存在于 1-Wire 总线上。数据的传输应该完全符合单总线协议,按照初始化配置、ROM 指令、工作指令的顺序进行操作。

DS18B20 温度传感器定义了读写指令,响应指令和复位指令。除响应指令外,同步信号均由 MCU 产生。所有的指令和数据都是从低位开始发送到高位。

# ZigBee 协议

ZigBee 和 IEEE 802.15.4 经常被混用,但实际上他们是完全不同的概念。IEEE 802.15.4 标准由 IEEE 组织制定和支持。它定义了小区域低功耗无线通信的媒体访问层(MAC)和物理层(PHY)规范。由于没有定义多跳传输,地址分配,和应用层互操作协议,有些通信协议基于 802.15.4,对其进行了一些修改和扩充,例如 6LoWPAN,Tiny O/S、ZigBee 等。

ZigBee 通过建立网络层来支持点对点多跳网络,建立安全层来增强网络安全,还建立了应用层来实现应用程序互操作。传感器节点的 ZigBee 模块使用网状路由,即单播发送。数据包通过 Mesh 路由发送,发送方知道接收方是否收到完整数据。网状路由最多可以经过 30 个节点来传输数据。

咱用的是 DL-LN3X 模块,支持串口通信,只需指定节点的地址和数据,即可发送到目的节点,中间的过程 CC2530 中运行的程序会自动完成。

# 温度采集

温度节点控制程序使用 C 语言实现,程序运行在 8051 MCU 上,如下图,每隔 1s 上传一次温度信息,或者在上位机请求时立即上传温度信息。

# PCB 绘制

PCB 的设计对于最终系统的整体性能和电路设计一样重要。PCB 板形尺寸确定在 50mm*50mm 以内,完成总体布局后,开始放置组件。组件位置是否合理,将直接关系到电路是否可靠。

在 PCB 布局中,先按照功能模块划分区域,然后考虑各模块的相对位置。任何高频模拟信号或高精度数字信号都应该尽可能保持距离,原则上所有敏感区域利用 GND 相互隔离,信号路径尽可能短。

# 测试

# 运行环境

网关的本体是一个 Raspberry Pi 4B,运行 Raspbian Buster,应用基于 Python 开发,使用了大量第三方 Library。根目录下的 requirements.txt 文件记录了所有依赖包,需要使用 virtualenv 和 virtualenvwrapper 工具创建一个新的 Python 3 虚拟环境,执行 pip 命令安装所有依赖包。

$ pip install -r requirements.txt

运动捕捉相关功能使用 OpenCV 实现,PyPi 预编译的 OpenCV 4 可能缺少部分功能(目前够用了),如果你闲得慌呢,下面是编译安装的方法。把 opencv 和扩展库 opencv_contrib 的源代码 Clone 到本地,进入 Python 3 虚拟环境,安装 numpy 和编译工具,使用 CMake 来构建编译配置。

$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
    -D ENABLE_NEON=ON \
    -D ENABLE_VFPV3=ON \
    -D BUILD_TESTS=OFF \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D INSTALL_PYTHON_EXAMPLES=OFF \
    -D BUILD_EXAMPLES=OFF ..

确认配置无误后,输入 make -j4 开始编译,-j4 参数指定 4 个核心用于编译。在 2G 内存的 Raspberry Pi 4B 上,编译大约需要 1 小时,结束后使用 make install 完成 OpenCV 4 的安装。OpenCV 安装在系统的 site-packages 目录中,还需要创建一个符号链接到 Python 3 虚拟环境来使用 OpenCV。

# 数据结构

安装 MariaDB,使用 flask-migrate 恢复数据结构。

$ python manage.py db init
$ python manage.py db migrate
$ python manage.py db upgrade

# 开动了

根目录下的 gate.py 是网关软件的入口文件,使用如下命令启动程序测试外网访问。在生产环境部署时,还需使用 Nginx 反向代理,以提高系统的稳定性和安全性。

$ which python
/home/xxx/umr-dive/venv/bin/python
$ export Env=Dev
$ sudo -E /home/xxx/umr-dive/venv/bin/python gate.py -i 0.0.0.0 -o 80

Enjoy yourself!

# Tips

  • 如果你家没有公网 IP,还需要一个有公网 IP 的云服务器搭建内网穿透服务。
  • 上述操作启动的是测试服务器,生产环境还需使用 Nginx 反向代理。
  • 客户端需支持现代浏览器,比如最新版 Chrome,Firefox,Safari 等。
  • 传感器节点采用模块化设计,可更换任意使用标准接口的传感器。

# Reference

项目源码

OpenCV – Stream video to web browser/HTML page

Install OpenCV 4 on Raspberry Pi 4 and Raspbian Buster

© 2014 - 0202 Aimkiray.

Theme by Palette. 在各种〇〇之后并没有炸掉|ω・)ノ