实现的功能

系统运行环境

软件配置

开发平台: Ubuntu14.04 vs2012 vs2017

开发环境: linux3.14.0、uboot2013.01、gcc4.6.4

通信协议: 串口、ZigBee、http协议等

数据库 : sqlite3

硬件配置

处理器:Cortex-A9(Exynos4412)开发板 (开发板上自带DHT11温湿度传感器,USB摄像头等数据采集装置,所以暂时可以不考虑远端的数据采集,将开发板采集的数据上传的应用层) ;usb摄像

远端数据采集设备: ZigBee/STM32(用于数据的采集)通过WIFI/蓝牙等模块实现数据的传输。如果检测的数据量种类多的话,用ZigBee搭建传感器网络是最符合实际应用的

硬件环境分析

软件框架分析

从上往下看,cgi进程作为RAM开发板与网页之间的中间层,该层实现了c语言与html语言的一个转化。从上往下看,cgi进程将得到的信息通过消息队列的方式下发给主进程->接受用户请求线程(同时还负责消息的下发),LED,蜂鸣器,GPRS等三个线程根据接受用户请求线程的信息实施各自的操作。从下往上看,数据采集线程和收集RAM开发板自身的数据和ZigBee传来的数据通过 共享内存/信号量 的方式传送给cgi进程,在由cgi进程传送给网页端

框架的搭建

通过两个方面对项目的框架进行分析

分层分析:
web网页端显示部分:
环境信息 = = =》 实时刷新环境数据
摄像头采集图像 = = =》 采集监控信息
硬件控制 = = =》下发要去控制的命令
A9数据处理部分
创建进程、线程
每条线程做自己的事情
涉及到进程间通信
数据处理《 = = =》分发(上行数据 or 下行数据)
A9-ZigBee数据采集部分
A9采集部分
ZigBee采集部分/(STM32平台(可以自己扩展))

数据流分析:

数据上传 : 如何上传? 制定通信的结构体 == == ==》共享内存上传数据 = = =》 显示并交给 用户查看环境信息

数据下发:如何下发? 数据的下发用于控制硬件== == ==》 制定控制命令 == == ==》消息队列下发数据 = = =》 控制硬件改变环境

看到这里可能有盆友会疑惑,同样是进程间的通信,为什么数据的上传通过共享内存而数据的下发是通过消息队列呢?

答: 这跟数据的特性是有关,下发的数据是用来控制硬件的一些命令,这些命令按照规定的格式(格式单一且所占字节较少),所以通过消息队列下发,实现简答且效率高。 上传的数据,包括各种各样的传感器所采集到的数据,数据量大,且格式不一,所以需要将数据打包,通过数据包的形式上传,通过共享内存的方式显然是更加容易实现的。 下面我们具体来看看如何实现处理这些数据的:

数据的处理

制定通信的结构体:!!!! 面向对象的思想

数据的上传:

//  !!!! 面向对象的思想//数据类型定义:     typedef uint8_t  unsigned char;     //  =======参考:typedef uint16_t unsigned short;typedef uint32_t unsigned int;//考虑到内存对齐的问题struct makeru_zigbee_info{uint8_t head[3]; //标识位: 'm' 's' 'm'  makeru-security-monitor  uint8_t type;    //数据类型  'z'---zigbee  'a'---a9------------->crc ...加密算法 <--------------float temperature; //温度float humidity;  //湿度float tempMIN;//温度下限float tempMAX;//温度上限 float humidityMIN;   //湿度下限float humidityMAX;   //湿度上限uint32_t reserved[2]; //保留扩展位,默认填充0//void *data;  内核预留的扩展接口  参考版};struct makeru_a9_info{uint8_t head[3]; //标识位: 'm' 's' 'm'  makeru-security-monitor  uint8_t type;    //数据类型  'z'---zigbee  'a'---a9uint32_t adc;short gyrox;   //陀螺仪数据short gyroy;short gyroz;short  aacx;  //加速计数据short  aacy;short  aacz;uint32_t reserved[2]; //保留扩展位,默认填充0//void *data;  内核预留的扩展接口  参考版};struct makeru_env_data{struct makeru_a9_info       a9_info;    struct makeru_zigbee_info   zigbee_info;};//所有监控区域的信息结构体struct env_info_client_addr{struct makeru_env_data  monitor_no[MONITOR_NUM];  //数组 ,如果包含多个监控环境,对进一步封装,用结构体//数组来表示};

数据的下发:(采用消息队列的方式下发数据到下位机上)
数据的下发用于控制硬件:

控制命令的制作:

程序

       #include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);//消息队列用于通信的结构体: 包括数据类型和数据//将消息队列封装成函数,直接通过参数传递的方式来发送信息: int send_msg_queue(long type,unsigned char text){struct msg msgbuf;msgbuf.type = 1L;msgbuf.msgtype = type;   //具体的消息类型,用来建立两个进程间的链接msgbuf.mtext[0] = text;   //控制命令字 if(msgsnd(msgid,&msgbuf,sizeof(msgbuf) - sizeof(long),0) == -1){perror("fail to msgsnd type2");exit(1);}return 0;}struct msgbuf {long mtype;       /* message type, must be > 0 */char mtext[1];    /* message data */};//消息队列结构体#define QUEUE_MSG_LEN 32                 struct msg{long type;   //从消息队列接收消息时用于判断的消息类型  ==== 暂时不用 1L===home1  2L===home2 ... long msgtype;//具体的消息类型 === 指代控制的设备,是什么类型的设备unsigned char text[QUEUE_MSG_LEN];//消息正文  ====> CMD 控制指定的设备};//消息队列接收消息:msgrcv (msgid, &msgbuf, sizeof (msgbuf) - sizeof (long), 1L, 0);//   解析buf中的数据:printf ("Get %ldL msg\n", msgbuf.msgtype);printf ("text[0] = %#x\n", msgbuf.text[0]);

文中程序是跑不起来的!旨在提供编程思路

数据流向分析

1、 ZigBee(采集终端) —> A9(处理平台)

2、 A9(处理平台) —> 网页(显示平台)

​ **3、网页(显示平台)----> A9(处理平台) **

​ **4、A9(处理平台) ----> ZigBee(采集终端) **

A9/ZigBee 采集部分

外设驱动 : 在应用层去获取外设的状态或数据

蜂鸣器

LED灯

A9 按键

ADC

mpu6050

Zigbee adc 主----- 协调器

风扇 从 ----- 终端节点 --------- 下发命令控制风扇

温湿度 从------终端节点 ---------- 上传温湿度数据

总结

上行:封装的结构体 == == 共享内存和信号量 = = => 交给CGI(C语言和HTML语言之间的转化接口)= = => 交给HTML
下行:封装的命令字 == = 息队列 = = == >msgbuf msgsnd = = >控制命令字封装在msgsnd的msgbuf中 = = =>A9端解析 ==> 向下控制硬件

暂时先记录到这,未完待续…


linux嵌入式项目之安防监控一(详解)相关推荐

  1. linux安防监控,Linux平台下的安防监控系统设计与实现

    摘要: 随着经济的飞速发展和科技进步,人们越来越关注居家安全,安防产品应运而生,其中安防监控系统更是备受关注.本文以提高安防系统的智能化水平为目标,设计和实现了一款Linux平台下的安全防范监控系统. ...

  2. 【实战】物联网安防监控项目【4】———从网页上控制A9的LED灯

    前言 学习了一个新知识,当然要记录一下啦.这两天学习了boa服务器.cgic标准库和html标签语言,又双叕解锁一个嵌入式的新玩法.cgic库是沟通C语言和html网页编程语言的一座桥梁,通过在lin ...

  3. 【实战】物联网安防监控项目———需求分析

    一.系统需求分析 1.目的 具体的应用场景展示 室内监控.家庭安保 小区安防监控 行车记录仪等 2.安防监控可以解决什么问题? 1).提供证据与线索 很多工厂.公司或银行发生偷盗或者事故,相关机关可以 ...

  4. SkeyeVSS综合安防监控视频云服务Windows、Linux跨平台安装部署说明文档

    一.环境准备 操作系统: Linux Ubuntu/CentOS 64位 Windows 7/Server 2008 r2以上/10/11 64位 内存:2G以上 CPU: 双核2.0GHz以上 二. ...

  5. 安防监控实现之A9主框架的搭建

    文章目录 声明 线程 概念(意识) 分层分析 数据流分析 软件层次框架图 系统框架,线程关系 项目目录结构 数据描述 结构体描述 全局变量描述 主线程与各个子线程的搭建 主线程 各个子线程的函数 搭建 ...

  6. LiveGBS流媒体平台GB/T28181功能-安防监控录像服务端集中存储云上录像存储云端录像回看下载

    LiveGBS功能-安防监控录像服务端集中存储云上录像存储云端录像回看下载 1.平台概述 2.平台录像回放 2.1.云端录像 2.1.1.存储位置 2.1.1.1.支持分布式存储 2.1.2.页面操作 ...

  7. 安防监控实现之mjpeg-streamer视频图像的显示

    文章目录 声明 视频服务器-mjpg-streamer 概述&系统框图 MJPG简介 MJPEG 与 MJPG 的区别 关于UVC摄像头 查看摄像头的信息 移植过程 添加驱动编译到内核上 mj ...

  8. 安防监控产业链全景梳理

    安防行业是随着现代社会安全需求应运而生的产业,围绕着视频监控技术的改革创新,行业从"看得见.看得远.看得清到看得懂",一共经历模拟监控.数字监控.网络高清监控和智能监控4个阶段,每 ...

  9. 解析弱电安防监控管理系统的安装技术重点

    建筑弱电工程与安防系统 在对电力进行应用时,按照电力输送功率的强弱,可以将其分为弱电和强电两类.一般来说,建筑中的弱电主要包括国家规定的安全电压等级.控制电压等低电压电能,如控制电源.应急照明灯备用电 ...

最新文章

  1. 北大「最优化:建模、算法与理论」新书, 附579页电子版与课件
  2. 三星笔记本桌面计算机图标消失,重启电脑我的电脑图标不见了怎么处理
  3. 怎样才算熟悉python-终于找到python怎么才算入门
  4. 解决mysqlAccess denied for user'root'@'IP地址'问题
  5. 《Credit Risk Scorecard》第五章: Development Database Creation
  6. ASP.NET Core 实战:使用 NLog 将日志信息记录到 MongoDB
  7. PHFRefreshControl
  8. ABAP和Java的destination和JNDI
  9. 【MFC系列-第13天】Windows系统对话框(对话框记事本逻辑)
  10. 朴素贝叶斯算法--过滤垃圾短信
  11. PS特效:图像碎片化
  12. 多个高危漏洞可导致 Chrome 浏览器被黑
  13. KM算法(最优匹配)
  14. 手机浏览器自动播放视频video(设置autoplay无效)的解决方案
  15. 淘宝api 处理对象和数组用到的自定义函数 以及 开发能用到的方法
  16. Android实现在线阅读PDF文件
  17. [RK3288][Android7.1]调试笔记 --- Settings设置WLAN热点支持遥控器弹出软键盘输入法
  18. 【PPT】PPT倒计时动画的制作方法 5.4.3.2.1...
  19. 计算机测电阻伏安特性实验报告,《电学元件伏安特性的测量》实验报告附页
  20. java 由日期计算星期几_java计算日期是星期几

热门文章

  1. 国家开放大学2021春1476企业文化管理题目
  2. Linux时间同步:chrony
  3. Cadence Allegro如何输出贴片坐标文件?
  4. Https双向认证Android客户端配置
  5. 大学计算机专业毕业之后,从事人工智能或大数据,继续考研还是参加工作?
  6. 如何通俗地理解概率论中的「极大似然估计法」?
  7. ftp登陆报错530 Login incorrect. Login failed.
  8. JavaScript动态创建网页内容的几种方法
  9. 客流统计多维数据模型分析系统助力商家提供独特客户价值
  10. Merkle Patricia Tree 梅克尔帕特里夏树(MPT)规范