一、实验目标

使用ESP32自带的Touch pin也就是触摸引脚,学习如何通过触摸引脚控制LED和外部中断的使用。开发板的Touch pin引脚有多个,开发板原理图中标注为Touch的引脚,具体引脚可见文档末尾。

二、实验器材

三、实验步骤

步骤1:硬件确认

  1. 使用USB线连接ESP32和电脑
  2. 观察板载LED是否亮起(电源指示灯)
  3. 将杜邦线母头连接ESP32的Touch pin引脚(通过下表选择一个)
  4. 若使用外置LED,可在面板板上搭建如下电路(LED引脚连接需接限流电阻)

步骤2:软件准备

  1. 打开Arduino IDE
  2. 设置开发板类型:工具 → 开发板 → ESP32 Arduino → ESP32 Dev Module
  3. 选择端口:工具 → 端口 → 选择对应的COM端口(Windows)

步骤3:编写触摸引脚控制LED程序

在 Arduino IDE 中输入以下代码:

// 定义触摸引脚 (T0对应GPIO4)
#define TOUCH_PIN 4
// 定义LED引脚 (ESP32 DevKit板载LED通常是GPIO2)
#define LED_PIN 2
// 中断模式设置:0为轮询模式,1为中断模式
#define EXT_ISR_MODE 0

// 阈值,需要通过串口监视器观察并调整
int threshold = 20; 
// 触摸值
int touchValue;

void setup() {
  Serial.begin(115200);
  delay(1000); // 等待串口稳定

  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  touchValue = touchRead(TOUCH_PIN);
  Serial.print("Touch Value: ");
  Serial.println(touchValue);

  // 简单的阈值判断逻辑
  if (touchValue < threshold) {
    digitalWrite(LED_PIN, HIGH); // 触摸时,值变小,LED亮
  } else {
    digitalWrite(LED_PIN, LOW);  // 未触摸,LED灭
  }
  
  delay(100);
}

步骤4:上传程序

  1. 点击上传按钮(→)
  2. 观察上传过程:
    • 如果出现"上传失败",尝试按住BOOT按钮再点击上传
    • 看到"上传成功"提示

步骤5:打开串口监视器

点击右上角放大镜图标,波特率设置为 115200。

步骤6:观察效果与调试

  1. 观察用手指触摸杜邦线公头时Touch数值的变化。
  2. 修改阈值:
    • 修改代码25行中阈值 (threshold) 实现以下效果:
    • 小于阈值 → LED亮
    • 大于阈值 → LED灭
  3. 调试中断模式:
    • 将代码第二行 EXT_ISR_MODE 值改为 1(需替换下方进阶代码)。
    • 用手指触摸引脚观察Touch中断实验现象。

步骤7:进阶实验

使用触摸中断和LED,实现触摸一次LED亮,再触摸一次LED灭的效果。以下是使用中断实现的代码示例:

#define TOUCH_PIN 4
#define LED_PIN 2
#define THRESHOLD 20 // 需要根据实际测试修改此阈值

bool ledState = false;

// 中断服务函数 (ISR)
void gotTouch() {
  ledState = !ledState;
  digitalWrite(LED_PIN, ledState);
}

void setup() {
  Serial.begin(115200);
  delay(1000);
  pinMode(LED_PIN, OUTPUT);
  
  // 绑定中断函数
  touchAttachInterrupt(TOUCH_PIN, gotTouch, THRESHOLD);
}

void loop() {
  // 主循环可以处理其他任务,或者置空
  // 注意:在某些ESP32核心版本中,loop中可能需要保留简单的代码以保持看门狗复位
  delay(100);
}

四、常见问题及解决

问题1:touch_value的值不变化

问题2:LED不亮

问题3:无法进入TouchEvent中断服务函数

ESP32 触摸引脚对照表

触摸传感器 GPIO引脚
T0GPIO4
T1GPIO0 (慎用)
T2GPIO2 (慎用)
T3GPIO15 (慎用)
T4GPIO13
T5GPIO12
T6GPIO14
T7GPIO27
T8GPIO33
T9GPIO32

注意: GPIO0、GPIO2、GPIO15等引脚有特殊功能(Bootstrapping引脚),尽量避免使用。

问题4:上传失败

五、实验总结

知识点掌握

  1. 学习条件编译语句
  2. ESP32输入设置:将引脚设置为输入
  3. 了解中断的概念
  4. 通过touchRead函数获取数值
  5. touchAttachInterrupt函数:掌握如何将中断函数和中断源绑定