APP下载

基于Qt/Embedded的蓝牙广告系统设计与实现

2013-09-12赵建军

微处理机 2013年4期
关键词:内核蓝牙嵌入式

王 超,赵建军,李 伟,徐 钊

(昆明理工大学,云南 650500)

1 引言

随着网络技术和信息技术的进一步发展,人们对通信系统的需求越来越集中于网络宽带和无线通信技术之上。蓝牙是由爱立信、诺基亚、IBM、英特尔和东芝等五家公司联合制定的短矩离无线通信技术[1-2]。蓝牙技术工作在全球通用的 2.4GHz频段,即ISM频段,作为一种近矩离无线技术规范,因其有着开放性、低功耗、低成本、低辐射、安全性、体积小[3-6]等众多优点而被广泛运用到PDA、移动电话、台式计算机、笔记本电脑等[7-8]。以蓝牙技术为依托,构建出了一个小型广告系统,通过在室内或者室外布置蓝牙广播站,这些蓝牙设备会自动搜索范围内的蓝牙设备,询问是否愿意接收该文件,若用户同意接收该文件时,系统会自动将该文件发送到用户终端。与现有广告媒体相比,该系统搭配了蓝牙技术强大的背景和功能,具有很好的适用性,稳定性。通过蓝牙设备,将广告信息发送到用户带有蓝牙设备的手持设备中,缩短了用户对广告信息获取的时间。Qt是一个功能强大的 GUI系统,Qt/Embedded是一个面向嵌入式系统的Qt版本[9]。提出一种基于蓝牙技术的嵌入式开发方法,融合嵌入式技术、蓝牙技术以及Qt/Embedded界面,构建一体化的嵌入式蓝牙应用系统。利用蓝牙官方提供的协议栈Bluez进行开发,在开发平台完成了Bluez的移植,Qt设计器完成控制界面。在界面下对蓝牙设备进行编程,完善蓝牙设备的广告功能,实现一个嵌入式蓝牙广告的小型系统。

2 系统硬件平台设计

ARM9硬件平台以S3C2440A为核心处理器,外围可扩展NAND/NOR Flash、音频输入输出接口、USB接口、RS232接口、RJ45接口、SD卡接口、复位电路、时钟电路及电源电路等。S3C2440A采用ARM920T内核,主频203MHz,内部具有32M NAND Flash,16M NOR Flash及64M SDRAM。外围扩展USB接口和RS232用于蓝牙适配器连接和PC端口通信。系统硬件原理图如图1所示。

图1 系统硬件原理图

USB模块集成在 S3C2440A芯片中,在使用S3C2440A时可以同时使用其中的 USB模块。S3C2440A带有两个USB控制器,一个主设备控制器和一个从设备控制器,两个设备均为四线控器,分别接5V电源,D-、D+数据信号和接地线。主USB主要用于接U盘、摄像头等,从USB使用USB延长线,连接到PC,主要用于传输数据。在本次开发中USB主要用于连接蓝牙适配器。

串口在开发或者是实验中都是非常重要的接口之一,通过它能与PC进行数据传输,交互操作等。开发平台具有一个五线异步串行和一个UART扩展接口。本设计采用SP3232EEN电压转换芯片将引出串口的 RSRXD0和 RSTXD03.3V电平转换为232电平。UART可工作在中断模式和DMA模式。

3 构建广告系统ARM开发平台

3.1 Linux内核在开发平台上的移植

由于Linux内核过于庞大,对于受到资源限制的嵌入式系统来说,将其完整的运用到嵌入式系统中似乎是不太可能完成的事。所以为了能将嵌入式系统资源进行合理的利用、分配,Linux内核必须经过裁剪,配置,保留我们仅需要的部分,将其运用到嵌入式系统当中[10]。首先在宿主机上建立交叉编译环境,然后从Linux官网上下载Linux-2.6.38内核源代码,将其解压到工作目录中,检查Makefile文件,确保ARCH=arm和CROSS_COMPILE=armlinux,在终端中进入其工作目录,输入make menuconfig进行内核配置,配置完成后按EXIT并保存退出。然后采用压缩方式,执行make zImage,完成这个命令后,在其工作目录的arch/arm/boot文件下生成了内核压缩镜像zImage,将其烧写到开发平台中。以这种方式编译出来的内核小,有利于进行嵌入式系统的开发。

3.2 蓝牙协议栈BlueZ的移植

因为在linux2.6以上的版本中,蓝牙内核已经集成在linux内核中,所以我们只要进行蓝牙协议栈的移植。在内核代码中,Bluez软件开发包实现了主机控制接口和套接字接口的全部功能[11]。进入蓝牙官网,下载蓝牙函数库bluez-lib-3.36、蓝牙工具集 bluez-utils-3.36和其所依赖的库文件expat-2.0.1或者 libxml2 -2.6.32、gblib -2.22.4、libusb -0.1.12、dbus - 1.3.0 和 openobex - 1.12。将它们进行解压安装。然后进入内核目录,再次输入make menuconfig配置内核,将我们所需要的蓝牙网络协议栈加入内核当中,重新编译烧写zImage。将蓝牙 bin、sbin、etc、lib拷贝到开发平台对应的文件系统下。在内核代码中,Bluez软件开发包实现了通过上述说明完成蓝牙协议栈BlueZ的移植之后,基于ARM Linux的蓝牙应用开发平台就已经搭建好了,下面我们将利用蓝牙函数库来进行嵌入式平台下蓝牙通信的开发和应用。

3.3 Qt编译

从网上下载我们所要用到的tmake-1.11、qtembedded-2.3.7、qt- x11 - 2.32、qtopia - free -1.7.0的RPM包并安装,在PC平台下进行编译,并在PC机上的linux下进行配置、编译和安装:

./configure–qconfig qpe–xplatform x86-linux-g++ -xplatform arm-linux-g++Qtopia开发最为核心的东西是由Qtopia开发工具包提供的Software Development kit(SDK),在Qtopia版本的编译和安装之后可以得到如下工具包:

(1)虚拟帧缓冲qvfb(Qt virtual frame buffer):是一个X Windows下的framebuffer仿真器,它主要有两个方面的作用,一是它建立了一个system V共享目录,用户只需将需要显示的图像按像素格式要求加入到共享内存里,qvfb就可以显示图像了;二是提供了键盘和鼠标接口。

(2)designer工具:是利用Qt组件设计窗口布局或是用来组建GUI的工具。它提供了信号与槽的连接功能,但是没有办法实现组件对象函数的重载和添加。

(3)tmake工具:用来生成Makefile文件;

(4)用户界面编译器uic工具:将designer工具设计出来的ui文件或者XML格式文件生成源代码;

(5)元对象编译器moc工具:用来生成一些与信号和槽相关的底层代码预编译工具。

有了这些工具以后,配合交叉编译GUN C++就可以在linux环境下进行Qt/Embedded的应用程序开发。

Qt designer是一款Qt提供的非常强大的图形编译工具,提供了非常多的部件资源,如按钮、菜单、应用程序窗口等,把它们结合起来使用可以完成各种各样我们需要实现的界面。利用Qt designer可以加快我们写Qt程序速度,并且可以使我们能更快的学会Qt[12]。本文是利用Qt desinger设计出控制界面,实现广告系统功能,具体的操作步骤如下:①利用Qt designer完成所需要的界面设计,并生成*.ui文件类型;②建立转换ui为源码的脚本文件,并生成*.h头文件和*.cpp文件;③手工建立 main.cpp文件④利用progen软件产生pro工程文件;⑤利用tmake工具生成相应的makefile文件,并做出相应的修改,去掉文件重复部分;⑥制作桌面启动器和桌面图标;⑦修改*.cpp文件使其完成要实现功能的编程;⑧使用make编译。

4 蓝牙广告系统功能设计

经过上述的一系列步骤之后,一个完整的嵌入式蓝牙开发平台就已经搭建好了。在搭建的平台之下,利用蓝牙函数库来进行嵌入式蓝牙通信的开发。Bluez-lib-3.36主要提供程序开发的库函数和应用程序接口,以便于用户进行蓝牙应用的开发。Bluez-utils-3.36提供蓝牙工具集和蓝牙设备的配置文件,实现蓝牙的初始化和控制。其中几个重要的工具功能为:hciconfig工具对蓝牙进行配置,如开始蓝牙设备,暂停蓝牙设备等,格式上类似于ifconfig,可以用来设置HCI设备的参数;hcitool工具用来进行查找附近的蓝牙设备,显示远端蓝牙设备的地址,名称等,能够完成与蓝牙相关的多种功能;l2ping主要用来建立socket形式来调用L2CAP接口,如查看两个蓝牙设备是否建立网络连接。sdptool主要用来查看与蓝牙服务相关的多种功能或者管理本地SDPD维护的数据库,用于查看搜索到的蓝牙设备可以得到的服务功能。Hciattach工具主要用来初始化蓝牙设备。Qt designer可以用来为我们设计合理的蓝牙广告控制界面,并实现蓝牙广告的功能。

构建以ARM Linux为开发平台的蓝牙设备与开发者,蓝牙设备相互之间的通信网络,从而构建基于Qt界面的蓝牙广告系统。系统大概包括以下几个部分:ARM硬件平台、Linux系统、蓝牙函数库、Qt界面、蓝牙广告系统功能实现。

蓝牙广告系统在设计过程中包括了以下几个功能模块:蓝牙控制模块、蓝牙搜索模块、服务发现模块、连接模块、广告发送模块。每个模块具体功能实现如下:

(1)控制模块:控制模块提供一个可以控制蓝牙服务器端的蓝牙设备接口,来控制蓝牙服务器端所要进行的操作,主要有以下几个方面:初始化蓝牙设备,启动服务器蓝牙模块,暂停、恢复、重启蓝牙服务模块,获取搜索到的蓝牙设备,与蓝牙客户端建立连接,侦听蓝牙服务器端的运行状态等。

(2)搜索模块:每一个蓝牙设备的48位地址是蓝牙设备的唯一标识符,只有在得到蓝牙设备地址之后,蓝牙设备之间才能进行信息交互。当启动蓝牙设备之后,利用搜寻功能搜索附近所有的蓝牙设备,获取蓝牙设备相应的48位地址标识符、蓝牙设备名字、蓝牙设备类型等相关信息。搜索结束后,将所有得到的蓝牙设备地址进行存储。

(3)服务发现模块:在蓝牙设备出厂之前,蓝牙生产商在蓝牙设备中就已经编码了蓝牙设备的服务类型和其相关的类别属性。利用蓝牙的服务发现模块可以得到搜索到的蓝牙设备可以支撑的服务信息,比如 OBEX File Transfer、OBEX Object Push、Dial-up networking、Voice Gateway等等。

(4)连接模块:当一个蓝牙设备与其它蓝牙设备进行信息交互时,一些蓝牙备需要蓝牙服务器端提供PIN码,这时蓝牙设备把固化在hcid中的PIN码推送到蓝牙设备,再由蓝牙设备做出响应。当服务器端蓝牙设备与客户端蓝牙设备取得连接之后,我们就可以进行蓝牙设备之间信息的交互。

(5)广告发送模块:蓝牙设备搜索到附近蓝牙设备之后,该蓝牙设备就会向搜索到的蓝牙设备发送广告内容。该设计中提供了手动和自动两种发送方式:点击界面的browse功能按钮找到需要发送的广告内容,用下面两种方法进行蓝牙设备广告的推送。

(6)广告效果的反馈:待蓝牙设备发送广告之后,通过反馈功能来侦听广告的发送情况,如:该广告内容是否发送成功,在这段时间内发送了多少条广告,记录下发送成功或者失败的蓝牙物理地址,以便进行统计。

界面设计如图2所示。

图2 蓝牙广告系统界面

手动实现打开蓝牙设备,点击search按钮,搜索蓝牙设备,将搜索到的蓝牙设备名字,MAC地址分别显示在对应的栏目下,选择我们想要发送的蓝牙设备。然后点击browse选择我们所要发送的文件,文件的路径名称会显示在browse按钮左边的line edit中,然后点击Send按钮将广告内容或者文件发送到对应的蓝牙设备下。

设置界面主要用来对蓝牙设备PIN Code和蓝牙设备名称的更改,输入自己喜欢的PIN Code和名称,点击更改PIN码按钮和更改名称按钮分别对PIN码和名称做出相应的修改,点击Close关闭整个系统。

自动发送是整个系统的核心功能,设置所要发送文件和希望发送的时间(最大可设为24小时),点击start按钮,系统会自动搜索附近的蓝牙设备。在设置好的发送时间内,蓝牙设备会自动搜索附近的蓝牙设备,搜索到蓝牙设备后自动与之进行连接,待搜索到的蓝牙设备同意服务请求后,系统会将文件自动地发送给搜索到的蓝牙设备。等设定的时间结束后,系统会自动暂停。待重新设定文件与时间,重新开始广告文件的发送。点击Cancel可以将正在活动的内容取消。点击Close关闭整个系统。

在蓝牙协议栈上选用蓝牙规范中的主机控制接口,服务发现协议,逻辑链路控制与适配协议、交换协议等,并在此基础上实现了蓝牙系统的广告功能。

服务器端系统详细的程序流程图如图3所示。

图3 程序流程图

通过上述开发方法完成嵌入式蓝牙系统的设计后,对该蓝牙广告系统做了一定的测试。通过测试,证明了该系统已经能和本身之外其它可见的蓝牙设备建立正常的通信连接,能很好的实现本设计功能。

5 结 束 语

根据蓝牙协议设计出了一种基于ARM+Linux下Qt界面的蓝牙广告系统,该系统可以对文字,图片,视频,名片等众多格式的广告信息发布到搜索到的蓝牙设备上,同时对发送情况和状态进行记录,以便能很好的统计这个广告系统的发送效果。利用Qt界面来实现在对蓝牙的控制,可以很好地实现人机互连,简单,易懂,操作性高。随着蓝牙技术和蓝牙广告媒体、以及短距离无线技术的进一步发展,蓝牙广告将会被运用在越来越多的地方,将会使更多的信息进入到我们的手机或者其它集成有蓝牙的设备中。同时文中介绍的蓝牙广告也可以和电脑相结合,实现电脑与嵌入式平台的双向操作,而达到统一的操作目的,实现蓝牙广告媒体多种方式的统一联播。

[1]钱志鸿,杨帆,周求湛.蓝牙技术原理、开发与应用[M].北京:北京航空航天大学出版社,2006.

[2]严紫建,刘元安.蓝牙技术[M].北京:北京邮电大学出版社,2001.

[3]卜奎昊,陈伏兵,宋杰.基于Bluez协议栈的嵌入式系统无线通信实现[J].微计算机信息,2009,25(7-2):172-173.

[4]张超,顾晓峰,赦卫娟.基于嵌入式蓝牙模块的嵌入式系统设计[J].电子与封装,2009,12(9):20 -22.

[5]徐峰.基于 ARM9和 LINUX的蓝牙视频传输系统[D].湖南:国防科技大学研究生院,2010.

[6]张健,林海.基于嵌入式Linux的蓝牙通信的实现[J].消防技术与产品信息,2011,(2):53-55.

[7]蒋纲,周敬利,余胜生,等.基于Bluetooth OBEX协议的文件传输技术的研究[J].小型微型计算机系统,2003,4(24):688 -690.

[8]周龙.嵌入式蓝牙技术研究及实现[D].湖北:华中科技大学,2009.

[9]周鸣争.嵌入式系统应用[M].北京:中国铁道出版社,2010.

[10]邓俊华,杜玉晓,敖永红.基于 S3C2410处理器的linux移植[J].微型电脑应用,2009(25):53-55.

[11]倪晓军,郑龙,章志成,等.基于蓝牙技术的嵌入式广告发送系统设计[J].科学技术与工程,2011,11(8):1722-1727.

[12]文全刚.嵌入式Linux操作系统的原理与应用[M].北京:北京航天航空大学出版社,2011.

猜你喜欢

内核蓝牙嵌入式
蓝牙音箱的直线之美
多内核操作系统综述①
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
TS系列红外传感器在嵌入式控制系统中的应用
Linux内核mmap保护机制研究
简单、易用,可玩性强Q AcousticsBT3蓝牙音箱
适合自己的才是最好的 德生(TECSUN) BT-50蓝牙耳机放大器
搭建基于Qt的嵌入式开发平台