基于Raspberry Pi的电梯彩屏显示系统设计*
2014-09-06赖江李英祥何琪苏凯
赖江,李英祥,何琪,苏凯
(成都信息工程学院 通信工程学院,成都 610225)
基于Raspberry Pi的电梯彩屏显示系统设计*
赖江,李英祥,何琪,苏凯
(成都信息工程学院 通信工程学院,成都 610225)
本文针对多媒体彩屏电梯显示的需求,在ARM内核树莓派平台和单片机接口板双处理器架构的硬件支持下,利用485/CAN总线传输技术、Linux应用编程、Qt5用户界面编程,提出并实现了一种双处理器架构的电梯彩屏显示系统。此彩屏显示系统与传统显示系统相比,界面更美观,功能更丰富,且具有低成本、高稳定性等特点。实际测试结果表明,此电梯彩屏显示系统设计的可行性和有效性。
电梯;双处理器架构;Qt5;树莓派
引 言
近年来,随着高层建筑数量的与日俱增,电梯的需求量也在增加。现阶段我们广泛使用的电梯都是基于LED点阵列的显示系统,显示状态信息比较简单,显示方式比较单调。此外,现在的一些电梯里的广告机,虽然改善了电梯轿内的乘坐环境,良好的广告效果也给商家带来了不小的经济效益。但是这种显示装置没有和电梯控制系统融为一体,只是单纯的视频播放而已。
为了使显示和电梯控制系统相融合,打造舒适的乘坐环境,针对现有的电梯系统提出一种由单片机完成不同厂商适配、由ARM/X86统一显示的双核处理方法。该方法中ARM/X86处理器专注于统一通用格式电梯状态信息解码、楼层图片切换或视频播放,从而提高整个系统的实时性与可靠性。针对不同厂商的电梯通信协议,只需要更改单片机的编解码程序便可使整个系统重新工作[1-8]。
Raspberry Pi(中文名为“树莓派”)是一款由英国的树莓派基金会所开发,以低价硬件及自由软件为学生计算机编程教育而设计的卡片式电脑。其配备一枚700 MHz博通出产的ARM架构BCM2835处理器,256 MB内存(B型已升级到512 MB内存)的微型电脑主板[2]。Raspberry Pi以SD卡为内存硬盘,主板周围有两个USB接口和一个网口,可连接键盘、鼠标和网线,同时拥有视频模拟信号的电视输出接口和HDMI高清视频输出接口。以上部件全部整合在一张仅比信用卡稍大的主板上,具备所有PC的基本功能。其操作系统采用开源的Linux系统,比如Debian、ArchLinux,自带的Iceweasel、KOffice等软件能够满足基本的网络浏览、文字处理以及计算机学习的需要[2,5]。
Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。Qt具有优良的跨平台特性,Qt支持下列操作系统:Microsoft Windows 95/98、Microsoft Windows NT、Linux、 Solaris、SunOS、HP-UX、Digital UNIX (OSF/1、Tru64)、FreeBSD、BSD/OS,SCO、AIX、OS390、QNX等等[3-4]。
1 系统整体设计
1.1 系统框架
本系统的硬件部分主要由接口转接板和显示板组成,系统框图如图1所示。
图1 系统框图
1.2 子系统功能介绍
1.2.1 接口转接板
接收RS-485/CAN总线上的电梯通信协议,并完成协议的解析;承载温度传感设备和挂在I2C总线上的时钟电路,供显示板读取温度和时间信息,完成用户按键的检测与编码。
1.2.2 显示板
接收接口转接板译码后的电梯数据;读取温度和时间信息;实现界面应用程序。
2 接口转接板子系统设计
接口转接板子系统硬件主要包括ATmega8单片机、DS18B20温度传感器、PCF8563时钟芯片、MAX485芯片等。其接口转接板框图如图2所示。
图2 接口转接板框图
电梯的通信协议有多种,本文以NICE3000通信协议为例实现本系统。
2.1 NICE3000通信协议的通信设定
通信方式:RS-485标准、异步、半双工。
数据格式:1位起始位、8位数据位、1位停止位、无校验位。
通信波特率:9 600 bps。
通信地址定义:广播地址为0,外接节点地址为1~31(外招板拨码开关确定),地址同时也表示外招所在楼层;显示板只是接收显示,地址设定为0(拨码),无需通信回复。
数据校验:采用两位异或校验。
数据帧分类:共有两种形式,其中广播帧用于外招显示内容的信息,不需要返回帧,另外还有一种是普通帧,主要完成主控制板与外招之间的控制信息交换。
2.2 帧格式
数据帧采用固定长度,5个字节,结构为帧头、用户数据、帧尾。
帧头:包括1个字节地址,即主控制板发送给外招的标识,从机(外招)根据帧头判断本机是否响应当前通信。如果地址是广播地址,则从机接收信息,但是不用返回。
用户数据包括:数据2个字节,根据发送方向(主到从或是从到主)以及帧形式定义不同的用户数据。
帧尾:包括2个字节校验数据,先发低位,后发高位。
电梯系统接收到的数据帧不能直接显示,需要根据数据帧格式,对数据进行校验,然后解析,最后提取有用的数据给显示系统进行显示。本系统的操作如下:
rd = read(fd, rbuf, sizeof(rbuf)); //接收串口数据
if(yihuo_value(rbuf, 4) == rbuf[4]); //数据校验
num[0] = rbuf[1] & 0x01; //方向解析
num[1] = (rbuf[1]>>1) & 0x03; //状态解析
num[2] = (rbuf[1]>>3) & 0x01; //是否超载
num[3] = rbuf[2] & 0x1f; //楼层高位解析
num[4] = rbuf[3] & 0x1f; //楼层低位解析
3 显示板子系统设计
对于彩屏电梯显示系统而言,液晶屏的显示效果对客户的影响是至关重要的。因此,应用层的程序开发相当重要。考虑到图形界面控件的丰富程度、漂亮程度以及开源免费的持续升级等因素,选择了QTE/Qt5图形开发平台。显示板子系统的架构如图3所示。
图3 子系统架构图
3.1 Qt的移植
3.1.1 Qt的移植条件
Qt for Embedded Linux是用于嵌入式Linux所支持设备的领先应用程序架构。Qt可以在任何支持Linux的平台上运行,创建具有独特用户体验的具备高效内存效率的设备和应用程序[3]。Qt的移植需要满足以下几个基本条件:
① 开发环境:Linux内核2.4或更高;GCC版本3.3或更高;用于MIPS,其GCC版本3.4或更高。
② 占用存储空间:存储空间取决于配置,压缩后为1.7~4.1 MB;未压缩为3.6~9.0 MB。
③ 硬件平台:易于载入任何支持带C++编译器和帧缓冲器驱动Linux驱动的处理器;支持ARM、x86、MIPS、PowerPC。
④ Raspberry Pi(B型)满足以上条件,故可以进行Qt5的移植。
3.1.2 Qt5的移植准备
在做Qt5移植之前首先做以下移植准备:
① 建立一个文件夹/home/opt来存放编译所需的源码和文件。
② 下载Raspbian Wheezy镜像,本文采用2012-07-15-wheezy-raspbian.img。
③ 下载工具链,本文采用gcc-4.7-linaro-rpi-gnueabihf。
④ 下载交叉编译工具,本文采用cross-compile-tools。
⑤ 下载Qt5源码。
⑥ 下载qtjsbackend库的应用补丁。
然后建立文件夹mnt/rasp-pi-rootfs,将Raspbian Wheezy镜像挂载到此文件夹下,并进入Qt5源码文件夹执行初始化代码init-repository。
图4 程序流程图
3.1.3 Qt5的编译
首先进入cross-compile-tools文件夹执行一个脚本fixQualifiedLibraryPaths来修改链接和库路径。
然后编译qtbase,配置如下:
./configure-opengl es2 device linux-rasp-pi-g++ -device-option CROSS_COMPILE=~/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf- -sysroot /mnt/rasp-pi-rootfs-opensource -confirm-license -optimized-qmake -reduce-relocations -reduce-exports -release -make libs -prefix/usr/local/qt5pi
接着再编译其他模块如qtimageformats、qtsvg、qtjsbackend、qtscript、qtxmlpatterns、qtdeclarative、qtsensors、qt3d、qtgraphicaleffects、qtjsondb、qtlocation、qtdocgallery等。
当在镜像中编译安装完所有的模块之后,将其复制到SDcard。
3.1.4 安装Qt Creator
从网站http://qt-project.org/wiki/Create#QtonPi_App_SDK上下载Qt Creator安装包,并在Linux系统下对其进行安装配置。由于Qt5需要Qtcreator2.6.0以上的版本作为支持,本文采用2.6.1版本。
3.2 外围部件读取程序
本系统通过读取挂在I2C总线上的实时时钟芯片来获取时间信息,通过温度传感设备获取温度信息。本文以读取实时时钟芯片的数据为例,操作如下:
fd = open('/dev/i2c-1', O_RDWR); //打开I2C总线设备
ret = ioctl(fd,I2C_TENBIT,0); //设置数据的读写格式
ret = ioctl(fd, I2C_SLAVE_FORCE, I2C_ADDR);
//设置I2C总线上时钟芯片地址
pTime->Second = BCD_to_HEC((TimeBuff[pcf8563_SEC - 2] & 0x7f));
pTime->Minute = BCD_to_HEC((TimeBuff[pcf8563_MIN - 2] & 0x7f));
pTime->Hour = BCD_to_HEC((TimeBuff[pcf8563_HR - 2] & 0x3f));
这些设备的操作通过C代码来实现,然后将其编译成动态链接库的形式,供界面应用程序调用。
3.3 界面应用程序的实现
图形界面开发是Qt/Embedded开发的一个重点,本系统的界面结构包括楼层信息区域、运行方向区域、图片显示区域、温度时间显示区域、状态显示区域、本系统涉及到视图的跳转、数据的传递、控件的使用、布局和事件处理等等。其程序流程如图4所示。
整个显示界面通过MainWindow类实现,该类继承自QmainWindow,而各显示区域均通过继承QWidget类来实现。如图3所示,通过定时器1每隔30 ms调用MainWindow的槽函数checkLiftStstus()来获取由C函数open_uart485(int data[])解析的串口数据。
connect(timer, SIGNAL(timeout()), this, SLOT(checkLiftStatus())); //获取电梯信息
将解析后的信息传递给楼层信息区域,运行方向区域,状态显示区域分别进行显示。
indicatorDirection(data[0]); //方向信息
indicatorState(data[1]); //状态信息
liftCurrentFloorNum(data[2]); //楼层信息
图片视频显示区域是在类ShowController中实现的,当系统需要显示图片时,该类调用ImageView类的对象负责图片显示;当系统需要显示视频时,该类调用PlayerWidget类的对象负责处理视频播放。ImageView类和PlayerWidget类也是继承自Qwidget。ImageView类负责获取SD卡上的图片实例,将其显示在正确的位置,并通过定时器2实现图片的切换。PlayerWidget类负责启动MPlayer,并控制视频显示到正确的位置。
温度时间显示区域是在TimeView类和temperatureView类中实现。TimeView类的成员函数getCurrentTime()通过调用动态链接库的C函数getpcf8563Time(pcf8563_time *pTime)来读取挂在I2C总线上的时钟芯片的时钟信息,并将其显示在正确的区域上。
temperatureView类主要用于显示温度数据,而真正获取温度数据的过程是在TemperatureHandler类中实现的。开辟一个新的线程,通过定时器3每隔500 ms在槽函数readData()中调用一次动态链接库的C函数therm_ds18b20(long *date)来读取温度传感器的数据。
temperatureThread=new QThread(this); //开辟新线程
connect(temptimer,SIGNAL(timeout()),this,SLOT(readData())); //读取温度
4 系统调试结果
根据模拟的NICE3000通信协议、外围部件的操作及Qt5的图形界面编程,实现了电梯彩屏显示系统,其硬件设备图和调试结果图如图5、图6所示。
图 5 硬件设备图
图6 调试结果
结 语
本文对基于Raspberry Pi并利用Qt5编程来实现的电梯彩屏显示系统进行了阐述。首先介绍了整个系统的构架;接着在接口转接板子系统中介绍了NICE3000通信协议,并对其进行解析;然后在显示板子系统中介绍了外围部件的操作,以读取实时时钟芯片的数据为例;
[1] 杨汉祥,钟惠芳,邱志城. LED显示屏的应用——电梯屏[J]. 赣南师范学院学报,2003(6).
[2] Broadcom.BCM2835 Media Processor,2011.
[3] 陈鲲,陈云秋,刘信新. 基于Qt/Embedded的嵌入式Linux应用程序的设计[J]. 计算机与数字工程,2009(1).
[4] 王浩南, 刘益成. 基于嵌入式Linux系统下的Qt开发[J]. 电脑开发与应用,2010(1).
[5] Silicon.Raspberry Pi Cheat Sheet,2012.
[6] 张先淼, 刘新伟,金天均,等. 高可靠电梯通信系统的研究[J]. 机电工程,2007(10).
[7] 许晓荣,章坚武. 嵌入式Linux下LCD界面应用程序开发[J]. 液晶与显示,2006,21(3).
[8] 邱晓明. 嵌入式多媒体电梯信息显示系统设计[D].上海:上海交通大学,2009.
Elevator Colorful Display System Based on Raspberry Pi
Lai Jiang, Li Yingxiang, He Qi, Su Kai
(School of Communication Engineering,Chengdu University of Information Technology,Chengdu 610225,China)
Aiming at the problem of multimedia color display of elevator, under the support of ARM core platform Raspberry Piand microcontroller interface board, the design proposes and implementes a dual-processor architecture color display system which uses 485/CAN bus transmission technology, Linux application programming and Qt5 user interface programming. Compared with traditional display system, the color display system interface is more beautiful, more feature-rich and has a low cost, high stability and other characteristics. The actual test results show that this elevator color display system is feasible and effective.
elevator; dual-processor architecture; Qt5; Raspberry Pi
省部级—四川省教育厅项目(11ZA113)。
TN91
A
迪娜
2013-12-20)