树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)

简介: 树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)

前话

  接下来介绍树莓派蓝牙模块的开发,使用的协议为bluez。


ssh远程登录到树莓派

  请参照博客《树莓派开发笔记(一):入手树莓派3b,成功运行树莓派系统


Demo:蓝牙探测信号rssi强度,并发送给服务器

  

  客户端bob,服务器alice,探测两方的rssi,并传送给服务器alice

  

  

  


Bluez

简介

  BlueZ是官方Linux Bluetooth栈,由主机控制接口(Host Control Interface,HCI)层、Bluetooth协议核心、逻辑链路控制和适配协议(Logical Link Control and Adaptation Protocol,L2CAP)、SCO 音频层、其他 Bluetooth 服务、用户空间后台进程以及配置工具组成。

BlueZ由许多单独的模块组成:

  • 蓝牙内核子系统核心
  • L2CAP和SCO音频内核层
  • RFCOMM,BNEP,CMTP和HIDP内核实现
  • HCI UART,USB,PCMCIA和虚拟设备驱动程序
  • 通用蓝牙和SDP库和守护程序
  • 配置和测试实用程序
  • 协议解码和分析工具


搭建Bluez

步骤一:安装bluez

sudo apt-get install bluez


蓝牙明命令行hciconfig/hcitool的使用

检查蓝牙设备是否加载成功

hciconfig

  

打开蓝牙

sudo hciconfig hci0 up

  

扫描蓝牙

sudo hciconfig iscan

  

蓝牙命令行工具bluetoothctl

  (注意:不好用,显示的都是mac地址,而且中文乱码,周围蓝牙多,根本分不清楚)

启动蓝牙程序

bluetoothctl

  

启动/关闭蓝牙电源

power on/off

  

获取要配对设备的MAC地址

  

  电脑上的蓝牙,先打开:

  


pybluez使用

sudo python3 -m pip install pybluez

关键源码

server.py

# -*-coding: utf-8 -*-
from bluetooth import *
import sys
import time
import os
import struct
import bluetooth._bluetooth as bluez
import bluetooth
global hostRssi
os.system("bluetoothctl power on")
# 获取服务,通过uuid查找目标服务
#uuid = "63078d70-feb9-lle7-9812-dca90488bd22"
#os.system("bluetoothctl discoverable on")
dstuuid   = "11111111-1111-1111-1111-111111111111"
localuuid = "22222222-2222-2222-2222-222222222222"
print("本地服务器,搜索客户端蓝牙rssi")
...
data = client.recv(1024)
print (data)
client.close()
bluetooth_sock.close()

client.py

from bluetooth import *
import sys
import time
import os
import struct
import bluetooth._bluetooth as bluez
import bluetooth
global hostRssi
#开启蓝牙可见
os.system("bluetoothctl power on")
os.system("bluetoothctl discoverable on")
dstuuid   = "22222222-2222-2222-2222-222222222222"
localuuid = "11111111-1111-1111-1111-111111111111"
bluetooth_sock=BluetoothSocket(RFCOMM)
bluetooth_sock.bind(("",PORT_ANY))
bluetooth_sock.listen(1)
...
 data = "server:" + str(hostRssi) + ", client:" + str(clientRssi)
...


入坑

入坑一:打开蓝颜失败

sudo vim /lib/systemd/system/bluetooth.service

  修改文件内容

#ExecStart=/usr/lib/bluez5/bluetooth/bluetoothd
ExecStart=/usr/lib/bluez5/bluetooth/bluetoothd -E -C

&emso;&emso;然后重启服务

sudo sdptool add SP
sudo systemctl daemon-reload
sudo systemctl restart bluetooth
sudo sdptool browse local

入坑二:“no advertisable device”

  

  原因:由于蓝牙不可见导致


相关文章
蓝牙核心规范(V5.3)-深入详解之SCO和eSCO的异同
蓝牙核心规范(V5.3)-深入详解之SCO和eSCO的异同
3235 0
蓝牙核心规范(V5.3)-深入详解之SCO和eSCO的异同
|
Linux
Linux(5)WIFI/BT调试笔记
Linux(5)WIFI/BT调试笔记
2511 0
|
算法 异构计算 Python
|
7月前
|
人工智能 API 机器人
OpenClaw 用户部署和使用指南汇总
本文档为OpenClaw(原MoltBot)官方使用指南,涵盖一键部署(阿里云轻量服务器年仅68元)、钉钉/飞书/企微等多平台AI员工搭建、典型场景实践及高频问题FAQ。同步更新产品化修复进展,助力用户高效落地7×24小时主动执行AI助手。
30889 253
|
存储 Linux Android开发
Rockchip系列之VendorStorage uboot/kernel/user space 阶段接口使用介绍(2)
Rockchip系列之VendorStorage uboot/kernel/user space 阶段接口使用介绍(2)
2184 0
|
11月前
|
人工智能 开发者
从技术到品牌:一个AI指令,让开发者也能写出动人的品牌故事
开发者常擅技术却困于品牌叙事。本文分享一套结构化AI指令,结合DeepSeek、通义千问等国产工具,将品牌故事拆解为可执行模块,助力技术人快速生成有温度、有逻辑的品牌故事框架,实现从代码到共鸣的跨越。
918 5
|
物联网 API 数据库
一文带你认识蓝牙 GATT 协议
正所谓磨刀不误砍柴工,我们有必要先深入的学习一下 GATT 以及 GATT 相关的一些知识。 本文我们就来了解一下 蓝牙 GATT 到底是什么?同时了解下我们使用的 ESP32-C3 GATT示例的工程的代码结构。
10194 5
一文带你认识蓝牙 GATT 协议
|
Ubuntu Linux Docker
Ubuntu22.04上Docker的安装
通过以上详细的安装步骤和命令,您可以在Ubuntu 22.04系统上顺利安装
12751 12
|
Ubuntu 安全 网络协议
|
安全 芯片
bluez5.50+pulseaudio实现蓝牙音响音频播放
bluez5.50+pulseaudio实现蓝牙音响音频播放
1924 0
bluez5.50+pulseaudio实现蓝牙音响音频播放