当前位置: 首页 > news >正文

Esp32基础(③旋转编码器)

一、引脚定义说明

先明确各引脚功能,避免接错:

编码器引脚功能描述ESP32 连接要求
GND接地必须与 ESP32 共地(任意 GND 引脚)
VCC电源输入通常接 3.3V(部分支持 5V,需看模块手册)
CLK时钟信号(旋转脉冲输出)接 ESP32 任意数字 GPIO 引脚(输入模式)
DT数据信号(方向识别)接 ESP32 另一个数字 GPIO 引脚(输入模式)
SW中心按键(开关信号)接 ESP32 数字 GPIO 引脚(输入模式,建议加下拉电阻)
引脚名字简单理解(作用)
GND地线,所有设备的 “负极” 要连在一起,就像电路的 “公共下水道”,电流从这回去
VCC电源线,给编码器供电的 “正极”,一般接 3.3V(接对了编码器才能工作)
CLK时钟线,编码器旋转时会发出 “脉冲信号”(像眨眼睛一样闪),告诉 ESP32 “我动了”
DT方向线,和 CLK 配合,告诉 ESP32 “我是正转还是反转”(比如 CLK 闪的时候,DT 亮就是正转,灭就是反转)
SW按键线,编码器中间的按钮,按下去的时候会给 ESP32 发信号 “我被按了”

CLK(Clock):编码器旋转时,会像 “闪光灯” 一样不断切换高低电平(0 和 1),告诉 ESP32 “我在转动”。
DT(Data):和 CLK 配合,通过两者的电平差异(比如 CLK 亮时 DT 灭,或相反),告诉 ESP32 “我在正转还是反转”。
SW(Switch):编码器中间的按钮,按下时会切换电平,相当于 “一个独立的按键信号”。

所有元器件的地线(GND)连在一起,就像一条 “公共负极线”,最终汇总后连接到电源的负极。这样电流就能从电源正极(VCC)流出,经过各个元器件(比如你的旋转编码器、ESP32),再通过这条公共地线流回电源负极,形成一个完整的 “电流回路”。

二、ESP32 具体接线表(推荐引脚)

选择 ESP32 通用 GPIO 引脚(避开特殊功能引脚,如 GPIO0、GPIO1 等下载引脚),推荐如下:

编码器引脚连接到 ESP32 的引脚备注
GND任意标有 GND 的引脚例如 ESP32 开发板边缘的 GND 引脚
VCC标有 3V3 的引脚优先 3.3V 供电,避免 5V 烧毁模块
CLKGPIO18可替换为 GPIO2、GPIO4 等通用引脚
DTGPIO19与 CLK 用不同引脚,避免冲突
SWGPIO21按键引脚,需在代码中设置下拉电阻

三、接线示意图(简化版)

       ESP32 开发板┌───────────────────┐│  3V3     GND      ││   ▲        ▲      ││   │        │      ││ GPIO18  GPIO19    ││   ▲        ▲      ││   │        │      ││ GPIO21            ││   ▲               │
┌──┴───┴────────┴──────┴───┐
│  旋转编码器/模拟器        │
│  VCC GND CLK DT SW       │
│                          │
└──────────────────────────┘

完整main.py代码

from machine import Pin
import time# 定义引脚(对应接线)
CLK = Pin(18, Pin.IN, Pin.PULL_UP)  # 时钟引脚,启用内部上拉
DT = Pin(19, Pin.IN, Pin.PULL_UP)   # 数据引脚,启用内部上拉
SW = Pin(21, Pin.IN, Pin.PULL_DOWN) # 按键引脚,启用内部下拉# 初始化变量
counter = 0          # 计数变量,正转递增,反转递减
last_clk_state = CLK.value()  # 记录上一次CLK状态
sw_state = 0         # 按键状态
last_sw_state = 0    # 上一次按键状态
debounce_time = 50   # 按键防抖时间(ms)
last_debounce = 0    # 最后一次防抖时间print("旋转编码器测试 - 开始旋转或按动旋钮")
print("初始计数: 0")while True:# 读取当前CLK状态current_clk_state = CLK.value()# 检测CLK状态变化(脉冲信号)if current_clk_state != last_clk_state:# CLK状态变化时,读取DT状态判断方向if DT.value() != current_clk_state:# DT与CLK状态不同 → 正转counter += 1print(f"正转 | 计数: {counter}")else:# DT与CLK状态相同 → 反转counter -= 1print(f"反转 | 计数: {counter}")# 更新上一次CLK状态last_clk_state = current_clk_state# 按键检测(带防抖)current_sw_state = SW.value()current_time = time.ticks_ms()# 检测按键状态变化且超过防抖时间if current_sw_state != last_sw_state and time.ticks_diff(current_time, last_debounce) > debounce_time:if current_sw_state == 1:print("按键按下")# 可在此处添加按键触发的功能(如重置计数)# counter = 0# print("计数已重置")# 更新状态和时间last_sw_state = current_sw_statelast_debounce = current_time# 短暂延迟,降低CPU占用time.sleep(0.001)

123

http://www.dtcms.com/a/337602.html

相关文章:

  • 用一个label控件随便显示一些字(用矢量字库),然后用anim动画动态设置lable位置
  • 上海1KM人口热力数据分享
  • 音频分类模型笔记
  • rust 从入门到精通之变量和常量
  • 杂记 04
  • 脑潜在进展:基于潜扩散模型的三维脑磁共振成像个体时空疾病进展研究|文献速递-深度学习人工智能医疗图像
  • python的课外学习生活活动系统
  • 视觉语言导航(13)——AIR-VLN 4.3
  • Mysql核心框架知识
  • 学习雪花算法
  • 冒泡排序——简单理解和使用
  • NVIDIA 技术沙龙探秘:聚焦 Physical AI 专场前沿技术
  • Handler以及AsyncTask知识点详解
  • 数据结构部分算法记录
  • Oracle维护指南
  • 计算机大数据毕业设计推荐:基于Hadoop+Spark的食物口味差异分析可视化系统【源码+文档+调试】
  • RPM数据库损坏修复:DB_RUNRECOVERY: Fatal error, run database recovery
  • 新能源知识库(78)微网控制器与储能LCU对比
  • 【opencv-Python学习日记(7):图像平滑处理】
  • 普通用户使用docker命令
  • 「数据获取」《中国经济普查年鉴》(2004、2008、2013、2018、2023)(获取方式看绑定的资源)
  • Centos7 使用lamp架构部署wordpress
  • Django开发Web应用
  • Vitis 2023下调用math.h(log)函数提示未定义的解决办法
  • HT6875_2.8W 防削顶单声道D 类音频功率放大器
  • CoRL 2025|隐空间扩散世界模型LaDi-WM大幅提升机器人操作策略的成功率和跨场景泛化能力
  • vue3 el-table-column 列头添加 图标按钮
  • 无人机迫降模式技术要点解析
  • HTTP协议-4-浏览器是怎么抉择HTTP版本的?
  • MySQL Operator开发实战系列:特别篇 - 生产环境故障排查与性能调优指南