文章目录

  • 前言
  • 一、TOUCHU 触摸传感器工作原理及硬件设计
  • 1.触摸传感器的原理
  • 2.多个触摸按键的识别方案
  • 3.硬件连接
  • 二、程序设计
  • 1.传感器IO选择
  • 2.驱动库的使用
  • 3. 关于按键枚举
  • 4. 使用演示
  • 三、常见问题
  • 1. 触摸误识别
  • 2. 是否可以通过串联电阻来提高识别率
  • 四、总结



前言

       总所周知,ESP32内部集成了一些传感器,其中就包括触摸传感器,并提供了10个通道给开发者们使用。这个意思就是,总共就10个触摸用完就没了。

       今天呢,就给大家介绍一下用一个触摸传感器识别多个触摸按键的方法,全是骚操作。

一、TOUCHU 触摸传感器工作原理及硬件设计

1.触摸传感器的原理

       ESP32芯片内部的TOUCH触摸传感器属于电容式触摸传感器,传感器其实就是一个RC振荡器,相信电子专业的同学应该对这个有点印象,它的公式是这样的:

       ESP32内部的传感器的输出就是频率。可以从公式中看到,电阻阻值固定,当电容增大时,频率 Fc就是降低。

2.多个触摸按键的识别方案

       因此当我们人手去触摸按键时,电容会增大,传感器的频率输出就会减小。而一个IO识别多个触摸按键的操作就是通过不同的频率来操作,而我们现在要解决的就是如何让多个触摸按键输出不同的频率。根据上面那条公式,可以看出有两种方式:

  • 通过改变电阻,达到触摸时改变频率的目的
  • 通过改变电容,达到触摸时改变频率的目的

3.硬件连接

       我们测的是电容的触摸按键,所以是采用改变电容的方式来改变传感器的输出频率,通过给各个触摸按键串联不同大小的电容,以达到区分按键的目的。

触摸传感器python实现 触摸传感器的应用_touchpad


可以看到,四个触摸按键博主所串联的电容的大小相差都是很大的,就是想让触摸传感器的输出相差也大一点,方便我们软件作识别。

二、程序设计

1.传感器IO选择

       ESP32的TOUCH传感器的IO是有固定映射的,这10个通道的对应关系如下:

TOUCH_PAD_NUM

ESP32 GPIO

TOUCH_PAD_NUM0

GPIO4

TOUCH_PAD_NUM1

GPIO0

TOUCH_PAD_NUM2

GPIO2

TOUCH_PAD_NUM3

GPIO15

TOUCH_PAD_NUM4

GPIO13

TOUCH_PAD_NUM5

GPIO12

TOUCH_PAD_NUM6

GPIO14

TOUCH_PAD_NUM7

GPIO27

TOUCH_PAD_NUM8

GPIO33

TOUCH_PAD_NUM9

GPIO32

这次,我们选择的是TOUCH_PAD_NUM9也就是IO32引脚。

2.驱动库的使用

       本次应用所用的程序,我们已经写成了函数:

  • app_touch_calibration(touch_pad_t touch_num)
    校准函数,会自动校准并储存不同触摸按键的输出频率,每次复位都会执行校准
  • app_touch_read_raw_data(touch_pad_t touch_num)
    按键识别函数,输出识别到的按键枚举。

3. 关于按键枚举

        在app_touch.h 文件中,有个touch_button_num_t 枚举,里面定义触摸按键的数量,如需添加,请在枚举里面添加相关枚举号即可:

//自己修改枚举号
typedef enum {
    TOUCH_BUTTON_ERROR = 0,
    /** 可以修改以下内容**/
    TOUCH_BUTTON_NUM1,
    TOUCH_BUTTON_NUM2,
    TOUCH_BUTTON_NUM3,
    TOUCH_BUTTON_NUM4,
	
	/***********************/
    TOUCH_BUTTON_NUM_MAX,
}touch_button_num_

4. 使用演示

触摸传感器python实现 触摸传感器的应用_touchpad_02

三、常见问题

1. 触摸误识别

        问题:明明触摸的这个按键,却识别到其他按键号。
答:按键之间输出的频率太近,导致误识别率提高,建议修改串联的电容。可以通过校准函数的输出来调节电容大小,知道每个按键输出的差距变大,越大越好

2. 是否可以通过串联电阻来提高识别率

答:可以,但是不能过多,当有两个触摸按键输出的频率无法进行电容调节时,其中一个可以改为电阻来增大两个触摸按键的频率差距

四、总结

        总而言之,硬件上尽可能地把各个触摸按键的输出频率的差距变大,越大越好,越大越精准。

官方官网:https://www.ai-thinker.com 开发DOCS:https://docs.ai-thinker.com 官方论坛:http://bbs.ai-thinker.com