树莓派蓝牙连接手机或其他设备(主机+从机) |
您所在的位置:网站首页 › 搜索蓝牙设备连接苹果手机 › 树莓派蓝牙连接手机或其他设备(主机+从机) |
扫描&查看MAC:sudo bluetoothctl
输入命令sudo bluetoothctl进入此工具的命令界面 使用命令scan on命令可以扫描当前环境中存在的蓝牙设备。 找到需要连接的设备,记录MAC地址。 [NEW] Device 64:46:0B:05:8F:07 64-46-0B-05-8F-07 [CHG] Device 64:46:0B:05:8F:07 LegacyPairing: no [CHG] Device 64:46:0B:05:8F:07 Name: SU_Band [CHG] Device 64:46:0B:05:8F:07 Alias: SU_Band使用bluetoothctl进行连接有些问题。 连接设备:bluezbluez是linux官方蓝牙协议栈。 安装和配置 #安装 sudo apt-get install pi-bluetooth bluez bluez-firmware blueman #添加用户到蓝牙组(假设用户名为pi) sudo usermod -G bluetooth -a pi sudo reboot #重启 #启动/增加SPP(Serial Port Profile) sudo vim /etc/systemd/system/dbus-org.bluez.service给配置文件增加两行: [Unit] Description=Bluetooth service Documentation=man:bluetoothd(8) ConditionPathIsDirectory=/sys/class/bluetooth [Service] Type=dbus BusName=org.bluez #增加下面这两行 ExecStart=/usr/lib/bluetooth/bluetoothd -C ExecStartPost=/usr/bin/sdptool add SP NotifyAccess=main #WatchdogSec=10 #Restart=on-failure CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE LimitNPROC=1 ProtectHome=true ProtectSystem=full [Install] WantedBy=bluetooth.target Alias=dbus-org.bluez.service再重启sudo reboot 使用命令hciconfig查看树莓派的蓝牙信息。 hci0: Type: Primary Bus: UART BD Address: AA:AA:AA:AA:AA:AA ACL MTU: 1021:8 SCO MTU: 64:1 UP RUNNING PSCAN ISCAN RX bytes:353313 acl:4941 sco:0 events:9829 errors:0 TX bytes:130290 acl:8889 sco:0 commands:217 errors:0可以看到设备是hci0 SSP模式与其他蓝牙设备进行连接 从机模式:被动连接使用命令sudo rfcomm watch hci0开启等待连接 pi@raspberrypi:~ $ sudo rfcomm watch hci0 Waiting for connection on channel 1打开手机蓝牙调试助手,连接树莓派蓝牙 连接成功后,/dev/目录下将生成一个设备rfcomm0,可以直接当做串口设备进行使用。 #发送数据 echo 1234541 > /dev/rfcomm0 #读取数据 cat /dev/rfcomm0 主机模式:主动连接使用命令:sudo rfcomm conn /dev/rfcomm0 [MAC]连接到目的主机 pi@raspberrypi:~ $ sudo rfcomm conn /dev/rfcomm0 64:46:0B:05:8F:07 Connected /dev/rfcomm0 to 64:46:0B:05:8F:07 on channel 1 Press CTRL-C for hangup同样,连接成功后可以使用设备rfcomm0进行通讯 #include //系统常用类型定义 #include //系统常用文件状态定义 #include //文件控制相关 #include //POSIX常用系统调用 #include #include #include //POSIX线程管理 #include #include #include #include #include #include #include int fd;//串口的句柄 /*串口初始化函数 *@method Usart_Init *@param{void} *@return {void} */ void Usart_Init() { struct termios Opt; memset(&Opt ,0 ,sizeof(Opt)); tcgetattr(fd, &Opt); cfsetispeed(&Opt,B115200); /*设置为115200Bps*/ cfsetospeed(&Opt,B115200); Opt.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); //特殊字符不做特殊处理 Opt.c_oflag &= ~OPOST; Opt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); Opt.c_cflag |= CLOCAL | CREAD;//保证程序不会成为端的占有者|使端口能读取输入的数据 Opt.c_cflag &= ~CSIZE; Opt.c_cflag |= CS8; //8数据位 Opt.c_cflag &= ~PARENB; //无校验 Opt.c_cflag &= ~CSTOPB; //一停止位 Opt.c_cc[VTIME] = 10;/* 非规范模式读取时的超时时间*/ Opt.c_cc[VMIN] = 128; /* 非规范模式读取时的最小字符数*/ tcflush(fd ,TCIFLUSH);/* tcflush清空终端未完成的输入/输出请求及数据*/ tcsetattr(fd,TCSANOW,&Opt); } void HexViewer(uint8_t *buf, int rc){ if (rc fd = open("/dev/rfcomm0",O_RDWR|O_NOCTTY|O_NDELAY); if (fd |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |