安防项目总结

boa概念

Boa是一个轻量级的HTTP服务器,适用于嵌入式系统和资源有限的设备。它是一个小型、快速和易于配置的HTTP服务器,适用于提供静态内容和基本的动态内容。

Boa服务器的特点包括:
1. 轻量级:Boa的代码量很小,占用系统资源较少,适用于嵌入式系统和资源有限的设备。
2. 快速响应:Boa具有快速的响应时间和高效的处理能力,适用于提供基本的Web服务。
3. 易于配置:Boa服务器的配置文件简单易懂,可以根据需求灵活配置。
4. 静态内容支持:Boa可以提供静态内容,例如HTML、CSS、JavaScript和图像等。
5. 基本的动态内容支持:Boa支持使用CGI、FastCGI和SSI等技术实现基本的动态内容。

Boa服务器主要用于嵌入式设备或资源有限的环境中,通过HTTP协议提供简单的Web服务。它的设计目标是简单、轻量和高效,适用于一些需要基本HTTP功能的应用场景,如物联网设备、嵌入式系统、路由器等。

CGI

CGI (Common Gateway Interface) 是一种用于在Web服务器上运行外部程序的标准接口。它允许Web服务器与外部程序进行通信,从而生成动态的Web内容。

在CGI中,当Web服务器接收到一个HTTP请求时,如果请求需要执行动态操作,服务器会将请求传递给指定的CGI程序。CGI程序接收HTTP请求,并根据请求生成相应的动态内容。生成的内容会被CGI程序返回给Web服务器,然后Web服务器将这些内容作为HTTP响应发送给客户端浏览器。

CGI程序可以使用多种编程语言来编写,如C、C++、Perl、Python等。它可以访问与Web服务器共享的环境变量和输入数据(通过标准输入和环境变量),以及将生成的输出发送回Web服务器(通过标准输出)。CGI程序和Web服务器之间通过标准输入和输出进行通信。

通常,CGI程序的文件扩展名被用来指示其类型。例如,以".cgi"或".pl"结尾的文件通常会被视为Perl CGI脚本文件。

总结起来,CGI是一种用于在Web服务器上运行外部程序的标准接口。它允许服务器和外部程序之间进行通信,从而生成动态的Web内容。CGI程序接收HTTP请求并生成动态内容,然后将结果返回给Web服务器,最终由服务器发送给客户端浏览器。

html->boa服务器->CGI接口(led.cgi\sms.cgi\beep.cgi\env.cgi\login.cgi)->A9

通俗逻辑为*. c 生成*. o,这是 C 与 C 的数据交互 CGI 逻辑为*. c 生成*. cgi,这是 C 与 CGI 的数据交互其实 cgi 就是 app,只是 cgi 提供了 C 与 html 超文本协议的交互,just is a interface for html and C.

HTML

HTML(Hypertext Markup Language)是一种用于创建和表示网页的标记语言。它是Web开发中最基本和核心的语言之一。超文本标签语言。

HTML使用标签(Tag)来描述网页中的不同元素,如标题、段落、链接、图像等。通过使用不同的HTML标签,可以将文本、图像、音频、视频等内容组织起来,形成一个完整的网页。

HTML的标签一般由尖括号(< >)包围,标签通常都是成对出现的,有一个起始标签和一个结束标签。例如,

这是一个段落。

。起始标签和结束标签之间的内容就是该标签的内容。

除了标签,HTML还可以使用属性来为标签提供额外的信息和控制。属性位于标签的起始标签中,用于定义元素的特性和行为。例如,这是一个链接,这里的href属性指定了链接的目标URL。

HTML的语法相对简单,易于学习和使用。它是构建Web页面结构的基础,可以与CSS和JavaScript等其他技术结合使用,实现丰富的Web内容和交互。

A9控制硬件(C语言或者汇编),实现A9与html进行数据交互,所以使用了CGI接口。

html与CGI数据通过 form 表单进行传递,并在 CGI 上进行解析,将拿到的 html 数据转化为 C 语言能识别的数据。

form 表单找对应的cgi文件,cgi文件由对应的C文件进行编写,a9_beep. cgi 、a9 led. cgi、 a9_seg. cgi 、capture. cgi 、env1. cgi、 login. cgi 、setEnv. cgi、zigbee_fan. cgi

a9 led. c、a9_beep. c、a9_seg. c、setEnv.c代码执行过程:

控制led、蜂鸣器、发送短信​​​​​​​、zegbee温湿度设置
1、key = ftok("/tmp", 'g')//创建一个消息队列key值
2、msgid = msgget(key, 0666)//获取一个已存在的消息队列的标识符
3、消息队列结构体赋值
4、msgsnd(msgid, &msg_buf,sizeof(msg_buf)-sizeof(long),0);//发送数据到队列中

外设控制:CGI进程通过消息队列发送给主线程

 env1. c

读取信息​​​​​​​,此段代码建立的key值需确定是共享内存还是信号量,少创建一个key
1、key = ftok("/tmp",'i')//创建一个信号量key值
2、semid = semget(key, 1, 0666)//获取一个信号量集的标识符(semid)
3、shmid = shmget(key, N, 0666)//创建或获取一个共享内存段,并返回共享内存的标识符(shmid)
4、shm_buf = (struct shm_addr*)shmat(shmid, NULL, 0)//创建一个共享内存段(通过shmget),然后使用shmat将共享内存段附加到当前进程的地址空间中,返回的shm_buf指针可以用于访问共享内存中的数据结构。
5、sem_p(semid, 0);//对指定的信号量集合中的一个信号量执行 P 操作,即将信号量的值减一(或等待信号量变为非零)。

一般来说,P 操作用于进程对共享资源的申请或者占用。当某个进程需要使用一个共享资源时,它会尝试进行 P 操作,如果信号量的值大于零,则将信号量的值减一,并继续执行;如果信号量的值等于零,则进程会进入等待状态,直到信号量的值大于零才能继续执行。

在 sem_p(semid, 0) 中,semid 是信号量集合的标识符,表示对哪个信号量集合进行操作。而 0 表示对该信号量集合中的第一个信号量执行 P 操作。
6、将shm_buf显示到网页
7、sem_v(semid, 0);//指定的信号量集合中的一个信号量执行 V 操作,即将信号量的值加一(或释放等待信号量的进程)。

一般来说,V 操作用于进程释放或者让出共享资源。当某个进程使用完一个共享资源后,它会尝试进行 V 操作,将信号量的值加一,表示资源的可用性增加,其他等待该资源的进程可以继续执行。

在 sem_v(semid, 0) 中,semid 是信号量集合的标识符,表示对哪个信号量集合进行操作。而 0 表示对该信号量集合中的第一个信号量执行 V 操作。

数据采集:CGI进程通过共享内存及信号量进行数据交互

form 表单

安防项目总结_第1张图片

html代码分析

安防项目总结_第2张图片

CGI代码分析

int cgiMain()
{
	cgiFormStringNoNewlines("username", name, N);//值放到缓冲区
	cgiFormStringNoNewlines("password", passwd, N);

	cgiHeaderContentType("text/html");//html语言
	fprintf(cgiOut, "\n");
	fprintf(cgiOut, "\n");
	fprintf(cgiOut, "登录提示\n");
	//账号密码匹配。一般去数据库查询
	if ((strcmp(name, "chuangke") == 0) && (strcmp(passwd, "123") == 0))
	{
		fprintf(cgiOut, "");
		fprintf(cgiOut, "

%s", "Login OK!"); fprintf(cgiOut, "

Welcome to %s", name); fprintf(cgiOut, ""); //成功跳转的html }//功能跳转,自动刷新,演示跳转 else { fprintf(cgiOut, "

%s", "Login error!"); } return 0; }

MJPEG streamer概念

MJPEG(Motion JPEG)是一种用于压缩和传输视频的格式。它是将视频分解为一系列JPEG图像的序列,每个图像代表视频中的一个帧。由于每个帧都是独立的JPEG图像,因此可以在任何时间点进行解码和显示,而不需要先解码之前的所有帧。

MJPEG通常用于网络摄像头和视频流传输中,因为它可以提供较好的图像质量和较低的延迟。与其他视频编码格式(如H.264)相比,MJPEG不会引入复杂的压缩算法或编码延迟,因此在实时应用中更具实用性。

要播放MJPEG视频,可以使用支持该格式的多媒体播放器或特定的应用程序。这些播放器通常能够解码和显示MJPEG图像序列,并提供基本的视频控制功能(如播放、暂停、快进/快退等)。此外,也可以使用编程语言(如Python)中的相关库来处理和显示MJPEG视频。

安防项目总结_第3张图片

mjpg-stream的移植:jpeg库的移植、移植mjpg-streamer、USB驱动、V4L2驱动、设备驱动

启动过程:先启动视频流服务器,在启动boa服务器,

ZIGBEE:

Zigbee是一种低功耗、短距离通信协议,专为无线传感器网络(WSN)和物联网(IoT)应用而设计。它基于IEEE 802.15.4标准,提供了一种简单、低成本的无线通信解决方案,适用于各种应用场景,如家庭自动化、智能城市、工业自动化等。

Zigbee具有以下特点:
1. 低功耗:Zigbee设备以低功耗的方式工作,可以使用电池供电,并具有较长的电池寿命。
2. 网络拓扑:Zigbee网络支持多种拓扑结构,如星型、网状和协调器路由结构。这使得Zigbee在不同场景下具有更多的灵活性和可扩展性。
3. 自组织和自愈性:Zigbee网络可以自动组建,并具有自我修复的能力。当设备离线或故障时,网络能够自动寻找替代路径,确保通信的可靠性。
4. 安全性:Zigbee具有可靠的安全机制,包括认证、加密和密钥管理,以保护通信数据的安全性。

在开发Zigbee应用时,可以使用各种开发平台和工具来简化和加速开发过程。以下是一些常用的开发平台和工具:

1. Zigbee开发套件:各种硬件厂商提供的Zigbee开发套件,包括开发板、模块和相关文档。这些套件通常包含开发板、示例代码、调试工具等,可用于快速原型开发和测试。
2. Zigbee协议栈:Zigbee协议栈是实现Zigbee协议的软件库。开发者可以使用这些协议栈来开发自定义的Zigbee应用,并与其他Zigbee设备进行通信。
3. Zigbee开发工具:开发者可以使用各种开发工具来开发和调试Zigbee应用,如IDE(集成开发环境)、调试器、仿真器等。这些工具可帮助开发者进行代码调试、性能分析和硬件调试。
4. Zigbee测试工具:针对Zigbee应用的测试工具可用于验证Zigbee设备的兼容性、性能和安全性。这些工具包括网络分析仪、信号发生器、信号分析仪等。

总之,借助Zigbee的开发平台和工具,开发者可以更轻松地开始Zigbee应用的开发,并加速产品上市时间。

安防项目总结_第4张图片

安防项目总结_第5张图片

A9的adc数据采集和陀螺仪数据

 A9端数据采集->共享内存->CGI->html

A9的adc数据采集和陀螺仪数据必须的做的工作:A9安装驱动:adc驱动、mpu6050驱动、蜂鸣器驱动、设备树,并加载每个模块。最后将每个部分一直到框架上,

直实数据获取: transfer 线程 循环读取
1、驱动正常工作
2、采集数据 OK
3、将应用层的 open read
write ioctl close 过程放到线程当中
4、通过 read 或 ict 获取驱动的数据并填充到结构体当中
===>交给 refresh 刷新线程将数据刷新到网页上

refresh线程在循环读取共享内存数据,每执行一次后,发信号给 transfer 线程,transfer 再次读取数据。每个线程进入while循环等待条件变量 ,收到信号执行线程内的函数,解锁,休眠1s钟

阶段一:认识 A9 和 html 的交互过程,同时认识 a9-boa 服务器--cgi--html 的过程

阶段二:认识两个线程问通过全局变量通信的过程(同步互斥)模拟数据

阶段三:将真实的驱动和应用层的测试实例整合到项目的框架当中,《注重调试过程》。

 网页控制外设,通过队列到pthread_client_request进行队列的处理,同样是循环执行,每个外设一个线程,通过线程互斥锁和条件变量的变化,最终执行相应的动作。

GPRS模块

GPRS(General Packet Radio Service)是一种无线通信技术,它利用全球通信系统(GSM)网络传输数据。GPRS模块是一种集成了GPRS通信功能的硬件设备,它可以通过SIM卡连接到GSM网络,并通过串口或USB接口与其他设备进行通信。

GPRS模块具有以下特点和优势:

  1. 高速数据传输:GPRS模块可以实现高速的数据传输,通常可以达到最高86.4kbps的速度。
  2. 实时连接:GPRS模块可以实现实时连接,可以随时发送和接收数据,适用于需要即时通信的应用场景。
  3. 低功耗:GPRS模块采用低功耗设计,可以在待机状态下消耗很少的电能,延长设备的续航时间。
  4. 广泛应用:GPRS模块可以广泛应用于物联网、智能家居、车辆追踪、远程监控等领域。

使用GPRS模块的步骤如下:

  1. 准备SIM卡:首先需要准备一张支持GPRS通信的SIM卡,并将其插入GPRS模块的SIM卡槽。
  2. 连接硬件:将GPRS模块通过串口或USB接口连接到需要通信的设备上。
  3. 配置参数:根据GPRS模块的说明文档,配置相应的参数,包括APN(接入点名称)、用户名、密码等。
  4. 建立连接:使用相应的AT指令(GPRS模块的控制指令)建立与GSM网络的连接,并通过GPRS模块发送和接收数据。
  5. 数据传输:通过串口或USB接口向GPRS模块发送需要传输的数据,并通过GPRS模块接收远程设备发送的数据。

需要注意的是,使用GPRS模块进行通信需要在相应的网络运营商处购买GPRS服务,并且需要了解GPRS模块的控制指令和通信协议,以便正确配置和使用。

通过串口发送AT命令,模块即可正常工作。波特率9600。

进程间通讯:共享内存、信号量、消息队列无论在全局变量还是在局部变量中定义,只要建立会在系统中进行调度。

共享内存:正常建立后共享内存通过p操作和v操作(操作信号量)操作共享内存缓冲区最终完成数据交互。一般用在数据采集和转发。

消息队列:通过创建队列,通过msgsnd发送数据到消息队列中,在通过msgrcv接收队列中的内容。一般用在对外设的控制。

你可能感兴趣的:(安防监控,安防监控)