树莓派 - 蓝牙 (1) 试试Beacon
首先先了解一下bluez, 以及常用的tools.
- hcitool、bluetoothctl等工具,可以进行BLE设备的扫描、连接、配对、广播等操作;
- hcitool可以发送HCI command,设置BLE的广播数据;
- gatttool可以在GATT层面,完成GATT profile的连接、service attribute的读写等操作;
bluez
安装
sudo apt-get install bluez
hciconfig
查看蓝牙设备
pi@raspberrypi:~ $ hciconfig
hci0: Type: Primary Bus: UART
BD Address: B8:27:EB:26:23:F1 ACL MTU: 1021:8 SCO MTU: 64:1
UP RUNNING
RX bytes:822 acl:0 sco:0 events:57 errors:0
TX bytes:4231 acl:0 sco:0 commands:57 errors:0
所有命令如下
pi@raspberrypi:~ $ hciconfig --help
hciconfig - HCI device configuration utility
Usage:
hciconfig
hciconfig [-a] hciX [command ...]
Commands:
up Open and initialize HCI device
down Close HCI device
reset Reset HCI device
rstat Reset statistic counters
auth Enable Authentication
noauth Disable Authentication
encrypt Enable Encryption
noencrypt Disable Encryption
piscan Enable Page and Inquiry scan
noscan Disable scan
iscan Enable Inquiry scan
pscan Enable Page scan
ptype [type] Get/Set default packet type
lm [mode] Get/Set default link mode
lp [policy] Get/Set default link policy
name [name] Get/Set local name
class [class] Get/Set class of device
voice [voice] Get/Set voice setting
iac [iac] Get/Set inquiry access code
inqtpl [level] Get/Set inquiry transmit power level
inqmode [mode] Get/Set inquiry mode
inqdata [data] Get/Set inquiry data
inqtype [type] Get/Set inquiry scan type
inqparms [win:int] Get/Set inquiry scan window and interval
pageparms [win:int] Get/Set page scan window and interval
pageto [to] Get/Set page timeout
afhmode [mode] Get/Set AFH mode
sspmode [mode] Get/Set Simple Pairing Mode
aclmtu <mtu:pkt> Set ACL MTU and number of packets
scomtu <mtu:pkt> Set SCO MTU and number of packets
delkey <bdaddr> Delete link key from the device
oobdata Get local OOB data
commands Display supported commands
features Display device features
version Display version information
revision Display revision information
block <bdaddr> Add a device to the blacklist
unblock <bdaddr> Remove a device from the blacklist
lerandaddr <bdaddr> Set LE Random Address
leadv [type] Enable LE advertising
0 - Connectable undirected advertising (default)
3 - Non connectable undirected advertising
noleadv Disable LE advertising
lestates Display the supported LE states
hcitool
pi@raspberrypi:~ $ hcitool --help
hcitool - HCI Tool ver 5.43
Usage:
hcitool [options] <command> [command parameters]
Options:
--help Display help
-i dev HCI device
Commands:
dev Display local devices
inq Inquire remote devices
scan Scan for remote devices
name Get name from remote device
info Get information from remote device
spinq Start periodic inquiry
epinq Exit periodic inquiry
cmd Submit arbitrary HCI commands
con Display active connections
cc Create connection to remote device
dc Disconnect from remote device
sr Switch master/slave role
cpt Change connection packet type
rssi Display connection RSSI
lq Display link quality
tpl Display transmit power level
afh Display AFH channel map
lp Set/display link policy settings
lst Set/display link supervision timeout
auth Request authentication
enc Set connection encryption
key Change connection link key
clkoff Read clock offset
clock Read local or remote clock
lescan Start LE scan
leinfo Get LE remote information
lewladd Add device to LE White List
lewlrm Remove device from LE White List
lewlsz Read size of LE White List
lewlclr Clear LE White List
lerladd Add device to LE Resolving List
lerlrm Remove device from LE Resolving List
lerlclr Clear LE Resolving List
lerlsz Read size of LE Resolving List
lerlon Enable LE Address Resolution
lerloff Disable LE Address Resolution
lecc Create a LE Connection
ledc Disconnect a LE Connection
lecup LE Connection Update
For more information on the usage of each command use:
hcitool <command> --help
bluetoothctl
打开bluetoochctl工具: bluetoothctl
pi@raspberrypi:/etc/systemd/system $ bluetoothctl
[NEW] Controller B8:27:EB:26:23:F1 raspberrypi [default]
扫描: scan on
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:26:23:F1 Discovering: yes
[NEW] Device 00:26:5E:DD:78:E6 00-26-5E-DD-78-E6
列出扫描到的设备:devices
[bluetooth]# devices
Device 00:26:5E:DD:78:E6 00-26-5E-DD-78-E6
退出:exit
[bluetooth]# exit
[DEL] Controller B8:27:EB:26:23:F1 raspberrypi [default]
pi@raspberrypi:/etc/systemd/system $
所有的命令如下:
[bluetooth]# help
Available commands:
list List available controllers
show [ctrl] Controller information
select <ctrl> Select default controller
devices List available devices
paired-devices List paired devices
power <on/off> Set controller power
pairable <on/off> Set controller pairable mode
discoverable <on/off> Set controller discoverable mode
agent <on/off/capability> Enable/disable agent with given capability
default-agent Set agent as the default one
advertise <on/off/type> Enable/disable advertising with given type
set-advertise-uuids [uuid1 uuid2 ...] Set advertise uuids
set-advertise-service [uuid][data=[xx xx ...] Set advertise service data
set-advertise-manufacturer [id][data=[xx xx ...] Set advertise manufacturer data
set-advertise-tx-power <on/off> Enable/disable TX power to be advertised
set-scan-filter-uuids [uuid1 uuid2 ...] Set scan filter uuids
set-scan-filter-rssi [rssi] Set scan filter rssi, and clears pathloss
set-scan-filter-pathloss [pathloss] Set scan filter pathloss, and clears rssi
set-scan-filter-transport [transport] Set scan filter transport
set-scan-filter-clear Clears discovery filter.
scan <on/off> Scan for devices
info [dev] Device information
pair [dev] Pair with device
trust [dev] Trust device
untrust [dev] Untrust device
block [dev] Block device
unblock [dev] Unblock device
remove <dev> Remove device
connect <dev> Connect device
disconnect [dev] Disconnect device
list-attributes [dev] List attributes
set-alias <alias> Set device alias
select-attribute <attribute> Select attribute
attribute-info [attribute] Select attribute
read Read attribute value
write <data=[xx xx ...]> Write attribute value
notify <on/off> Notify attribute value
register-profile <UUID ...> Register profile to connect
unregister-profile Unregister profile
version Display version
quit Quit program
RaspberryPi 发送beacon
苹果在BLE的基础上推出了iBeacon协议。iBeacon使用了BLE的广播部分,但不建立连接。一个遵守iBeacon协议的外设称为Beacon。Beacon会广播自己的身份信息和发射信号的强度。中心设备接收到广播之后,除了可以获知Beacon的身份之外,还能通过信号的衰减算出自己与Beacon的距离。
pi@raspberrypi:~ $ sudo hciconfig hci0 noscan
pi@raspberrypi:~ $ sudo hciconfig hci0 leadv 3
pi@raspberrypi:~ $ sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 63 6F 3F 8F 64 91 4B EE 95 F7 D8 CC 64 A8 63 B5 00 01 00 02 C5
< HCI Command: ogf 0x08, ocf 0x0008, plen 31
1E 02 01 1A 1A FF 4C 00 02 15 63 6F 3F 8F 64 91 4B EE 95 F7
D8 CC 64 A8 63 B5 00 01 00 02 C5
> HCI Event: 0x0e plen 4
01 08 20 00
使用Android APP测试Beacon功能
iBeacon & Eddystone Scanner Google开发的,可以从Google Play下载运行(地址为:https://play.google.com/store/apps/details?id=de.flurp.beaconscanner.app&hl=zh_CN)。
如果你的Android设备不能访问Google Play,也可以通过在线APK下载网站(https://apkpure.com/)将APK下载到电脑后安装。
测试结果
拿着手机走几步看看:
使用结束后,可以用下面命令来恢复扫描和停止广播:
sudo hciconfig hci0 piscan # 恢复扫描
sudo hciconfig hci0 noleadv # 停止广播
Reference
蓝牙串口
https://www.raspberrypi.org/forums/viewtopic.php?p=919420
https://blog.csdn.net/wanyeye/article/details/52909869?fps=1&locationNum=10
使用Beacon:
https://www.cnblogs.com/vamei/p/6753531.html
http://www.wowotech.net/bluetooth/eddystone_test.html
gatttool hcitool
https://blog.csdn.net/talkxin/article/details/50610984
https://blog.csdn.net/Chuck_lin/article/details/78846165
SPP
https://baike.baidu.com/item/%E8%93%9D%E7%89%99%E4%B8%B2%E5%8F%A3/1415870?fr=aladdin
SDP
https://www.cnblogs.com/hzl6255/p/3826558.html
树莓派 - 蓝牙 (1) 试试Beacon的更多相关文章
- 树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/110940484长期持续带来更多项目与技术分享, ...
- Java 学习文章汇总
目前JAVA可以说是产业界和学术界最热门的语言,许多人都很急切想把JAVA学好. 但学习是需要步骤的,除非像电影中演的那样,能够把需要的专业技巧下载到脑海:主角只花了几秒下载资料,就马上具备飞行员的技 ...
- Linux 应用笔记
Linux 应用笔记 Linux 应用笔记 小书匠 Raspberry Pi 常用命令 CentOs Raspberry Ubuntu python 实用教程 Vim 权限问题 内存分配 shell ...
- 在树莓派3B、Ubuntu 18.04关闭板载Wifi、蓝牙
树莓派没有传统的BIOS设置界面,文件/boot/firmware/config.txt就相当一个BIOS设置.这里是config.txt的详细文档:https://github.com/raspbe ...
- 【树莓派】【转】树莓派3装Android 6.0,支持Wi-Fi和蓝牙
树莓派3装Android 6.0,支持Wi-Fi和蓝牙 相信对于许多树莓派初学者(包括我)来说,Android系统的确是一个不错的选择.但国内这方面资源稀缺,经本人FQ苦寻,找到了老外的树莓派Andr ...
- 蓝牙Beacon广播数据包格式以及解析
目录 1. 获取原始蓝牙广播包 2. 安装WireShark软件 3. 分析Beacon广播包数据 3.1 第一个数据包格式 3.2 第二个数据包格式 3.3 Android程序开发中的蓝牙广播包 4 ...
- 树莓派二:apt-get出错、蓝牙、汉化、输入法
用apt-get install一个软件的时候出现了一个错误: E: Encountered a section with no Package: header E: Problem with Mer ...
- 让你少走弯路的搭建树莓派的Net与NodeJS运行环境
树莓派是当前最火的嵌入计算平台没有之一,树莓派可以给我们无数的想象,树莓派的高性能.低功耗.低成本.可扩展性(最新的树莓派原生支持WIFI和蓝牙,这功能太赞了)深受大家的喜爱.虽然树莓派到目前为止 ...
- Beacon浅析
作者:hongbosun 一.Beacon简介 Beacon是基于BLE技术实现的物理设备.BLE(全称Bluetooth Low Energy)是蓝牙4.0技术规范的一部分.它起源于Nokia的Wi ...
随机推荐
- bzoj 5499: [2019省队联测]春节十二响【堆】
首先看两条链怎么合并,贪心可得是从大到小取max,多条链同理 所以dfs合并子树的大根堆即可,注意为了保证复杂度,合并的时候要合并到最长链上,证明见长链剖分 #include<iostream& ...
- Struts+Spring+Hibernate处理Lob(Blob,Clob)
在使用struts+spring+hibernate的开发中,有些时候用户会有数据库存储文件的需求,在数据库中一般会采用Blob字段或Clob字段来存储二进制图片.流媒体或文件.现就将在实际开发中遇到 ...
- Luogu P1663 山【二分答案/实数域】By cellur925
题目传送门 现在要在山上的某个部位装一盏灯,使得这座山的任何一个部位都能够被看到. 给出最小的y坐标,如图的+号处就是y坐标最小的安装灯的地方. 这个题嘛...今年省选前学姐来我们(破烂)的机房串门的 ...
- Luogu P1417烹调方案【dp/背包】By cellur925
题目传送门 我们看到这道题,就会想起背包.于是我就一顿01背包敲,结果发现只有30分.后来看题解发现需要对输入的食材进行排序. 我们回想国王游戏一题,各位大臣的排列顺序会对权值造成影响,所以我们就预先 ...
- offsetLeft 与 left的区别
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- queue+模拟 Codeforces Round #304 (Div. 2) C. Soldier and Cards
题目传送门 /* 题意:两堆牌,每次拿出上面的牌做比较,大的一方收走两张牌,直到一方没有牌 queue容器:模拟上述过程,当次数达到最大值时判断为-1 */ #include <cstdio&g ...
- Linux修改文件的权限,拥有者,所属组
修改文件的权限,拥有者,所属组 1.设置文件的权限(chmod) ①方式一(建议使用这种方式) 命名:chomd 755 文件名 ②方式二 命名:chomd -R +x 文件名 2.设置文件的拥有者( ...
- 万能makefile模板
这里一份万能makefile模板,写opencv项目时候使用的. 前提是提前配置好 包管理工具 pkg 然后就不用每次都去 -lopencv_xxx了. ####################### ...
- Suricata里的规则与Snort区别之处
不多说,直接上干货! 见官网 https://suricata.readthedocs.io/en/latest/rules/differences-from-snort.html
- Ionic之存储信息、取出存储信息、注销存储信息
每一个app软件在登录的时候,都会本地存储登录信息,需要用到数据的时候,就直接在本地获取,而不是每一次应用的时候都要请求到服务器来验证登录信息,减少服务器的负担.所以在设计混合HTML5 移动应用程序 ...