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

     

    前话

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

     

    ssh远程登录到树莓派

     

    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”

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

     
     

    若该文为原创文章,转载请注明原文出处
    本文章博客地址:https://blog.csdn.net/qq21497936/article/details/110940484

  • 相关阅读:
    Spring浅谈
    struts浅谈
    Tomcat启动发生的那些事儿
    sizeof的用法
    栈应用之括号匹配
    条件编译
    MySQL数据库常用命令
    快速排序
    分页查询的那些坑和各种技巧
    国外程序员收集整理的 PHP 资源大全
  • 原文地址:https://www.cnblogs.com/qq21497936/p/14118493.html
Copyright © 2011-2022 走看看