前话

  接下来介绍树莓派蓝牙模块的开发,使用的协议为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

最新文章

  1. jQuery图片延迟加载
  2. js中的原型prototype
  3. 重视blog备份——兼记我与CSDN的爱恨情仇
  4. react入门(4)
  5. js执行环境的深入理解
  6. json解析不推荐使用eval
  7. LoadRunner11下载以及详细破解说明【最新】
  8. iscsi 操作备忘
  9. 李洪强iOS开发之【Objective-C】09-空指针和野指针
  10. 【转】iOS学习之Autolayout(代码添加约束) -- 不错不错
  11. php 之 分页查询的使用方法及其类的封装
  12. hadoop python and Twitter
  13. sublime test3 使用技巧
  14. FZU Problem 2169 shadow
  15. Swift - 使用TableView的静态单元格进行页面布局
  16. Linux: Bash基本命令
  17. Echarts数据可视化地理坐标系geo,开发全解+完美注释
  18. 【Docker】安装Docker及基本使用
  19. C++Primer学习——const
  20. php ip2long负数的问题

热门文章

  1. kernel 目录
  2. spring boot 视频截图
  3. Python_selenium案例:
  4. ISITDTU CTF 2020 部分Web题目Writeup
  5. DNS域传输漏洞复现
  6. centos8 mysql8遇到的问题
  7. RSA脚本环境配置-攻防世界-OldDriver
  8. ①SpringCloud 实战:引入Eureka组件,完善服务治理
  9. TA-Lib技术指标分析
  10. 会声会影使用教程:剪辑Vlogo短视频