使用 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 个静音按键,按键通过电阻进行上拉,未按下时为高电平,按下时为低电平。
74HC165芯片引脚D0~D7分别连接最多 8 个按键,DS和Q7用于芯片级联。
PL#引脚拉低,并行读取按键状态,再拉高引脚,锁存并行数据。
PL#引脚拉高,同时CE#引脚也处于低电平时,就可以操作CP引脚对数据进行移位(串行)输出了。从代码和规格书上看,CE#引脚其实可以直接接地。
单片机使用SPI读取芯片输出的数据,每读取一次正好可以获取 8 位数据,省去了手动翻转CP引脚再读取Q7引脚状态的过程,但是需要注意一下SPI初始化的状态:
spi = SPI(1)
spi.init(
polarity=1,
firstbit=SPI.LSB,
)polarity:设置时钟线空闲时为高电平,否则只能读取到 7 位数据firstbit:设置读取的字节数据是高位在前还是低位在前,根据数据使用方式进行设置
其它参数采用默认值即可。
本项目使用 MicroPython New BLE Library 提供的 devices/hid/keyboard_2 实现了蓝牙键盘设备,可以与电脑、手机等中心设备进行配对、绑定、自动重连和收发数据等操作。
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 进行文件上传和运行操作。
-
ab 工具安装及使用说明请访问 AMPY Batch Tool 查看
- 联系邮箱:walkline@163.com
- QQ 交流群:



