5 Star 40 Fork 12

Walkline / ESP32 BLE

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

ESP32 BLE

项目介绍

MicroPython for ESP32 开发板低功耗蓝牙(BLE)研究学习项目

名词解释

写的比较乱,所以需要规范以下名词解释

  • BLE:低功耗蓝牙设备(Bluetooth Low Energy、Bluetooth LE)
  • Peripheral、BLE 设备、外围设备、设备:代表 ESP32 开发板
  • Central、中心设备:代表手机、电脑等可以连接蓝牙外设的设备

制定目标

使用 BLE 实现蓝牙键盘控制器功能,也就是自制蓝牙(小)键盘(HID)

要自制(小)蓝牙键盘,需要完成下列功能:

  • 开发板实现 HID 功能,即作为外围设备,可以被中心设备扫描连接
  • 制作(小)键盘硬件,编写键盘驱动,实现通过开发板向中心设备输入内容
  • 硬件还包括灯光效果,用一个按键进行灯效切换:
    • 全灭(默认)
    • 全亮
    • 全部呼吸闪烁
    • 按键点击闪烁
  • 设计字符映射表统一规范,方便对应按键和输入内容

进度情况

  • 视频演示
  • 已完成开发板作为外围设备的功能,可以被手机扫描连接并简单输入一些字母和数字
  • 已完成(小)键盘硬件电路设计,等待合适时机打板制作,目前有 2 种方案
  • 打了若干次板子但是验证功能均失败了,目前硬件已经更新到v0.2.5,准备打板继续验证
  • 目前v0.2.6按键部分硬件已经验证成功,终于可以继续后续开发了。。。

已知问题

  • BLE 设备在第一次绑定连接成功后,处于连接状态时,复位设备,或者关闭再打开中心设备的蓝牙功能后,设备会处于已连接状态,但是中心设备没有任何反应,既不会连接成功也不会连接失败,此处怀疑是因为缺少连接超时设置,但是当前版本的设备固件并不支持设置超时

  • 在 Windows 10 系统上可以搜索到 BLE 设备并进行连接,但是很快会出现驱动程序错误的提示,暂时无解

  • 导致以上已知问题的原因为,MicroPython ubluetooth不支持设备间的配对和绑定操作,这个问题只能等

  • 自己尝试给固件增加配对功能,目前在iOS上测试成功了

分支项目

在等待打板的这段时间里又继续研究了 BLE 的其它玩法,总结一下:

BLE 知识

非业内人士,以下内容纯属个人理解,如有偏差欢迎斧正

  • BLE 设备遵循 HOGP 规范(HID over GATT Profile)

  • Profile包扩很多Services

  • Services包扩很多Characteristics

  • Characteristics包扩很多Descriptors

    例如蓝牙键盘就是一个Profile,它包括了至少(必要的)3 个Services

    • Battery Service
    • Device Information
    • Human Interface Device

    Battery Service又包括了 1 个Characteristics

    • Battery Level

    Battery Level还可以包括 1 个Descriptors

    • Client Characteristic Configuration

软件部分

首先参考HOGP 规范,配置好所有的ServicesCharacteristicsDescriptors

BLE 设备作为外围设备(GATT Server),本地注册所有Services,生成payload,等待中心设备(GATT Client)连接

然后作为广播者payload进行广播,包括:

  • 本地名称(显示名称)
  • 所有的Services
  • 外观(显示名称旁边的图标)

中心设备扫描到广播后进行内容分析、展示,用户点击展示内容后开始和外围设备进行绑定连接,并读取保存在 BLE 设备本地的CharacteristicsDescriptors信息,最终完成连接,等待接收数据

此过程中我们只负责外围设备(GATT Server)的开发

硬件部分(按键)

已完成电路设计的(小)键盘 2 种方案,分别是:

  • ADC 采样方案
  • 键盘矩阵方案

ADC 采样方案

ADC 采样方案使用的是同型号电阻串联的方式,如图:

ADC 原理图

优点:

  • 占用 IO 口少,一个 IO 口至少可以采集 10 个按键输入(未验证)
  • 电阻型号一致,方便管理购买

缺点:

  • 电阻串联方案导致只有 1 个按键的优先级别最高,也就是同时只能检测到 1 个按键按下

这种方案能想到的用途有 2 个:

  • 作为小键盘使用,因为小键盘不需要多个按键同时按下
  • 使用 2 路 ADC,其中一路作为控制键(Ctrl、Alt、Shift等),配合另外一路进行简单输入

键盘矩阵方案

键盘矩阵方案是常规键盘方案,连接方式如图:

矩阵原理图

优点:

  • 可以做到全键无冲
  • 电路简单,几乎只用到按键

缺点:

  • 占用 IO 口较多,row * column个按键需要row + column个 IO,例如4 * 5的 20 键键盘需要 9 个 IO

硬件部分(灯效)

灯效也将使用矩阵方案(待验证)并使用按键切换 4 种不同灯效

矩阵原理图

相关链接

参考资料

好文推荐

合作交流

  • 联系邮箱:walkline@163.com
  • QQ 交流群:
    • 走线物联:163271910
    • 扇贝物联:31324057

走线物联扇贝物联

MIT License Copyright (c) 2019 Walkline Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

MicroPython for ESP32 开发板低功耗蓝牙(BLE)研究学习项目 展开 收起
Python
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Python
1
https://gitee.com/walkline/esp32-ble.git
git@gitee.com:walkline/esp32-ble.git
walkline
esp32-ble
ESP32 BLE
master

搜索帮助