欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-14 08:22:44
...

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

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

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

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

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

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

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

  hcitool scan

 

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

再用命令,连接蓝牙模块

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

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

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

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

ls /dev -l

 

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

 

二、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命令实现),实现了在命令界面下实现树莓派与蓝牙模块的配对