From 566c1f54bf640484e065b15ab88807b5fe3b4261 Mon Sep 17 00:00:00 2001 From: Stanislav Meduna Date: Mon, 17 May 2021 03:04:12 +0200 Subject: [PATCH] Add XPT2046 touch screen controller documentation (#1015) Co-authored-by: Guillermo Ruffino --- .../binary_sensor/images/xpt2046-full.jpg | Bin 0 -> 21294 bytes components/binary_sensor/xpt2046.rst | 276 ++++++++++++++++++ images/xpt2046.jpg | Bin 0 -> 12437 bytes index.rst | 1 + 4 files changed, 277 insertions(+) create mode 100644 components/binary_sensor/images/xpt2046-full.jpg create mode 100644 components/binary_sensor/xpt2046.rst create mode 100644 images/xpt2046.jpg diff --git a/components/binary_sensor/images/xpt2046-full.jpg b/components/binary_sensor/images/xpt2046-full.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7202edf302391b43f88f8581e3e9e6aa0a75d72a GIT binary patch literal 21294 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%0Atg)ni(P%NFo<# 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, +`AZ-Delivery`_) with ESPHome. Many cheap LCD displays contain this controller. +The :ref:`SPI ` is required to be set up in your configuration for this sensor to work. + +.. figure:: images/xpt2046-full.jpg + :align: center + :width: 50.0% + + XPT2046 Touch Screen Controller + +.. _AZ-Delivery: https://www.az-delivery.de/en/products/2-4-tft-lcd-touch-display + +.. code-block:: yaml + + # Example configuration entry + xpt2046: + id: touchscreen + cs_pin: 17 + irq_pin: 16 + update_interval: 50ms + report_interval: 1s + threshold: 400 + dimension_x: 240 + dimension_y: 320 + calibration_x_min: 3860 + calibration_x_max: 280 + calibration_y_min: 340 + calibration_y_max: 3860 + swap_x_y: False + + binary_sensor: + - platform: xpt2046 + xpt2046_id: touchscreen + id: touch_key0 + x_min: 80 + x_max: 160 + y_min: 106 + y_max: 212 + on_state: + - lambda: 'ESP_LOGI("main", "key0: %s", (x ? "touch" : "release"));' + + +Configuration variables: +------------------------ +The configuration is made up of two parts: The touch screen component, and optional individual binary sensors. + +Base Configuration: + +- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor. + +- **cs_pin** (*Optional*, :ref:`Pin Schema `): The chip select pin. + Often marked ``T_CS`` on the board. + +- **irq_pin** (*Optional*, :ref:`Pin Schema `): The touch detection pin. + Often marked ``T_IRQ`` on the board. If not specified the component will use polling + via SPI. + +- **update_interval** (*Optional*, :ref:`config-time`): The interval to check the + sensor. If ``irq_pin`` is specified the touch will be detected nearly instantaneously and this setting + will be used only for the release detection. Defaults to ``50ms``. + +- **report_interval** (*Optional*, :ref:`config-time`): The interval to periodically + report the coordinates while the touch screen is touched. Defaults to ``never``. + +- **threshold** (*Optional*, integer): The value to detect the touch or release. Defaults to ``400``. + +- **dimension_x** (*Optional*, integer): The dimension of the display in the horizontal + direction. Usually in pixels but a percentage can be useful as well. Defaults to ``100``. + +- **dimension_y** (*Optional*, integer): The dimension of the display in the vertical + direction. Usually in pixels but a percentage can be useful as well. Defaults to ``100``. + +- **calibration_x_min** (*Optional*, integer): The raw value corresponding to the left + (or top if ``swap_x_y`` is specified) edge of the display. See :ref:`xpt2046-calibration` + for the process to calibrate the touch screen. Defaults to ``0``. + +- **calibration_x_max** (*Optional*, integer): The raw value corresponding to the right + (or bottom if ``swap_x_y`` is specified) edge of the display. Defaults to ``4095``. + +- **calibration_y_min** (*Optional*, integer): The raw value corresponding to the top + (or left if ``swap_x_y`` is specified) edge of the display. Defaults to ``0``. + +- **calibration_y_max** (*Optional*, integer): The raw value corresponding to the bottom + (or right if ``swap_x_y`` is specified) edge of the display. Defaults to ``4095``. + +- **swap_x_y** (*Optional*, boolean): If true the x and y axes are swapped. Defaults to ``false``. + +- **on_state** (*Optional*, :ref:`Automation `): An automation to perform + when the touch screen is pressed or released. See :ref:`xpt2046-on_state`. + +.. _xpt2046-on_state: + +``on_state`` Action +------------------- + +This automation will be triggered when the XPT2046 touch screen detects a touch, a release +or periodically each ``report_interval`` while touched. + +This trigger provides three arguments: ``x`` and ``y`` are of the type int and specify the +coordinates of the touch and a bool ``touched`` specifying whether a touch or release was +detected. + +Additionally to the coordinates, the touch status and the raw values needed for the calibration +can be accessed as member variables. + +The following code + +.. code-block:: yaml + + xpt2046: + on_state: + - lambda: |- + ESP_LOGI("main", "args x=%d, y=%d, touched=%s", x, y, (touched ? "touch" : "release")); + ESP_LOGI("main", "member x=%d, y=%d, touched=%d, x_raw=%d, y_raw=%d, z_raw=%d", + id(touchscreen).x, + id(touchscreen).y, + (int) id(touchscreen).touched, + id(touchscreen).x_raw, + id(touchscreen).y_raw, + id(touchscreen).z_raw + ); + +produces + +.. code-block:: none + + [20:17:37][I][main:065]: args x=145, y=261, touched=touch + [20:17:37][I][main:073]: member x=145, y=261, touched=1, x_raw=1686, y_raw=3218, z_raw=424 + [20:17:37][I][main:065]: args x=145, y=261, touched=release + [20:17:37][I][main:073]: member x=145, y=261, touched=0, x_raw=0, y_raw=0, z_raw=0 + +Binary Sensor +------------- + +The ``xpt2046`` binary sensor allows you to setup areas on the touch screen as virtual +buttons. First, setup a :ref:`xpt2046-component` and then use this binary sensor platform +to create individual binary sensors for each virtual button. + +- **name** (*Optional*, string): The name for the binary sensor. +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. +- **xpt2046_id** (*Optional*, :ref:`config-id`): Specify the ID of the component the sensor is part of. Useful when you have more than one touch screen. +- **x_min** (*Required*, integer): Left coordinate of the screen area to be detected as the virtual button. +- **x_max** (*Required*, integer): Right coordinate of the screen area to be detected as the virtual button. +- **y_min** (*Required*, integer): Top coordinate of the screen area to be detected as the virtual button. +- **y_max** (*Required*, integer): Bottom coordinate of the screen area to be detected as the virtual button. +- All other options from :ref:`Binary Sensor `. + +.. _xpt2046-calibration: + +Calibration +----------- + +To match the point of the touch to the display coordinates the touch screen has to be calibrated. +The XPT2046 component returns raw values in the 0 to 4095 range. Those raw values are available +as the ``x_raw`` and ``y_raw`` member variables and for example write them out as in the example +:ref:`xpt2046-on_state`. The goal of the calibration is to identify the raw values corresponding +to the edges of the screen. + +The calibration assumes a display oriented in a way that you will be using it, i.e. your +:ref:`display-engine` component has to have the [0,0] logical coordinate at the top left. +Set the dimensions as ``dimension_x`` and ``dimension_y`` and do not set any calibration +values nor ``swap_x_y``. + +.. code-block:: yaml + + # Touchscreen + xpt2046: + id: touchscreen + cs_pin: 17 + irq_pin: 16 + dimension_x: 240 + dimension_y: 320 + on_state: + - lambda: |- + if (touched) + ESP_LOGI("cal", "x=%d, y=%d, x_raw=%d, y_raw=%d", + id(touchscreen).x, + id(touchscreen).y, + id(touchscreen).x_raw, + id(touchscreen).y_raw, + ); + +Get a stylus or a similar object, run the project and touch the corners of the screen at +the edge pixels. Repeat several times and note minimum and maximum x and y raw values. + +.. code-block:: none + + ... top left ... + [21:07:48][I][cal:071]: x=217, y=34, x_raw=3718, y_raw=445 + [21:07:49][I][cal:071]: x=222, y=32, x_raw=3804, y_raw=419 + ... top right ... + [21:07:52][I][cal:071]: x=19, y=36, x_raw=334, y_raw=370 + [21:07:52][I][cal:071]: x=22, y=35, x_raw=386, y_raw=347 + ... bottom left ... + [21:08:00][I][cal:071]: x=224, y=299, x_raw=3836, y_raw=3835 + [21:08:00][I][cal:071]: x=225, y=303, x_raw=3848, y_raw=3878 + [21:08:01][I][cal:071]: x=223, y=299, x_raw=3807, y_raw=3829 + ... bottom right ... + [21:08:11][I][cal:071]: x=16, y=299, x_raw=281, y_raw=3839 + [21:08:12][I][cal:071]: x=19, y=302, x_raw=328, y_raw=3866 + [21:08:13][I][cal:071]: x=20, y=296, x_raw=358, y_raw=3799 + +That means that the minimum raw x is 281, maximum 3848, minimum y 347 and maximum 3878. + +Identify which raw value is the display's x direction and what the y one. In our case +moving right decreases the x raw value and going down increases the y one so the axes +match and we *don't* need to use ``swap_x_y``. If the raw x is the display's y, +use ``swap_x_y = True``. + +If one of the coordinates goes in the "wrong" direction it needs to be inverted. +The inversion is performed by swapping the minimum and maximum values. In our +case the horizontal direction represented by the raw x (no swap) is inverted +so the ``calibration_x_min`` needs to be larger than ``calibration_x_max``. +The vertical direction is fine. The configuration would thus be + +.. code-block:: yaml + + xpt2046: + calibration_x_min: 3848 + calibration_x_max: 281 + calibration_y_min: 347 + calibration_y_max: 3878 + +Compile, run and click on the edges again. The x and y should now match the coordinates +of the display. + +.. code-block:: none + + [21:32:34][I][cal:071]: x=7, y=6, x_raw=3755, y_raw=407 + [21:32:37][I][cal:071]: x=237, y=4, x_raw=313, y_raw=385 + [21:32:43][I][cal:071]: x=239, y=318, x_raw=284, y_raw=3845 + [21:33:05][I][cal:071]: x=2, y=313, x_raw=3821, y_raw=3793 + +Note that the touch screen is not extremely precise and there might be nonlinearities +or similar errors so don't expect a pixel-perfect precision. You can verify the touchpoint +using a display lambda similar to the following. + +.. code-block:: none + + display: + - platform: ili9341 + lambda: |- + it.fill(BLACK); + if (id(touchscreen).touched) + it.filled_circle(id(touchscreen).x, id(touchscreen).y, 10, RED); + +To be exact, the component does the following + +- reads the raw x and y and normalizes it using (non-inverted) min and max values +- swaps x and y if needed +- inverts if needed +- scales to the display dimensions + + +See Also +-------- + +- :ref:`Binary Sensor Filters ` +- :apiref:`xpt2046/xpt2046.h` +- `XPT2046 Library `__ by `Paul Stoffregen `__ +- :ghedit:`Edit` diff --git a/images/xpt2046.jpg b/images/xpt2046.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27be3dc7d6f282e99af529beac76c88a7ca8a763 GIT binary patch literal 12437 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 F{{vaQBBuZV literal 0 HcmV?d00001 diff --git a/index.rst b/index.rst index a0aad85c0..cb4503ebe 100644 --- a/index.rst +++ b/index.rst @@ -209,6 +209,7 @@ Binary Sensor Components RDM6300, components/binary_sensor/rdm6300, rdm6300.jpg TTP229, components/binary_sensor/ttp229, ttp229.jpg Tuya Binary Sensor, components/binary_sensor/tuya, tuya.png + XPT2046, components/binary_sensor/xpt2046, xpt2046.jpg Custom Binary Sensor, components/binary_sensor/custom, language-cpp.svg Output Components