电子说
ESP32芯片内置了多达 10 个电容式触摸传感 GPIO,能够探测由手指或其他物品直接接触或接近而产生的电容差异。这种设计的低噪声特性和电路的高灵敏度支持使用相对较小的触摸板。也可以使用触摸板阵列以探测更大区域或更多点。这些引脚可以很容易地集成到电容盘,并取代机械按钮。此外,当ESP32处于深度睡眠状态时,触摸还可以用作唤醒源。
触摸传感器系统主要由 3 个部分组成,从外到内依次为平面保护层、电极与基片,如下图
主要特性:
• 最多支持 10 路电容触摸管脚/通用输入输出接口 (General Purpose Input and Output, GPIO)
• 触摸管脚可以组合使用,可覆盖更大触感区域或更多触感点
• 触摸管脚的传感由有限状态机 (FSM) 硬件控制,由软件或专用硬件计时器发起
• 触摸管脚是否受到触碰的信息可由以下方式获得:
– 由软件直接检查触摸传感器的寄存器
– 由触摸监测模块发起的中断信号判断
– 由触摸监测模块上的 CPU 是否从 Deep-sleep 中唤醒判断
• 支持以下场景下的低功耗工作:
– CPU 处于 Deep-sleep 节能模式,将在受到触碰后逐步唤醒
– 触摸监测由超低功耗协处理器 (ULP coprocessor) 管理
ULP 用户程序可通过写入与检查特定寄存器,判断是否达到触碰阈值

触摸管脚的电容会进行周期性充放电。” 触摸管脚的内部电压” 代表充/放电电压在参考高值 (drefH) 与参考低值(drefL) 之间的变化。在每次变化中,触摸传感器将生成一个输出脉冲 (OUT)。由于触摸管脚受到触碰(高电容)与未受到触碰(低电容)时的电压变化速率不同,我们可以通过统计同一时间间隔内出现的输出脉冲数量,判断触摸管脚是否受到触碰。可以通过 TIE_OPT 设置开始充/放电的初始电压电平。
打开Arduino IDE ESP32的触摸传感器的示例
// ESP32 Touch Test
// Just test touch pin - Touch0 is T0 which is on GPIO 4.
void setup() {
Serial.begin(115200);
delay(1000); // give me time to bring up serial monitor
Serial.println("ESP32 Touch Test");
}
void loop() {
Serial.println(touchRead(T0)); // get value using T0
delay(1000);
}
由于T1对应GPIO0,GPIO0被用作BOOT程序下载模式占用,这里修改T1为T0,T0对应GPIO4
上传代码到ESP32开发板,连接一根导线到GPIO4引脚,并用手指触摸导线,可读取不同的触摸值
打开串口助手或串口绘图仪,触摸导线另一头,ESP32可读取到不同的触摸值

通过本实验我们了解了ESP32芯片内置的电容式触摸传感器的基本原理和使用方法。把读取到的触摸值和一个设定阈值比较,还可以实现更多的功能,比如触摸灯,触摸门禁等。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !