ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

零基础学ESP32:4x4矩阵键盘——16个按键只占8个引脚!

零基础学ESP32:4x4矩阵键盘——16个按键只占8个引脚! 前面我们学了摇杆模拟输入可以感知手指的推动方向和力度。今天再学一种更直接的交互方式——按键输入。1个按键需要占用1个GPIO引脚那如果有16个按键呢难道要占用16个引脚吗当然不是矩阵键盘用了一种巧妙的方法4行 × 4列 16个按键只需要8个引脚。计算机键盘、电话拨号盘、计算器、密码锁……这些设备背后都是矩阵键盘在工作。今天这节课我们就用4x4矩阵键盘让ESP32拥有16个按键的输入能力第一步找到课程看看成品效果打开逗脑IDE点击顶部“文档”在“课程” → “ESP32 MicroPython”分类下找到4x4矩阵键盘。打开课件你会看到本节课的最终效果按下矩阵键盘上的任意按键终端会立刻打印出对应的字符——“1、2、3、A、4、5、6、B……”第二步什么是矩阵键盘矩阵键盘的原理传统的按键检测是每个按键单独接一个GPIO。矩阵键盘则采用行列扫描方式一句话原理让每一行依次通电同时检测所有列是否有信号。当某一行通电时如果某个按键被按下对应的列就能检测到信号。知道了“哪一行通电”和“哪一列有信号”就能确定是哪个按键被按下。4x4键盘的布局16个按键列1列2列3列4行1123A行2456B行3789C行4*0#D第三步动手接线——8根线连接16个按键4x4矩阵键盘有8个引脚4个行引脚 4个列引脚。键盘引脚连接ESP32类型说明R1行1GPIO19输出行扫描信号R2行2GPIO18输出行扫描信号R3行3GPIO5输出行扫描信号R4行4GPIO17输出行扫描信号C1列1GPIO16输入下拉列检测信号C2列2GPIO4输入下拉列检测信号C3列3GPIO2输入下拉列检测信号C4列4GPIO15输入下拉列检测信号关键点列引脚要设置为下拉输入Pin.PULL_DOWN这样当没有按键按下时读取到的值是0低电平。第四步代码——行列扫描逻辑frommachineimportPinimporttime# 定义4个行引脚输出row1Pin(19,Pin.OUT)row2Pin(18,Pin.OUT)row3Pin(5,Pin.OUT)row4Pin(17,Pin.OUT)row_list[row1,row2,row3,row4]# 定义4个列引脚输入下拉col1Pin(16,Pin.IN,Pin.PULL_DOWN)col2Pin(4,Pin.IN,Pin.PULL_DOWN)col3Pin(2,Pin.IN,Pin.PULL_DOWN)col4Pin(15,Pin.IN,Pin.PULL_DOWN)col_list[col1,col2,col3,col4]# 按键字符映射表行×列names[[1,2,3,A],[4,5,6,B],[7,8,9,C],[*,0,#,D]]whileTrue:# 依次扫描每一行fori,rowinenumerate(row_list):# 所有行先置0低电平fortempinrow_list:temp.value(0)# 当前行置1高电平row.value(1)time.sleep_ms(10)# 等待电平稳定# 检测所有列是否有信号forj,colinenumerate(col_list):ifcol.value()1:# 该列检测到高电平print(按键: {} 被按下.format(names[i][j]))time.sleep(0.1)代码逻辑图解步骤操作说明1所有行置0清空之前的状态2第1行置1让第1行通电3检测4个列哪一列为1说明该列有按键按下4行列交叉定位行号 列号 → 查表得到按键字符5重复步骤1-4依次扫描第2、3、4行第五步保存运行按按键测试按Ctrl S保存选择ESP32开发板设备给文件命名比如keypad.py点击保存。点击运行按钮终端开始运行。试试看按一下“1”键 → 终端打印按键: 1 被按下按一下“A”键 → 终端打印按键: A 被按下按一下“#”键 → 终端打印按键: # 被按下矩阵键盘能做什么应用场景用途密码锁输入密码控制门锁开关计算器数字和运算符号输入智能家居控制面板按键控制灯光、空调等设备菜单导航数字键选择菜单项游戏控制器方向键 功能键全程回顾步骤操作效果找到课程文档→课程→ESP32MicroPython→4*4矩阵键盘了解矩阵键盘认识原理学习“行列扫描”的工作原理理解8个引脚控制16个按键动手接线4个行 4个列 → ESP32硬件就位打开代码点击“打开”按钮代码进入编辑器保存运行CtrlS → 选择ESP32 → 运行系统开始扫描按键按键盘按下任意按键终端打印对应字符如果你对本节课感兴趣去官网www.dounao.cn下载逗脑IDE准备好相关配件跟着课件走一遍。有任何问题或建议欢迎在评论区留言告诉我们。
返回列表