IMX6Q上蓝牙设备测试

来源:互联网 发布:雷神软件下载 编辑:程序博客网 时间:2024/05/22 11:44

目前,蓝牙技术已经比较成熟,特别是基于手机和PC得蓝牙文件传输。
本文主要讲述基于嵌入式arm linux的蓝牙文件传输。
现行2.6.x的linux内核都已经集成了bluez蓝牙驱动,对于2.4版本内核的需要到bluez官方网站下载并安装bluez蓝牙驱动。
本为基于2.6版本的内核讲述。对于2.4下载bluez后安装即可。有了bluez蓝牙驱动还需要安装bluez-libs库和bluez-utils工具
蓝牙测试流程:利用手机连接蓝牙模块,然后进行文件传输。

1. 移植libs库和utils工具到arm开发板

bluez-utils:蓝牙配置工具,包括hciconfig,hcitool,rfcomm
openobex:蓝牙传输工具
下载bluez-utils:http://bluez.sf.net/download/bluez-utils-3.36.tar.gz
下载openobex:https://sourceforge.net/projects/openobex/files/openobex/1.5/openobex-1.5.0-Source.zip/download
bluez-utils依赖库:
expat-2.0.1:http://downloads.sourceforge.net/expat/expat-2.0.1.tar.gz
dbus-1.4.1:https://dbus.freedesktop.org/releases/dbus/dbus-1.4.1.tar.gz
zlib-1.2.5:http://download.chinaunix.net/down.php?id=35616&ResourceID=12241&site=1
glib-2.28.8:https://download.gimp.org/pub/glib/2.28/glib-2.28.6.tar.gz
bluez-libs-3.36:http://bluez.sf.net/download/bluez-libs-3.36.tar.gz
openobex-1.5依赖库:

2. 移植bluez-utils工具

2.1、编译expat-2.0.1

#!/bin/sh./configure --host=arm-linux-gnueabihf --prefix=$PWD/installmake && make install

2.2、编译dbus-1.4.1

#!/bin/sh./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --prefix=$PWD/install \CFLAGS=-I$PWD/../expat-2.0.1/install/include \LDFLAGS=-L$PWD/../expat-2.0.1/install/lib \--enable-abstract-sockets --with-x=nomake && make install修改dbus中的pkgconfig文件dbus-1.pc,否则后面编译bluez-utils-3.36会报错#vim install/lib/pkgconfig/dbus-1.pc 16 Cflags: -I${includedir} -I${libdir}/dbus-1.0/include

2.3、编译zlib-1.2.5

 #./configure --prefix=$PWD/install 替换zlib中所有的编译工具链为arm-linux-gnueabihf- #vim Makefile 19 CC=arm-linux-gnueabihf-gcc 20 21 CFLAGS= -D_LARGEFILE64_SOURCE=1 22 #CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 23 #CFLAGS=-g -DDEBUG 24 #CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ 25 #           -Wstrict-prototypes -Wmissing-prototypes 26 27 SFLAGS= -fPIC -D_LARGEFILE64_SOURCE=1 28 LDFLAGS= -L. libz.a 29 TEST_LDFLAGS=-L. libz.a 30 LDSHARED=arm-linux-gnueabihf-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map 31 CPP=arm-linux-gnueabihf-gcc -E 32 33 STATICLIB=libz.a 34 SHAREDLIB=libz.so 35 SHAREDLIBV=libz.so.1.2.5 36 SHAREDLIBM=libz.so.1 37 LIBS=$(STATICLIB) $(SHAREDLIBV) 38 39 AR=arm-linux-gnueabihf-ar rc 40 RANLIB=arm-linux-gnueabihf-ranlib 41 LDCONFIG=arm-linux-gnueabihf-ldconfig 42 LDSHAREDLIBC=-lc 43 TAR=tar 44 SHELL=/bin/sh 45 EXE= #make && make install

2.4、编译glib-2.28.8

vim compile.sh

#!/bin/shecho "glib_cv_stack_grows=no">config.cacheecho "glib_cv_uscore=no">>config.cacheecho "ac_cv_func_posix_getpwuid_r=yes">>config.cacheecho "ac_cv_func_posix_getgrgid_r=yes">>config.cacheecho "ac_cv_lib_rt_clock_gettime=no">>config.cacheecho "glib_cv_monotonic_clock=yes">>config.cacheexport PKG_CONFIG_PATH=$PWD/../zlib-1.2.5/install/lib/pkgconfig./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc --prefix=$PWD/install/ -cache-file=config.cachemake && make install#./compile.sh

2.5、编译bluez-libs-3.36

#./configure --host=arm-linux-gnueabihf --prefix=$PWD/install#make && make install

2.6、 编译bluez-utils-3.36

#vim compile.shexport TOPDIR=$PWD/..export PKG_CONFIG_PATH=$TOPDIR/glib-2.28.8/install/lib/pkgconfig:\$TOPDIR/dbus-1.4.1/install/lib/pkgconfig:\$TOPDIR/zlib-1.2.5/install/lib/pkgconfig:\$TOPDIR/bluez-libs-3.36/install/lib/pkgconfig./configure --host=arm-linux-gnueabihf --prefix=$PWD/install\CFLAGS="`pkg-config --cflags bluez dbus-1 glib-2.0 zlib`" \LDFLAGS="`pkg-config --libs bluez dbus-1 glib-2.0 zlib`"#make &&make install重新编译一次,因为生成的部分命令有默认路径问题#vim compile.shexport TOPDIR=$PWD/..export PKG_CONFIG_PATH=$TOPDIR/glib-2.28.8/install/lib/pkgconfig:\$TOPDIR/dbus-1.4.1/install/lib/pkgconfig:\$TOPDIR/zlib-1.2.5/install/lib/pkgconfig:\$TOPDIR/bluez-libs-3.36/install/lib/pkgconfig./configure --host=arm-linux-gnueabihf \CFLAGS="`pkg-config --cflags bluez dbus-1 glib-2.0 zlib`" \LDFLAGS="`pkg-config --libs bluez dbus-1 glib-2.0 zlib`"#make然后将install/bin和install/sbin目录下的文件替换掉

3. 移植openobex-1.5工具

#vim compile.sh#!/bin/shexport TOPDIR=$PWD/../export PKG_CONFIG_PATH=$TOPDIR/bluez-libs-3.36/install/lib/pkgconfig./configure --host=arm-linux-gnueabihf --prefix=$PWD/install\CFLAGS="`pkg-config --cflags bluez`" \LDFLAGS="`pkg-config --libs bluez`"#make && make install

4.连接蓝牙设备

先将上述编译生成的库文件及命令拷贝至板子上。查看蓝牙设备#hciconfig 激活蓝牙设备#hciconfig hci0 up配置蓝牙设备#vim /etc/bluetooth/rfcomm.conf## HCI daemon configuration file.## HCId optionsoptions {        # Automatically initialize new devices        autoinit yes;#改成yes        # Security Manager mode        #   none - Security manager disabled        #   auto - Use local PIN for incoming connections        #   user - Always ask user for a PIN        #        security auto;        # Pairing mode        #   none  - Pairing disabled        #   multi - Allow pairing with already paired devices        #   once  - Pair once and deny successive attempts        pairing multi;        # Default PIN code for incoming connections        passkey "BlueZ";        pin_helper /usr/bin/bluepin}# Default settings for HCI devicesdevice {        # Local device name        #   %d - device id        #   %h - host name        name "BlueZ (%d)";        # Local device class        class 0x000100;        # Default packet type        #pkt_type DH1,DM1,HV1;        # Inquiry and Page scan        iscan enable; pscan enable;        # Default link mode        #   none   - no specific policy         #   accept - always accept incoming connections        #   master - become master on incoming connections,        #            deny role switch on outgoing connections        lm accept;        # Default link policy        #   none    - no specific policy        #   rswitch - allow role switch        #   hold    - allow hold mode        #   sniff   - allow sniff mode        #   park    - allow park mode        lp rswitch,hold,sniff,park;}root@myzr:~# cat /etc/bluetooth/rfcomm.conf ## RFCOMM configuration file.#rfcomm0 {#       # Automatically bind the device at startup        bind no;##       # Bluetooth address of the device        device CC:08:8D:5B:26:94;#改成待连接设备MAC地址##       # RFCOMM channel for the connection        channel 1;#通道##       # Description of the connection        comment "Example Bluetooth device";}#vim /etc/bluetooth/hcid.conf## HCI daemon configuration file.## HCId optionsoptions {        # Automatically initialize new devices        autoinit yes;        # Security Manager mode        #   none - Security manager disabled        #   auto - Use local PIN for incoming connections        #   user - Always ask user for a PIN        #        security auto;        # Pairing mode        #   none  - Pairing disabled        #   multi - Allow pairing with already paired devices        #   once  - Pair once and deny successive attempts        pairing multi;        # Default PIN code for incoming connections        passkey "BlueZ";    #pin_helper为线程名称,该线程调用/usr/bin/bluepin    #/usr/bin/bluepin为shell脚本,内容下文提及        pin_helper /usr/bin/bluepin}# Default settings for HCI devicesdevice {        # Local device name        #   %d - device id        #   %h - host name        name "BlueZ (%d)";        # Local device class        class 0x000100;        # Default packet type        #pkt_type DH1,DM1,HV1;        # Inquiry and Page scan        iscan enable; pscan enable;        # Default link mode        #   none   - no specific policy         #   accept - always accept incoming connections        #   master - become master on incoming connections,        #            deny role switch on outgoing connections        lm accept;        # Default link policy        #   none    - no specific policy        #   rswitch - allow role switch        #   hold    - allow hold mode        #   sniff   - allow sniff mode        #   park    - allow park mode        lp rswitch,hold,sniff,park;}#vim /usr/bin/bluepin#!/bin/sh#输出PIN码echo "PIN:1234"配置蓝牙PIN码文件#vim /var/lib/bluetooth/A4:17:31:C7:9B:B6/pincodesCC:08:8D:5B:26:94 1234/var/lib/bluetooth/A4:17:31:C7:9B:B6/pincodes:A4:17:31:C7:9B:B6本地蓝牙设备MAC地址#待连接蓝牙设备MAC地址CC:08:8D:5B:26:94#1234:PIN码#hcid /etc/bluetooth/hcid.conf#rfcomm bind /dev/rfcomm0 CC:08:8D:5B:26:94 1方式1:连接蓝牙设备,在我这不好用#rfcomm conn /dev/rfcomm0 CC:08:8D:5B:26:94 1方式2:连接蓝牙设备#cat /dev/rfcomm0 &

嵌入式板子上蓝牙模块连接我的手机示意图:
这里写图片描述
连接过程中遇到的PIN码问题参考blog:http://blog.csdn.net/linuxheik/article/details/51923924

基于蓝牙传输文件

0 0