基于ARM9的嵌入式Web服务器数据动态显示的实现
扫描二维码
随时随地手机看文章
引言
当今,以互联网为标志的嵌入式系统正处于一个飞速发 展的阶段。嵌入式系统接入Internet后,相当于一个功能齐全 的小型Web服务器,用户在上位机打开浏览器,通过Internet 即可获取该Web服务器上的数据信息,从而实现了对现场信 息的远程监控,而且这种基于HTML语言标准化的Web用户 界面降低了系统开发、维护以及人员培训的费用。
对于无线传感网络来说,可将嵌入式网关作为Web服务 器,用户在上位机通过Internet访问网页的方式获取下位机传 感器节点采集的数据。基于此,本系统采用DS18B20温度传 感器和ZigBee无线通信模块构成无线传感网络,以ARM9 作为核心处理器搭建嵌入式Web服务器Boa和嵌入式数据库 SQLite,采用C语言、HTML语言、JavaScript程序、CGI程序、 Ajax技术,实现了对远端传感器节点采集信息的处理、存储 及在网页上的动态显示。
1系统硬件整体设计
本系统的硬件主要由3部分组成:上位机PC端、嵌入 式网关(ARM9)和ZigBee无线网络,系统的整体设计框图 如图1所示。
ZigBee无线网络由传感器节点和协调器构成,传感器节 点将采集的信息经协调器发送至网关,同时协调器也可接收网 关发送的指令进而控制节点的打开与关闭。嵌入式网关介于上位机和传感器节点之间,它既要支持TCP/IP协议,允许用户 通过Internet访问,又要实现无线网络和Internet之间的地址 映射、协议转换和路由功能,类似于Internet网关叫 由于嵌 入式网关CPU串口引脚不是标准RS232电平,在ZigBee与网 关之间需加入电平转换电路[4]。PC端即上位机客户端,用户 在上位机通过浏览器输入嵌入式网关的IP地址可进入系统登 录界面,登录后用户经管理系统获取传感器节点采集的数据, 以访问网页的方式实时显示数据信息,并可输入指令实现对下 位机传感器节点的控制。本文重点介绍嵌入式网关Web服务 器的设计,实现温度数据在上位机的动态显示。
2嵌入式Web服务器的搭建
硬件电路采用ARM9微处理器及外围电路,开发环境: MINI2440, Linux_2.6.32.2 内核,虚拟机 Redhat5,交叉编译 版本ARM-Linux-gcc-4.3.2。主要工作包括Linux内核移植、 根文件系统制作、交叉编译工具安装、Web服务器源码分析等。 2.1交叉编译工具安装
交叉编译即在一个平台上编译生成可在另一平台运行的 代码。本设计包括安装Linux系统的宿主机和基于ARM MINI2440的目标板,由于二者处理器体系结构不同,因此需 借助交叉编译工具在宿主机编译生成目标板上可运行的机器 代码。本系统使用交叉编译工具版本为ARM-Linux-gcc-4.3.2,将其拷贝到宿主机系统,把编译器路径加入环境变量保存, 重启系统后在终端输入arm-linux-gcc -v出现交叉编译工具版 本信息,表示交叉编译器安装成功。
2.2 BOA源码分析及安装
Web服务器采用BOA文件生成,它能按照顺序完成用户 请求,支持认证、CGI程序,其可执行代码约60 KB。BOA 服务器的编译与移植如下:进入boa-0.94-13文件夹的src 目录,运行configure配置安装文件,根据Makefiles生成 Makefile文件进行修改,再执行make,生成可执行程序boa 后修改/etc/boa.conf,对boa进行配置编译,与虚拟机etc目 录下mine.types 一起拷贝到目标板var目录,执行./boa,Web 服务器在目标板上即可运行。
3数据动态显示的实现
通过上位机实时显示传感器节点发送给网关的数据是一 个难点,一般采用手动或自动刷新来实现数据更新,但都无法 实现数据的实时动态显示。本设计以采集温度数据为例,在 网页中嵌入JavaScript,采用Ajax技术实现温度信息的动态实 时显示,节约了 CPU资源。
3.1软件流程
在嵌入式网关中,通过串口采集温度信号,每个温度数 据前面带有设备号字符,将不同传感器节点采集的温度信息分 别存储在txt文档中,上位机通过Internet访问嵌入式网关读 取txt文档信息,并在网页上动态显示。采用txt文档存储数据, 一方面有利于在现场直接从网关SD卡中读取信息;另一方面 有利于上位机编程读取数据。其温度动态显示软件流程图如 图2所示。
3.2温度信息处理
协调器将传感器节点采集的温度值通过串口传送到嵌入 式网关,需定义传感器节点的设备号,以实现不同节点采集的 温度值在txt文档中存储,数据格式如表1所列。
把编写好的串口 C程序在宿主机编译后生成的temper文 件,并将temper、CGI程序和js程序拷贝到ARM板服务器 WWW目录下,执行temper,在服务器WWW目录下生成3 个txt文档,实现了温度数据的存储。
表1数据传送格
设备号 |
温度值(C) |
电压值(V) |
设备1 |
温度值1 |
电压值1 |
设备2 |
温度值2 |
电压值2 |
设备3 |
温度值3 |
电压值3 |
3.3数据的读取及显示
为了实现温度的动态显示,在温度显示网页(temper. html)中采用JavaScript (js)程序[8],通过加入定时器每隔一 段时间调用CGI程序以获取txt文档的温度值。由于采样数据 不断存储到txt文档,CGI程序采用倒序方法首先读取txt文 档最后一行获取最新数据,从而在网页上动态显示温度。
4结果分析
在IE浏览器中输入目标机的IP地址,登录系统进入到 温度显示页面(temper.html),如图3所示,点击获取按钮, 温度值将显示在页面上,设置温度数据5秒更新一次,当改 变温度传感器采集的温度时,网页显示数据也同时更新,温 度显示页面如图3所示,从图3可以看出,当采集温度数据发 生变化时,页面显示温度值也随之改变,实现了传感器节点采 样数据的动态显示。
5结语
本文通过构建ARM-Linux嵌入式网关,利用BOA服务 器、运用JavaScript, CGI、Ajax技术及HTML语言实现了传 感器节点采集的温度在上位机网页的动态显示,与传统的手 动或自动刷新网页相比,该系统占用服务器CPU资源少,缩 短了用户等待时间,实现了下位机采集的现场数据在上位机实 时动态显示。
20211119_6197b878b28ee__基于ARM9的嵌入式Web服务器数据动态显示的实现