Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MicroPython BLE Keypad

项目介绍

使用 MicroPython BLE 实现全键无冲蓝牙小键盘。

本项目为 MicroPython New BLE Library 应用示例。

获取硬件

访问 立创开源广场 查看硬件原理图和 PCB。

获取代码

本项目将MicroPython New BLE Library作为子项目引入,因此在克隆项目时需要执行以下命令:

git clone --recursive https://gitee.com/walkline/micropython-ble-keypad.git

如果是下载的打包文件,或未使用--recursive参数克隆项目,则需要执行以下命令补全子模块代码:

git submodule update --init --recursive

软硬件架构说明

硬件部分

键盘按键采用瀚文键盘的1*N矩阵连接方式,利用74HC165芯片并行输入串行输出的特性,每个芯片最多可以连接 8 个按键,将多个芯片串联即可实现最多N*8键键盘。

本项目中的键盘使用 5 个74HC165芯片,连接 40 个静音按键,按键通过电阻进行上拉,未按下时为高电平,按下时为低电平。

keypad_keys

软件部分:采样按键状态

74HC165

74HC165芯片引脚D0~D7分别连接最多 8 个按键,DSQ7用于芯片级联。

PL#引脚拉低,并行读取按键状态,再拉高引脚,锁存并行数据。

PL#引脚拉高,同时CE#引脚也处于低电平时,就可以操作CP引脚对数据进行移位(串行)输出了。从代码和规格书上看,CE#引脚其实可以直接接地。

单片机使用SPI读取芯片输出的数据,每读取一次正好可以获取 8 位数据,省去了手动翻转CP引脚再读取Q7引脚状态的过程,但是需要注意一下SPI初始化的状态:

spi = SPI(1)
spi.init(
    polarity=1,
    firstbit=SPI.LSB,
)
  • polarity:设置时钟线空闲时为高电平,否则只能读取到 7 位数据
  • firstbit:设置读取的字节数据是高位在前还是低位在前,根据数据使用方式进行设置

其它参数采用默认值即可。

软件部分:BLE HID 设备

本项目使用 MicroPython New BLE Library 提供的 devices/hid/keyboard_2 实现了蓝牙键盘设备,可以与电脑、手机等中心设备进行配对、绑定、自动重连和收发数据等操作。

软件部分:BLE HID 数据

devices/hid/keyboard_2使用了全键无冲的report map,定义如下:

0x19, 0x04,   # Usage Minimum (0x04)
0x29, 0x65,   # Usage Maximum (0x65)
0x15, 0x00,   # Logical Minimum (0)
0x25, 0x01,   # Logical Maximum (1)
# 0x95, 0x62, # Report Count (98)
0x95, 0x68,   # Report Count (104)
0x75, 0x01,   # Report Size (1)

Report Count (104)Report Size (1)表示可以一次性发送 104 个数据位,也就是最多 104 个普通按键,104 / 8 = 13.0,因此普通按键数据为 13 个字节,再加上修饰符(8 位控制按键)和占位符,所以每次发送的 HID 数据为 15 个字节(report id由数据发送函数自动添加)。

实际的数据位应为:0x65 - 0x04 + 1 = 98,为了 8 位字节对齐所以选择了 104 个数据位。

每次采样完成后的数据如果和上一次结果不一致(说明按键状态发送了变化),这时就需要:

  • 遍历所有按键

  • 根据KEY_MAP的定义获取当前按键键码

  • 根据键码获取按键状态

  • 在 HID 数据对应键码的位置更新按键状态(0 为按下,1 为抬起)

    如果单片机SPI MISO引脚连接74HC165芯片Q7#引脚则可以翻转上述按键状态,也更符合一般直觉。

软硬件调试、运行方法

要检查按键焊接质量,可以单独上传config.py到开发板,然后在开发板中运行drivers/_74HC165.py文件,就可以对所有按键进行直观的检测了。

要完整运行程序可以上传abconfig文件中列出的所有文件并复位开发板即可。

推荐使用 AMPY Batch Tool 进行文件上传和运行操作。

参考资料

合作交流

走线物联扇贝物联

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Contributors

Languages