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

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

树莓派开发专栏

前话

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

ssh远程登录到树莓派

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

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

  在这里插入图片描述

  在这里插入图片描述
  在这里插入图片描述

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 = "-1111-1111-1111-1" localuuid = "-2222-2222-2222-2" 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 = "-2222-2222-2222-2" localuuid = "-1111-1111-1111-1" 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”

  在这里插入图片描述
  原因:由于蓝牙不可见导致




















版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230155.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午3:00
下一篇 2026年3月16日 下午3:01


相关推荐

  • ASP.NET MVC 入门3、Routing

    ASP.NET MVC 入门3、Routing

    2021年7月28日
    57
  • 《自己动手写操作系统》 第一章总结

    《自己动手写操作系统》 第一章总结自己动手写操作系统 第一章总结俗话说万事开头难 为了督促自己能在假期好好学习 打算认真做一下学习笔记 先记录一下在学习过程中遇到的问题和解决方案 自己动手写操作系统第一章总结书籍和工具下载地址工具选择代码实现编译与运行运行结果书籍和工具下载地址在安装完 nasm 之后需要将其安装路径添加到系统环境变量中工具选择代码编辑器 SublimeText 汇编编辑器 NASM 程序加载软件

    2026年3月26日
    3
  • CANoe简易教程2

    CANoe简易教程2转载自 http blog michiru me posts canoe tutorial part 2 html 在这份教程的第一部分 我们提到没有 CAN 数据库 CANoe 还不能工作 在第二部分 我们来看看 CAN 数据库是怎样的 通过 CANoe 的 Tools 菜单 或者从开始菜单打开 Vector 的 CAN 数据库编辑器 CANdb Editor 简介 CAN 总线上有 4 种报文

    2026年3月18日
    3
  • java虚拟机可以运行的文件_虚拟机的网络模型有

    java虚拟机可以运行的文件_虚拟机的网络模型有Java虚拟机中的内存模型?Java虚拟机运行时内存所有的类的实例(不包括局部变量与方法参数)都存储在Java堆中,每条线程有自己的工作内存(Java栈),不同线程之间无法直接访问对方工作内存中的变量。方法区用于存储被虚拟机加载的类信息、常量、static变量等数据,堆用于存储对象实例,比如通过new创建的对象实例就保存在堆中,堆中的对象的由垃圾回收器负责回收。Java栈用于实现方法调用,每次方法调用就对应栈中的一个栈帧,栈帧包含局部变量表、操作数栈、方法接口等于方法相关的信息,栈中的数据当没有引用指向

    2025年11月25日
    6
  • docker开启2375端口[通俗易懂]

    docker开启2375端口[通俗易懂]Docker开启RemoteAPI访问2375端口-hongdada-博客园https://www.cnblogs.com/hongdada/p/11512901.htmldocker开启2375端口,提供外部访问docker,idea连接服务器docker_霓虹深处-CSDN博客_idea连接docker2376端口https://blog.csdn.net/qq_36850813/article/details/89924207…

    2022年5月29日
    41
  • EXT4 文件系统

    EXT4 文件系统文章概览 Linux 文件系统首先我们要知道 linux 系统中一切皆文件进入 linux 系统就可以看到下面目录结构 应该很熟悉可以再深入了解一下安装系统的时候会指定安装硬盘 然后创建分区 当硬盘分区创建好之后会选择合适的文件系统 一般默认 ext4 格式化分区 mount 到指定目录下就可以读写文件来看看 ls dev sd 系统中有 1 块硬盘并且创建了 2 个主分区 sda1 sda2 sudofdisk l dev sda dev sda2 为该系统下的文件系统

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号