树莓派3B板载蓝牙与HC05蓝牙模块通讯(C++编程实现)

    在项目中需要使用树莓派的板载蓝牙与HC05蓝牙模块进行通讯,但目前HC05和树莓派的原生接口兼容性并不完善,尝试了很多方案,以下是一个目前能用的方案.

一、树莓派与HC05蓝牙模块进行连接

在树莓派的图形界面单机右上角蓝牙图标>Add Device,如下图所示,

点击Pair,输入配对密码,一直OK,最后会弹出连接失败.如下图所示,没关系,这里只是输入配对密码.

在puTTY客户端里连接树莓派,使用命令搜索蓝牙模块的mac地址

  hcitool scan

再用命令,连接蓝牙模块

sudo rfcomm connect 0 20:16:05:24:15:14 1&

至此连接蓝牙模块成功,此时可以看到蓝牙模块上的LED灯频率改变.

输入命令 ,可以看到蓝牙端口

ls /dev -l

二、C++编程连接打开蓝牙串口

1.蓝牙串口操作所需头文件

 #include     <stdio.h>      /*标准输入输出定义*/  
 #include     <stdlib.h>     /*标准函数库定义*/  
 #include     <unistd.h>     /*Unix 标准函数定义*/  
 #include     <sys/types.h>    
 #include     <sys/stat.h>     
 #include     <fcntl.h>      /*文件控制定义*/  
 #include     <termios.h>    /*PPSIX 终端控制定义*/  
 #include     <errno.h>      /*错误号定义*/  

2.打开蓝牙串口,并发送数据

int fd = open("/dev/rfcomm0", O_RDWR | O_NOCTTY | O_NDELAY);
int nByte = 0; 
if (fd < 0) 
    return; 
struct termios options;
tcgetattr(fd, &options);
cfsetispeed(&options, B9600);
cfsetospeed(&options, B9600);
options.c_lflag &= ~(ICANON | ECHO | ECHOE); /*Input*/
options.c_oflag &= ~OPOST;   

char  data2[11] = { 0xFF,0xAA, 0x3,0xC,0x0,0x0,0x0,0x0, 0x0,0x0 };
data2[10] = generateSign(data2);
nByte = write(fd, data2, 11); 
close(fd);

至此编程部分结束,但我的程序需要开机自动运行,因此需要自动连接蓝牙.

三、蓝牙开机自动连接

在树莓派 /etc/init.d 新建文件connectBluetooth.sh,输入:


 #!/bin/sh
sleep 3 #等待系统加载好相关库
sudo rfcomm  connect 0 20:16:05:24:15:14 1&



改用root 帐号登录,为connectBluetooth.sh文件授权

sudo chmod 777 connectBluetooth.sh

设置connectBluetooth.sh自动启动

sudo update-rc.d connectBluetooth.sh defaults

如此还有一个小问题,当HC05模块比树莓派开机早了,就无法连接上,我用了比较粗暴的方法,使用代码直接让树莓派重启.

system("sudo reboot");

四、存在问题

1、HC05模块和树莓派的蓝牙配对还存在问题,必须在图形界面下完成.

2、未实现使用代码连接蓝牙模块,连接蓝牙模块就必须使用重启树莓派的方式。

-------------------------20180915更新------------------------

在下一篇博客 树莓派3B板载蓝牙与HC05蓝牙模块配对(shell命令实现),实现了在命令界面下实现树莓派与蓝牙模块的配对

 

 

猜你喜欢

转载自blog.csdn.net/Lynn_Y_Lin/article/details/80381922
今日推荐