当前位置: 首页 > 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.lryc.cn/news/625129.html

相关文章:

  • wait / notify、单例模式
  • 在openEuler系统中如何查看文件夹下每个文件的大小
  • AVB(Android Verified Boot)中vbmeta结构浅析
  • C/C++ 中 str、str、*str 在指针语境下的具体含义(以 char* str 为例):
  • Android输入框文字不垂直居中
  • Linux下的软件编程——IPC机制
  • Java发送企业微信通知
  • Vue2篇——第五章 Vue.js 自定义指令与插槽核心
  • (第十八期)图像标签的三个常用属性:width、height、border
  • minio安装和配置
  • 【DL学习笔记】交叉熵损失函数详解
  • 之前说的要写的TCP高性能服务器,今天来了
  • 给linux的root磁盘扩容
  • Ansible 部署LNMP
  • 每日AI要闻【20250818】
  • 自回归图像生成新突破!140亿参数自回归模型NextStep-1开源,图像生成无需扩散模型
  • 基于SFM的三维重建MATLAB程序
  • MBTI职业规划指南:发掘你的人格潜能,照亮职业发展之路
  • Elasticsearch查询中的track_total_hits参数
  • 力扣hot100:移动零问题的巧妙解决:双指针与原地交换策略(283)
  • 构建高效智能语音代理:技术架构、实现细节与API服务推荐
  • shell脚本第一阶段
  • Linux命令大全-rm命令
  • 音频算法工程师技能1
  • Docker常见指令速查
  • mq存量消息如何处理
  • 电商API接口实录对接:1688混批价格函数处理
  • python DataFrame基础操作
  • 烟草行政处罚案卷制作与评查平台被中国信通院认定为2025年商业产品及企业典型案例
  • 第一阶段C#基础-13:索引器,接口,泛型