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 (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(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进程通过共享内存及信号量进行数据交互
html代码分析
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(Motion JPEG)是一种用于压缩和传输视频的格式。它是将视频分解为一系列JPEG图像的序列,每个图像代表视频中的一个帧。由于每个帧都是独立的JPEG图像,因此可以在任何时间点进行解码和显示,而不需要先解码之前的所有帧。
MJPEG通常用于网络摄像头和视频流传输中,因为它可以提供较好的图像质量和较低的延迟。与其他视频编码格式(如H.264)相比,MJPEG不会引入复杂的压缩算法或编码延迟,因此在实时应用中更具实用性。
要播放MJPEG视频,可以使用支持该格式的多媒体播放器或特定的应用程序。这些播放器通常能够解码和显示MJPEG图像序列,并提供基本的视频控制功能(如播放、暂停、快进/快退等)。此外,也可以使用编程语言(如Python)中的相关库来处理和显示MJPEG视频。
mjpg-stream的移植:jpeg库的移植、移植mjpg-streamer、USB驱动、V4L2驱动、设备驱动
启动过程:先启动视频流服务器,在启动boa服务器,
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应用的开发,并加速产品上市时间。
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(General Packet Radio Service)是一种无线通信技术,它利用全球通信系统(GSM)网络传输数据。GPRS模块是一种集成了GPRS通信功能的硬件设备,它可以通过SIM卡连接到GSM网络,并通过串口或USB接口与其他设备进行通信。
GPRS模块具有以下特点和优势:
使用GPRS模块的步骤如下:
需要注意的是,使用GPRS模块进行通信需要在相应的网络运营商处购买GPRS服务,并且需要了解GPRS模块的控制指令和通信协议,以便正确配置和使用。
通过串口发送AT命令,模块即可正常工作。波特率9600。
进程间通讯:共享内存、信号量、消息队列无论在全局变量还是在局部变量中定义,只要建立会在系统中进行调度。
共享内存:正常建立后共享内存通过p操作和v操作(操作信号量)操作共享内存缓冲区最终完成数据交互。一般用在数据采集和转发。
消息队列:通过创建队列,通过msgsnd发送数据到消息队列中,在通过msgrcv接收队列中的内容。一般用在对外设的控制。