项目分享|基于ElfBoard的远程监测系统

描述

 

ElfBoard的“自创一派”共创社由19名来自各大高校的共创官组成,在不到一个月的时间里已经建立起浓厚的学习氛围,在这里每位共创官跨越不同的学科背景,交融思想、共享资源,迅速提升自身在嵌入式技术领域的专业素养。

 

值得一提的是,社群内部已经涌现出许多富有创意的产品设计理念与技术解决方案,今天就跟大家分享一名共创官完成的项目报告“基于ElfBoard的远程监测系统”。

 

一、项目介绍

1.1 项目目标

基于i.MX6ULL构建一个功能强大的远程检测系统。系统能够自动采集各种传感器数据,包括温度、湿度、电压等,并实时上传至云端服务器,并且能够根据采集到的传感器数据对设备进行自动化控制,如设置电压阈值,当采集到的电压大于阈值时,开启LED1。

 

在用户端,实现对采集到的传感器数据进行处理、分析和可视化,便于用户远程监控和管理,还可以实现对设备的远程控制。集成高清摄像头,将采集到的视频数据传输至客户端,实现对设备的远程实时监控。

 

1.2 项目硬件

1、ElfBoard ELF 1 开发板

2、WiFi网络

3、USB免驱摄像头

4、Linux服务器
 

1.3 软件环境

1、阿里云物联网平台

2、Nginx

3、Python

4、Flask

二、项目方案

2.1 远程监控

采用RTMP协议,设备端使用FFmpeg采集摄像头数据并推流至云端,云端使用Nginx提供Web服务,并使用nginx-http-flv-module提供RTMP服务,用户端采用Web界面,并使用flv.js进行拉流播放。

 

2.2 数据检测与设备控制

传感器数据传输以及设备的远程控制通过阿里云物联网平台,采用MQTT协议。

 

三、数据检测与设备控制

MQTT云平台配置

参考 ElfBoard学习(九):MQTT

 

传感器数据采集与上传

基于Linux SDK中的data_model_basic_demo.c进行修改。

 

温湿度数据采集

开发板

 

电压数据采集

开发板

 

LED状态采集与控制

开发板

 

自动化控制

当ADC采集的电压大于阈值2.5V时自动开启LED1,低于时自动关闭LED1。

if(adc>2.5){ set_led(1,'1'); }else{ set_led(1,'0'); }

 

数据上传

在main函数的while(1)中

开发板

 

云端指令响应

由于云端传输的数据为JSON格式,因此需要使用cJSON进行解析。

 

添加cJSON

在components文件夹下添加cJSON相关文件

开发板

 

修改Makefile

开发板


在74行和78行后面要添加-lm,否则在编译的时候会报错。

 

实现代码

开发板

开发板

 

四、视频监控

RTMP服务器搭建

云端服务器使用Nginx,但Nginx本身并不支持RTMP,需要使用相关的插件使其支持RTMP。此外由于网页端播放RTMP流需要Flash插件的支持,而目前Flash插件许多浏览器已不再支持,因此需要使用支持 HTTPS-FLV的nginx-http-flv-module,并通过flv.js实现RTMP流的播放。这里首先需要下载Nginx和nginx-http-flv-module的源码,并采用编译的方式安装Nginx,具体步骤如下:

./configure --add-module=/usr/local/nginx/nginx-http-flv-module make&&make install

 

安装完成后,需要进入Nginx安装目录(默认为/usr/local/nginx/),并在conf文件夹下对nginx.conf文件进行修改,增加rtmp功能(注意需要打开服务器的1935端口):

开发板

开发板

 

开发板

最后启动Nginx服务,即可完成RTMP服务器的搭建:

cd /usr/local/nginx/sbin ./nginx

 

本地推流

FFmpeg的编译配置参考:摄像头采用的是USB免驱摄像头,将摄像头插入ElfBoard的USB口即可正常识别及工作,设备节点为/dev/video2。之后可以使用v4l2-ctl工具查看并配置摄像头信息最后使用命令就能够实现推流:

ffmpeg -f video4linux2 -r 5 -s 320x240 -i /dev/video2 -c:v libx264 -preset ultrafast -tune zerolatency -r 5 -f flv rtmp://xxx.xxxxxx.xxx/live/test

 

五、用户端设计

框架

使用Python编程,采用Web界面,并通过Flask提供Web服务以及后端数据处理能力。可以部署在云端,也可以在本地运行。界面如下所示:

开发板

 

视频拉流

Web用户端的视频拉流通过flv.js实现,首先需要在html文件中导入flv.js:

 

 

之后设计Web页面播放器,具体代码如下:

 

var player = document.getElementById('videoElement'); if (flvjs.isSupported()) { var flvPlayer = flvjs.createPlayer({ type: 'flv', url: 'http://xxx.xxxxx.xx/live?port=1935&app=myapp&stream=test', "isLive": true, hasAudio: false, hasVideo: true, //withCredentials: false, //cors: true }, { enableWorker: true, enableStashBuffer: false, lazyLoad: false, lazyLoadMaxDuration: 0, lazyLoadRecoverDuration: 0, deferLoadAfterSourceOpen: false, fixAudioTimestampGap: true, autoCleanupSourceBuffer: true, }); flvPlayer.attachMediaElement(videoElement); flvPlayer.load(); //加载 flv_start(); } function flv_start() { player.play(); } function flv_pause() { player.pause(); }

 

远程数据的读取与指令下发

这一部分通过后端python编程实现,并提供相应的web接口。前后端的交互通过ajax请求实现。

开发板

开发板开发板
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分