Files
ESPEasy/docs/source/Plugin/P061.rst
T

171 lines
4.7 KiB
ReStructuredText

.. include:: ../Plugin/_plugin_substitutions_p06x.repl
.. _P061_page:
|P061_typename|
==================================================
|P061_shortinfo|
Plugin details
--------------
Type: |P061_type|
Name: |P061_name|
Status: |P061_status|
GitHub: |P061_github|_
Maintainer: |P061_maintainer|
Used libraries: |P061_usedlibraries|
Supported hardware
------------------
|P061_usedby|
This plugin is used to get input from buttons/keys or a keypad transformed to a ScanCode, that can be handled in rules. The keys are connected directly or in a matrix to an 8 or 16 port I2C I/O chip. Currently supported chips are PCA8574/PCA8574A (8 I/O ports), MCP23017 and PCA8575 (16 I/O ports). Depending on the configuration, this allows to connect up to 72 keys to a single I/O chip (9*8 matrix). The PCA8575 chip doesn't have internal pull-up resistors, so these must be added externally.
Direct chip mode means that each I/O port is connected to a key, and connects to GND when pressed.
Matrix chip mode means that a matrix is created with half of the I/O ports as row and the other half as columns. At every crossing of the matrix, a key can be connected, connecting the row and column wires when pressed. The extra, 9th, row is formed by GND.
The plugin generates a ScanCode, depending on either the button-order in 'direct' mode, or the row/column position in the 'matrix' mode.
When pressing multiple keys at the same time, the lowest ScanCode value is returned, any other key(s) are ignored.
From the source-code:
.. code-block:: text
Connecting KeyPad matrix to MCP23017 / PCF8575 chip:
row 0 = GND (optional if 9 rows needed)
row 1 = GPA0 / P00
row 2 = GPA1 / P01
...
row 8 = GPA7 / P07
column 1 = GPB0 / P10
column 2 = GPB1 / P11
...
column 8 = GPB7 / P17
Typical Key Pad:
C1 C2 C3
R1 [1] [2] [3]
R2 [4] [5] [6]
R3 [7] [8] [9]
R4 [*] [0] [#]
Connecting KeyPad matrix to PCF8574 chip:
row 0 = GND (optional if 5 rows needed)
row 1 = P0
row 2 = P1
row 3 = P2
row 4 = P3
column 1 = P4
column 2 = P5
column 3 = P6
column 4 = P7
Connecting KeyPad direct to PCF8574 / MCP23017 / PCF8575 chip:
common = GND
key 1 = P0 / GPA0 / P00
key 2 = P1 / GPA1 / P01
...
key 8 = P7 / GPA7 / P07
For 16 bit I/O expanders
key 9 = -- / GPB0 / P10
key 10 = -- / GPB1 / P11
...
key 16 = -- / GPB7 / P17
NB: PCF8575 needs pull-up resistors on all 16 ports to work as intended, as the chip doesn't have internal pull-ups
Often used matrix keypads, in 16 and 12 key configuration:
.. image:: P061_Keypads16_12keys.png
:alt: Keypads with 16 and 12 keys
(Image sourced from Aliexpress)
.. include:: MCP23017_rev_d.repl
Configuration
-------------
.. image:: P061_DeviceConfiguration.png
:alt: Device configuration
* **Name** A unique name should be entered here.
* **Enabled** The device can be disabled or enabled. When not enabled the device should not use any resources.
I2C Options
^^^^^^^^^^^^
The available settings here depend on the build used. At least the **Force Slow I2C speed** option is available, but selections for the I2C Multiplexer can also be shown. For details see the :ref:`Hardware_page`
**I2C Address**: The address the device is using. Usually, for this type of I/O boards, the I2C address can be configured by connecting ``A0``/``A1``/``A2`` to either GND or VCC.
Depending on the chip used, different sets of I2C addresses are available to select from.
For MCP23017 and PCA8575, these are the available addresses:
.. image:: P061_I2CAddressOptions16bitIO.png
:alt: I2C addresses for MCP23017 and PCF8575
For PCA8574 and PCA8574A, these are the available addresses:
.. image:: P061_I2CAddressOptionsPCF8574.png
:alt: I2C addresses for PCF8574 and PCF8574A
If a **Chip (Mode)** for PCA8574 is selected, an extra message is shown, as the A version of that chip uses a different address-range:
.. image:: P061_I2CAddressPCF8574.png
:alt: Extra info on difference PCA8574 and PCA8574A
Device Settings
^^^^^^^^^^^^^^^^
* **Chip (Mode)**: Select the configuration needed.
Available options:
.. image:: P061_ChipModeOptions.png
:alt: Chip mode options
.. include:: DataAcquisition.repl
* **Interval** By default, Interval will be set to 0 sec.
Values
^^^^^^
The key scan code is available in ``ScanCode``. After releasing the key, the ScanCode is reset to 0.
Change log
----------
.. versionchanged:: 2.0
...
|added|
2022-01-23 Add support for PCA8575 chip, and multi-instance use of the plugin.
|added|
Major overhaul for 2.0 release.
.. versionadded:: 1.0
...
|added|
Initial release version.