MPR121 Capacitive Touch Sensor
==============================

.. seo::
    :description: Instructions for setting up MPR121 Capacitive Touch Sensor
    :image: mpr121.jpg
    :keywords: MPR121

The ``mpr121`` sensor platform allows you to use your MPR121
(`datasheet <https://cdn-learn.adafruit.com/downloads/pdf/adafruit-mpr121-12-key-capacitive-touch-sensor-breakout-tutorial.pdf>`__,
`Adafruit`_) Capacitive Touch Sensor with ESPHome. The :ref:`I²C <i2c>` is
required to be set up in your configuration for this sensor to work.

.. figure:: images/mpr121-full.jpg
    :align: center
    :width: 50.0%

    MPR121 Capacitive Touch Sensor. Image by `Adafruit`_.

.. _Adafruit: https://learn.adafruit.com/adafruit-mpr121-12-key-capacitive-touch-sensor-breakout-tutorial/overview

.. code-block:: yaml

    # Example configuration entry
    mpr121:
      id: mpr121_component
      address: 0x5A
      touch_debounce: 1
      release_debounce: 1
      touch_threshold: 10
      release_threshold: 7

    binary_sensor:
      - platform: mpr121
        id: touch_key0
        channel: 0
        name: "Touch Key 0"
        touch_threshold: 12
        release_threshold: 6

Configuration variables:
------------------------

The configuration is made up of two parts: The central component, and individual Binary sensors per channel.

Base Configuration:

- **address** (*Optional*, integer): The I²C address of the sensor. Defaults to ``0x5A``.
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor.
- **touch_debounce** (*Optional*, integer): The minimum length before a touch is recognized. Range is from 0 to 7.
  Defaults to 0.
- **release_debounce** (*Optional*, integer): The minimum length that no touch is recognized before a release event is created.
  Range is from 0 to 7. Defaults to 0.
- **touch_threshold** (*Optional*, integer): The touch threshold for all channels. This defines the sensitivity for touch detection
  and should be between 5 and 30 (lower = more sensitive). Defaults to 12. Typically the touch threshold is a little bigger than the release threshold.
- **release_threshold** (*Optional*, integer): The release defines the sensitivity for touch detection and should be between 5 and 30. Defaults to 6.

Binary Sensor Configuration:

- **name** (**Optional**, string): The name for the binary sensor.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- **channel** (*Required*, integer): The channel number at the MPR121 the touchkey is connected to.
- **touch_threshold** (*Optional*, integer): A per-channel override of the global touch_threshold value. If not specified, uses the global value.
- **release_threshold** (*Optional*, integer): A per-channel override of the global release_threshold value. If not specified, uses the global value.
- All other options from :ref:`Binary Sensor <config-binary_sensor>`.

See Also
--------

- :ref:`sensor-filters`
- :apiref:`mpr121/mpr121.h`
- `Adafruit MPR121 Library <https://github.com/adafruit/Adafruit_MPR121_Library>`__ by `Adafruit <https://www.adafruit.com/>`__
- :ghedit:`Edit`
