Linux 下 ESP32 蓝牙 HCI 例程的使用

HCI 简介

BLE 协议栈分为 Host 和 Controller 两大部分,通过 HCI (Host Controller Interface) 进行相互通讯,而 HCI 硬件传输接口又分为多种,包括 USB、UART 和 SDIO 等。 在 esp-idf 中 Host 分为 bluedroid 和 nimble, 相关的一些应用例程也在 bluedroidnimble 目录下,同时 esp-idf 也提供了不使用以上两个 Host 仅使用芯片 BT Controller 的例程,以满足使用者的其他需求,如 Host 协议栈运行在其他 MCU 上仅需要一个 BT Controller 硬件,或者作为一个 PC 机上的蓝牙适配器的功能

如下来介绍 在 Linux 系统上 esp 芯片的一些 HCI 例程的使用

BlueZ 的安装和使用

  • BlueZ 版本查看

    BlueZ 是 linux 官方蓝牙协议栈,一般在 linux 系统都会自带,使用以下指令查看 BlueZ 版本

    $ dpkg -s bluez |grep ^Version
    Version: 5.53-0ubuntu3.5
    

    BlueZ 的安装或更新可参考以下文章或自行搜索:Ubuntu 20.04编译安装BlueZ-5.6

  • hciattch 的使用

    hciattch 用于把串行 UART 挂载为 HCI 传输接口,与 BlueZ 协议栈进行通讯,命令格式如下

    hciattach [-n] [-p] [-b] [-r] [-t timeout] [-s initial_speed] <tty> <type | id> [speed] [flow|noflow] [sleep|nosleep] [bdaddr]
    
    -n 不脱离控制终端
    -p 当脱离时打印 PID
    -t 指定初始化超时时间,默认5秒
    tty 指定要挂在的串口设备,可以省略 /dev/ 前导
    type|id 一般是 any, 不指定厂商等
    speed 一般支持以下速度 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600
    flow 使用硬件流量控制, noflow不使用
    sleep|nosleep 是否进行睡眠
    bdaddr 蓝牙设备地址
    
  • hciconfig 的使用

    hciconfig 用于配置蓝牙设备, hciX 是系统中安装的蓝牙设备的名称, 常用参数如下

    -a 显示蓝牙设备信息
    up 开启蓝牙设备
    down 关闭蓝牙设备
    reset 重置蓝牙设备
    pscan 启用页面扫描,禁用查询扫描
  • btmon 的使用

    btmon 是一个蓝牙监视器,会记录 Host 与 Controller 之间的 HCI 命令、事件和数据的交互

    也有很多参数,不过一般直接输入 sudo btmon 执行监视

  • bluetoothctl 的使用

    bluetoothctl 是输入命令操作蓝牙设备的工具,如搜索、配对、广播、连接等操作

    终端输入 bluetoothctl 进入其环境,可以键入 help 命令查看命令列表及其描述

    bluetoothctl 是一个新的操纵蓝牙设备的工具,相比于 hcitool、gatttool 等旧工具,更推荐使用 bluetoothctl

LINUX 下 UART HCI 例程

  • controller_hci_uart_esp32

    编译烧录到 esp32, UART 波特率可以在 Component config → Bluetooth → Bluetooth → Bluetooth controller → HCI UART(H4) Options 配置中进行修改

    默认是 921600 ,重启后 log 如下:

    I (410) cpu_start: Starting scheduler on PRO CPU.
    I (0) cpu_start: Starting scheduler on APP CPU.
    I (443) CONTROLLER_UART_HCI: HCI UART1 Pin select: TX 5, RX 18, CTS 23, RTS 19
    I (453) BTDM_INIT: BT controller compile version [5688ed5]
    I (453) system_api: Base MAC address is not set
    I (453) system_api: read default base MAC address from EFUSE
    I (463) phy_init: phy_version 4670,719f9f6,Feb 18 2021,17:07:07
    W (473) phy_init: failed to load RF calibration data (0x1102), falling back to full ca
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值