基于树莓派平台的电梯彩屏显示系统设计
Qt的移植
3.1.1 Qt的移植条件
Qt for Embedded Linux是用于嵌入式Linux所支持设备的领先应用程序架构。Qt可以在任何支持Linux的平台上运行,创建具有独特用户体验的具备高效内存效率的设备和应用程序。Qt的移植需要满足以下几个基本条件:
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
①开发环境:Linux内核2.4或更高;GCC版本3.3或更高;用于MIPS,其GCC版本3.4或更高。
②占用存储空间:存储空间取决于配置,压缩后为1.7~4.1 MB;未压缩为3.6—9.0MB。
③硬件平台:易于载入任何支持带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-reposi tory。
3.1.3 Qt5的编译
首先进入cross-compile-tools文件夹执行一个脚本fixQualifiedLibraryPaths来修改链接和库路径。
然后编译qtbase,配置如下:
当在镜像中编译安装完所有的模块之后,将其复制到SDcard。
3.1.4 安装Qt Creator
从网站http://qt-project.org/wiki/Crcate#QtonPi_App_SDK上下载Qt Crcator安装包,并在Linux系统下对其进行安装配置。由于Qt5需要Qtcreator2.6.0以上的版本作为支持,本文采用2.6.1版本。
3.2 外围部件读取程序
本系统通过读取挂在I2C总线上的实时时钟芯片来获取时间信息,通过温度传感设备获取温度信息。本文以读取实时时钟芯片的数据为例,操作如下:
这些设备的操作通过C代码来实现,然后将其编译成动态链接库的形式,供界面应用程序调用。
3.3 界面应用程序的实现
图形界面开发是Qt/Embedded开发的一个重点,本系统的界面结构包括楼层信息区域、运行方向区域、图片显示区域、温度时间显示区域、状态显示区域、本系统涉及到视图的跳转、数据的传递、控件的使用、布局和事件处理等等。其程序流程如图4所示。
整个显示界面通过MainWindow类实现,该类继承自QmainWindow,而各显示区域均通过继承QWidget类来实现。如图3所示,通过定时器1每隔30 ms调用Main-Window的槽函数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_dsl8b20(long*date)来读取温度传感器的数据。
temperatureThread=new QThread(this); //开辟新线程
connect(temptimer,SIGNAL(timeout()),this,SLOT(readData())); //读取温度
4 系统调试结果
根据模拟的NICE3000通信协议、外围部件的操作及Qt5的图形界面编程,实现了电梯彩屏显示系统,其硬件设备图和调试结果图如图5、图6所示。
结语
本文对基于Raspberry Pi并利用Qt5编程来实现的电梯彩屏显示系统进行了阐述。首先介绍了整个系统的构架;接着在接口转接板子系统中介绍了NICE3000通信协议,
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- SQLite嵌入式数据库系统的研究与实现(02-20)
- 革新2410D开发板试用手记(04-21)