用于物联网的低功耗视频传输协议



我目前正在开发一种远程喂养和监控我的狗的设备。基本思想是使用 2 个主要组件来实现这一点:

  • 第一个组件将由一个指向我的狗的盘子的摄像头和一个带有伺服电机的微控制器组成,该微控制器将从食品容器打开和关闭食物门。在这个地方没有WIFI接入,也没有电源插座,所以它会用电池运行。我希望这个组件中的计算尽可能低,所以如果它可以在不运行在 linux 或其他操作系统上的情况下完成,那就太好了。

  • 第二个组件将与第一个组件和我的路由器通信,以便我可以通过互联网远程访问它。这个可以插入电源插座。

它的用法包括我能够将我的手机(使用我创建的应用程序(登录到第二个组件,以便它向我显示实时视频并通过它发送信号以打开食品容器门一段时间。我有一个BeagleBone Black可以用于这个项目,我想我将应用于第二个组件。

我的问题:

1(什么协议适合两个组件(蓝牙,Zigbee,6lowpan等(之间的通信?相机可能是 640*480 或更高,只要我可以观看相对连续的实时视频来检查我的狗是否进食并且状况良好,延迟(~ 15s - 20s(就没有问题。电池应该尽可能低耗电量,以便长时间运行。

2(有没有办法使第一个组件能够在不运行操作系统的情况式传输视频?

我知道有一些更合乎逻辑的解决方案(扩展wifi网络,购买已经上市的解决方案等(,但我也希望将这个项目用作物联网的学习实例。我做过研究,但无法得出任何令人信服的结论。我希望你们能在这方面帮助我,或者至少为我指出正确的方向。我(和我的狗(会非常感激。

谢谢。

视频

您需要知道的第一件事是什么是视频?作为摘要视频是一个字节流,其中包含摄像机以特定间隔拍摄的图像。每个图像都以 FRAME 命名。因此,视频流具有分辨率和颜色配置文件,这适用于所有帧。例如,具有 24 位的 RGB 图像意味着每个通道(红色、绿色、蓝色(具有 8 位用于颜色指示。

当您的查询声明分辨率为 640x480 时,RGB 原始图像包含:

640 * 480 * 3 = 921600 bytes
a video without compression with 24 fps (frames per second) will produce
921600 * 24 = 22.118.400 bytes per second.
this will require a bandwidth of (ideally):
22.118.400 * 8 = 176.947.200 bits roughly 168,75 mbits

但别担心。但是,存在压缩格式(如Jpeg(,它们减少了图像字节的总数。这种压缩取决于光线、分辨率、细节等条件。这需要测试以计算总字节数以计算所需的带宽。有TTL相机模块(问谷歌喜欢串行相机模块arduino或ttl串行jpeg相机(。这些模块可以输出视频或静止图像,并且可以配置。这些模块具有 ttl 串行接口。这是重要的部分。

转移

基于xbee(最流行的(或NRF***的无线传输协议和/或模块具有ttl串行接口。根据他们的数据表,他们可以以高达每秒3MB的波特率进行传输。现在我们回到视频字节大小计算。我们需要一个可以支持来自相机数据的模块(xbee 或类似模块(。

在非常基本的级别上,您的第一个组件可以包含以下组件:

ttl_camera -> xbee + battery + regulators

和第二个组件

xbee -> beaglebone -> internet connection 

但是您的问题指出,在第一个组件上连接了一个伺服电机,这需要在第一个组件侧存在MCU。(xbee 有 GPIO 端口,但我不确定您是否可以远程控制它们来驱动伺服(因此可以像这样修改第一个组件:

ttl_camera -> arduino pro mini -> xbee + battery + regulators

通信

在第一个组件

和第二个组件之间必须有一个通信协议,以使beaglebone能够控制第一个组件。我认为您需要打开和关闭相机,从而打开视频流。您需要控制伺服电机。协议架构可以是这样的:

site_2 --> site_1 (control commands)
site_1 --> site_2 ( *ONLY* Video stream )

因此,连接架构可以是这样的:

CAM_TX --> xbee_RX
ARDUINO_RX --> xbee_TX
ARDUINO_TX --> CAM_RX

结论

使用此配置,您将能够实现从site_1获取视频流并通过互联网site_2控制site_1。我认为这是一个学习项目的良好开端。

最新更新