diff --git a/changelog/2022.11.0.rst b/changelog/2022.11.0.rst
index 219fbcfe0..945d2e60b 100644
--- a/changelog/2022.11.0.rst
+++ b/changelog/2022.11.0.rst
@@ -93,6 +93,10 @@ By default ESPHome tries to compile using all of the processor cores, and this a
...
compile_process_limit: 1
+Release 2022.11.1 - November 17
+-------------------------------
+
+- Support ADC on RP2040 :esphomepr:`4040` by :ghuser:`jesserockz`
Full list of changes
--------------------
diff --git a/components/bluetooth_proxy.rst b/components/bluetooth_proxy.rst
index 3e5bb8b44..5db10d5cd 100644
--- a/components/bluetooth_proxy.rst
+++ b/components/bluetooth_proxy.rst
@@ -5,27 +5,25 @@ Bluetooth Proxy
:description: Instructions for setting up the Bluetooth Proxy in ESPHome.
:image: bluetooth.svg
-Home Assistant can expand its Bluetooth reach by communicating through
-the Bluetooth proxy component in ESPHome. Place your ESPHome devices close to the
-Bluetooth devices that you want to interact with for the best
-experience.
+Home Assistant can expand its Bluetooth reach by communicating through the Bluetooth proxy component in ESPHome.
+The Individual device integrations in Home Assistant (such as BTHome) will receive the data from the Bluetooth
+Integration in Home Assistant which automatically aggregates all ESPHome bluetooth proxies with any USB Bluetooth
+Adapters you might have. This exceptional feature offers fault tolerant connection between the Bluetooth devices
+and Home Assistant.
-If you're looking to create a device that is just a Bluetooth Proxy, see our `Bluetooth Proxy installer `__ website.
-
-The Bluetooth proxy depends on :doc:`esp32_ble_tracker` so make sure to add that to your configuration.
+If you're looking to create an ESPHome node that is just a Bluetooth Proxy, see
+our `Bluetooth Proxy installer `__ website.
.. note::
- Bluetooth proxy requires Home Assistant 2022.9 or later.
-
-.. note::
-
- The Bluetooth proxy of ESPHome currently only provides Home Assistant with passive sensor
- data that is advertised by certain devices. Not all devices are supported and ESPHome does not decode or keep a list.
- To find out if your device is supported, please search for it in the `Home Assistant Integrations `__ list.
-
- The Individual device integrations in Home Assistant (such as BTHome) will receive the data from the Bluetooth Integration in Home Assistant
- which automatically aggregates all ESPHome bluetooth proxies with any USB Bluetooth Adapters you might have.
+ The Bluetooth proxy of ESPHome provides Home Assistant with a maximum number of 3 simultaneous active connections.
+ Devices which maintain a *continuous active* connection will consume one of these constantly, whilst devices which
+ do *periodic disconnections and reconnections* will permit using more than 3 of them (on a statistical basis).
+ Passively broadcasted sensor data (that is advertised by certain devices without active connections) is received
+ separately from these, and is not limited to a specific number.
+
+ Not all devices are supported and ESPHome does not decode or keep a list. To find out if your device is supported,
+ please search for it in the `Home Assistant Integrations `__ list.
Configuration:
--------------
@@ -36,6 +34,27 @@ Configuration:
- **active** (*Optional*, boolean): Enables proxying active connections. Defaults to ``false``. Requires Home Assistant 2022.10 or later.
+The Bluetooth proxy depends on :doc:`esp32_ble_tracker` so make sure to add that to your configuration.
+
+.. note::
+
+ Bluetooth proxy requires Home Assistant 2022.9 or later.
+
+Improving reception performance
+-------------------------------
+
+Use a board with an Ethernet connection to the network, to offload ESP32's radio module from WiFi traffic, this gains performance on Bluetooth side.
+To maximize the chances of catching advertisements of the sensors, you can set ``interval`` equal to ``window`` in :doc:`/components/esp32_ble_tracker` scan parameter settings:
+
+.. code-block:: yaml
+
+ esp32_ble_tracker:
+ scan_parameters:
+ interval: 1100ms
+ window: 1100ms
+
+Avoid placing the ESP node in racks, close to routers/switches or other network equipment as EMI interference will degrade Bluetooth signal reception. For best results put as far away as possible, at least 3 meters distance from any other such equipment. Place your ESPHome devices close to the Bluetooth devices that you want to interact with for the best experience.
+
See Also
--------
diff --git a/components/display/images/lcd_gpio.svg b/components/display/images/lcd_gpio.svg
new file mode 100644
index 000000000..e0a4699c5
--- /dev/null
+++ b/components/display/images/lcd_gpio.svg
@@ -0,0 +1,10604 @@
+
+
+
+
diff --git a/components/display/lcd_display.rst b/components/display/lcd_display.rst
index ba6440a70..8527c9b39 100644
--- a/components/display/lcd_display.rst
+++ b/components/display/lcd_display.rst
@@ -2,32 +2,41 @@ Character-Based LCD Display
===========================
.. seo::
- :description: Instructions for setting up character-based LCD displays.
+ :description: Instructions for setting up character-based HD44780 LCD displays.
:image: lcd.jpg
+The ``lcd_pcf8574`` and ``lcd_gpio`` display components allow you to use HD44780-compatible, character-based LCD displays
+with ESPHome. This integration is only for LCD displays that display individual characters on a screen
+(usually 8-40 columns and 2-4 rows), and not for LCD displays that can control each pixel individually.
+
+.. figure:: images/lcd-hello_world.jpg
+ :align: center
+ :width: 60.0%
+
+.. note::
+
+ Multiple versions of the display exist, supporting different character sets:
+
+ - HD44780UA00 English-Japanese which includes katakana characters, some Greek letters and mathematical symbols
+ - HD44780UA02 English-European which includes Greek, Cyrillic and Western European characters (with some diacritics)
+ - HD44780UBxx custom, manufacturer-specific character sets
+
+ It is also possible to add eight user-defined characters.
+
.. _lcd-pcf8574:
lcd_pcf8574 Component
---------------------
-The ``lcd_pcf8574`` display platform allows you to use standard character-based LCD displays like
-`this one `__
-with ESPHome. This integration is only for LCD displays that display individual characters on a screen (usually 16-20 columns
-and 2-4 rows), and not for LCD displays that can control each pixel individually.
-
-This version of the LCD integration is for LCD displays with a PCF8574 connected to all the data pins. This has
-the benefit that you only need to connect two data wires to the ESP instead of the 6 or 10 with the :ref:`lcd-gpio`.
-As the communication with the :ref:`I²C Bus `, you need to have an ``i2c:`` section in your configuration.
+``lcd_pcf8574`` is for LCD displays with a PCF8574 GPIO expander module connected to all the data pins. This has the
+benefit that you only need to connect two data wires to the ESP instead of the six or ten as with the :ref:`lcd-gpio`.
+The communication happens via :ref:`I²C Bus `, you need to have an ``i2c:`` section in your configuration.
.. figure:: images/lcd-pcf8574.jpg
:align: center
:width: 75.0%
- The PCF8574 chip attached to the LCD Display.
-
-.. figure:: images/lcd-hello_world.jpg
- :align: center
- :width: 60.0%
+ LCD Display with a PCF8574 board attached on the back
.. code-block:: yaml
@@ -38,8 +47,8 @@ As the communication with the :ref:`I²C Bus `, you need to have an ``i2c:`
display:
- platform: lcd_pcf8574
- dimensions: 18x4
- address: 0x3F
+ dimensions: 20x4
+ address: 0x27
lambda: |-
it.print("Hello World!");
@@ -54,29 +63,32 @@ Configuration variables:
- **update_interval** (*Optional*, :ref:`config-time`): The interval to re-draw the screen. Defaults to ``1s``.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
+.. note::
+
+ If you're not seeing anything on the display, try turning the contrast potentiometer around on the
+ PCF8574 board.
+
.. _lcd-gpio:
lcd_gpio Component
------------------
-The ``lcd_gpio`` display platform allows you to use standard character-based LCD displays like `this one `__
-with ESPHome. This integration is only for LCD displays that display individual characters on a screen (usually 16-20 columns
-and 2-4 rows), and not for LCD displays that can control each pixel individually. Also, this is the GPIO version of the LCD
-integration where each of the data pins of the LCD needs a dedicated GPIO pin on the ESP. These LCD displays are also
-commonly sold with a PCF8574 chip which only need two lines to the ESP, for that see :ref:`lcd-pcf8574`.
+The ``lcd_gpio`` version of this component addresses the screen directly and does not employ a GPIO expander module.
+Each of the data pins of the LCD needs a dedicated GPIO pin on the ESP. Connecting the screen this way offers
+faster refresh, especially in conjunction with an :ref:`LCD Menu `.
-.. figure:: images/lcd-full.jpg
+.. figure:: images/lcd_gpio.svg
:align: center
:width: 75.0%
- LCD Display.
+ LCD Display GPIO pinout
.. code-block:: yaml
# Example configuration entry
display:
- platform: lcd_gpio
- dimensions: 18x4
+ dimensions: 20x4
data_pins:
- D0
- D1
@@ -91,20 +103,25 @@ Configuration variables:
************************
- **dimensions** (**Required**, string): The dimensions of the display with ``COLUMNSxROWS``. If you're not
- sure, power the display up and just count them.
-- **data_pins** (**Required**, list of :ref:`Pin Schemas `): A list of the data pins you
- have hooked up to the LCD. The list can either be 8 items long (when you have connected all 8 data pins), or
- 4 items long (if you're operating in 4-bit mode with either the first 4 data pins connected or the last 4 data
- pins connected).
-- **enable_pin** (**Required**, :ref:`Pin Schema `): The pin you have ``EN`` hooked up to.
-- **rs_pin** (**Required**, :ref:`Pin Schema `): The pin you have ``RS`` hooked up to.
-- **rw_pin** (*Optional*, :ref:`Pin Schema `): Optionally set the pin you have ``RW`` hooked up to.
- You can also just permanently connect that pin to GND.
+ sure, power the display on, turn contrast high up and just count them.
+- **data_pins** (**Required**, list of :ref:`pins `): A list of the data pins you
+ have hooked up to the LCD. The list can either be 4 items long (operating in 4-bit mode with
+ either the first 4 data pins connected or the last 4 data pins connected), or 8 items long (when you have
+ connected all 8 data pins).
+- **enable_pin** (**Required**, :ref:`pin `): The pin you have ``E`` (``06``) hooked up to.
+- **rs_pin** (**Required**, :ref:`pin `): The pin you have ``RS`` (``04``) hooked up to.
+- **rw_pin** (*Optional*, :ref:`pin `): Optionally set the pin you have ``R/W`` (``05``) hooked up to. You can also just permanently connect that pin to ``GND``.
- **lambda** (*Optional*, :ref:`lambda `): The lambda to use for rendering the content on the display.
See :ref:`display-lcd_lambda` for more information.
- **update_interval** (*Optional*, :ref:`config-time`): The interval to re-draw the screen. Defaults to ``1s``.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
+.. note::
+
+ If you're not seeing anything on the display, make sure you apply ``3.3V`` to the ``VEE`` (``03``) contrast control
+ pin of the board. You can use a potentiometer to make it adjustable.
+
+
.. _display-lcd_lambda:
Rendering Lambda
@@ -135,7 +152,7 @@ by default which means the character at the top left.
// Let's write a sensor value (let's assume it's 42.1)
it.printf("%.1f", id(my_sensor).state);
- // Result: "42.1" (the dot will appear on the "2" segment)
+ // Result: "42.1" (the dot will appear on the segment showing "2")
// Print a right-padded sensor value with 0 digits after the decimal
it.printf("Sensor value: %8.0f", id(my_sensor).state);
@@ -147,30 +164,68 @@ by default which means the character at the top left.
# (Optional) For displaying time:
time:
- - platform: sntp
+ - platform: homeassistant
id: my_time
-.. note::
-
- If you're not seeing anything on the display, make sure you try turning the contrast potentiometer around.
-
Please see :ref:`display-printf` for a quick introduction into the ``printf`` formatting rules and
:ref:`display-strftime` for an introduction into the ``strftime`` time formatting.
+User Defined Characters
+-----------------------
+
+The LCD display has the possibility to define up to eight user defined characters occupying the characters
+``0`` to ``7`` and mirrored at ``8`` to ``15`` (i.e. ``\x08`` can be used instead of the ``\0`` that can
+be problematic in strings). Each character has eight lines of five bits, with the first line on the top
+and the most significant bit on the left, meaning that ``0b10000`` followed by six zeros and a ``0b00001``
+defines a dot at the upper left and lower right of the character.
+
+.. code-block:: yaml
+
+ display:
+ - platform: lcd_pcf8574
+ id: mydisplay
+ # ...
+ user_characters:
+ - position: 0
+ data:
+ - 0b00000
+ - 0b01010
+ - 0b00000
+ - 0b00100
+ - 0b00100
+ - 0b10001
+ - 0b01110
+ - 0b00000
+ - position: 7
+ data:
+ - 0b00000
+ - 0b01010
+ - 0b00000
+ - 0b00100
+ - 0b00100
+ - 0b00000
+ - 0b01110
+ - 0b10001
+ lambda: |-
+ it.print("Hello, world \x08 \x07!");
+
+Try this `custom character generator `__ to design your own sybmols.
+
+
Backlight Control
-----------------
-For the GPIO based display, the backlight is lit by applying Vcc to the A pin and K connected to ground.
-The backlight can draw more power than the microcontroller output pins can supply, so it is advisable to use
-a transistor as a switch to control the power for the backlight pins.
-
With the ``lcd_pcf8574`` the backlight can be turned on by ``it.backlight()`` and off by ``it.no_backlight()`` in the
display lambda definition. The jumper on the PCF8574 board needs to be closed for the backlight control to work.
Keep in mind that the display lambda runs for every ``update_interval``, so if the backlight is turned on/off there,
it cannot be overridden from other parts.
-Here is one solution for a typical use-case where the backlight is turned on after a motion sensor activates and
-turns off 90 seconds after the last activation of the sensor.
+With the ``lcd_gpio``, the backlight is lit by applying ``Vcc`` to the ``BLA`` (``15``) pin and connect ``BLK`` (``16``)
+pin to ``GND``. The backlight can draw more power than the microcontroller output pins can supply, so it is advisable
+to use a transistor as a switch to control the power for the backlight pins.
+
+Below an example for a typical use-case where the backlight is turned on when a motion sensor activates and
+turns off ``90`` seconds after the last activation of the sensor.
.. code-block:: yaml
@@ -203,44 +258,6 @@ turns off 90 seconds after the last activation of the sensor.
- lambda: |-
id(mydisplay).no_backlight();
-User Defined Characters
------------------------
-
-The LCD display has the possibility to define up to eight user defined characters occupying the characters
-``0`` to ``7`` and mirrored at ``8`` to ``15`` (i.e. ``\x08`` can be used instead of the ``\0`` that can
-be problematic in strings). Each character has eight lines of five bits, with the first line on the top
-and the most significant bit on the left, meaning that ``0b10000`` followed by six zeros and a ``0b00001``
-defines a dot at the upper left and lower right of the character.
-
-.. code-block:: yaml
-
- display:
- - platform: lcd_pcf8574
- id: mydisplay
- # ...
- user_characters:
- - position: 0
- data:
- - 0b00000
- - 0b01010
- - 0b00000
- - 0b00100
- - 0b00100
- - 0b10001
- - 0b01110
- - 0b00000
- - position: 7
- data:
- - 0b00000
- - 0b01010
- - 0b00000
- - 0b00100
- - 0b00100
- - 0b00000
- - 0b01110
- - 0b10001
- lambda: |-
- it.print("Hello, world \x08 \x07!");
See Also
--------
@@ -248,7 +265,11 @@ See Also
- :doc:`index`
- :doc:`/components/switch/gpio`
- :doc:`/components/binary_sensor/gpio`
+- :ref:`LCD Menu `
- :doc:`/components/pcf8574`
-- :apiref:`lcd_base/lcd_display.h`
+- `HD44780U (LCD-II) datasheet `__
+- `Charset cheatsheet `__
+- `Custom Character Generator `__
- `Arduino LiquidCrystal Library `__
+- :apiref:`lcd_base/lcd_display.h`
- :ghedit:`Edit`
diff --git a/components/display_menu/index.rst b/components/display_menu/index.rst
index 1c680781b..3f0e4d54e 100644
--- a/components/display_menu/index.rst
+++ b/components/display_menu/index.rst
@@ -757,3 +757,5 @@ See Also
:glob:
*
+
+- :ghedit:`Edit`
diff --git a/components/display_menu/lcd_menu.rst b/components/display_menu/lcd_menu.rst
index 1ee44a229..c254331e7 100644
--- a/components/display_menu/lcd_menu.rst
+++ b/components/display_menu/lcd_menu.rst
@@ -1,3 +1,5 @@
+.. _lcd_menu:
+
LCD Menu
========
@@ -6,14 +8,13 @@ LCD Menu
:image: lcd_menu.png
The component provides an infrastructure for setting up a hierarchical menu
-on the character based LCD displays.
-
+on character based LCD displays. This offers the user an interactive method to display
+labels, control entities like ``switch``, ``select``, ``number`` available locally on the
+ESPHome node, without the requirement of a network connection.
.. figure:: images/lcd_menu.png
:align: center
- :width: 50.0%
-
-.. _lcd_menu:
+ :width: 60.0%
Overview
--------
@@ -23,10 +24,10 @@ a hierarchical menu primarily intended to be controlled either by a rotary encod
with a button or a five-button joystick controller.
The component needs to be connected to an instance of a character based LCD display, which
-at the moment are :ref:`lcd-pcf8574` or a :ref:`lcd-gpio`. For the best results the GPIO
-connection is recommended; the I²C one running at the speed according to the datasheet
-(usually ``100`` kHz) or even ESPHome default (``50`` kHz) will create perceptible delays especially
-when changing a numeric value using the rotary encoder. Most ``PCF8574`` adapters used with
+like :ref:`lcd-pcf8574` or :ref:`lcd-gpio`. For the best results the GPIO connection is
+recommended; the I²C one running at the speed according to the datasheet (usually ``100``
+kHz) or even ESPHome default (``50`` kHz) will create perceptible delays especially when
+changing a numeric value using the rotary encoder. Most ``PCF8574`` adapters used with
these displays will happily run at ``200`` or even ``400`` kHz though so if you are comfortable
accepting risks from running your hardware out of spec, you might want to try that
in your :ref:`i2c` configuration.
@@ -41,7 +42,7 @@ in your :ref:`i2c` configuration.
...
user_characters:
- position: 0
- data: # back arrow
+ data: # mark_back symbol
- 0b00100
- 0b01000
- 0b11110
@@ -68,22 +69,24 @@ in your :ref:`i2c` configuration.
items:
...
- # Encoder to provide navigation
+ # Rotary encoder to provide navigation
sensor:
- platform: rotary_encoder
...
+ filters:
+ debounce: 30ms
on_anticlockwise:
- display_menu.up:
on_clockwise:
- display_menu.down:
- # A de-bounced GPIO is used to 'click'
+ # A debounced GPIO push button is used to 'click'
binary_sensor:
- platform: gpio
...
filters:
- - delayed_on: 10ms
- - delayed_off: 10ms
+ - delayed_on: 30ms
+ - delayed_off: 30ms
on_press:
- display_menu.enter:
@@ -95,17 +98,20 @@ Configuration variables:
Code of the character used to mark menu items going back one level, a selected one,
the editing mode and item leading to a submenu. Defaults to ``0x5e`` (``^``), ``0x3e`` (``>``),
``0x2a`` (``*``) and ``0x7e`` (a right arrow). As the character set lacks a good looking
- up arrow, using a user defined character is advisable (use ``8`` to reference one at
- position ``0`` to avoid problems with zeros in a string).
+ back arrow, using a user defined character is advisable for ``mark_back`` (use ``8`` to
+ reference one at position ``0`` to avoid problems with zeros in a string).
The rest of the configuration is described in the :ref:`Display Menu ` component.
-The menu inherits the dimensions of the connected LCD display and uses the whole area.
+The menu inherits the dimensions of the connected LCD display and uses the entire area.
See Also
--------
- :ref:`i2c`
+- :ref:`lcd-pcf8574`
+- :ref:`lcd-gpio`
- :ref:`Display Menu `
- :doc:`/components/sensor/rotary_encoder`
- :doc:`/components/binary_sensor/index`
- :apiref:`lcd_menu/lcd_menu.h`
+- :ghedit:`Edit`
diff --git a/components/sensor/scd4x.rst b/components/sensor/scd4x.rst
index 99955c423..04796d3d3 100644
--- a/components/sensor/scd4x.rst
+++ b/components/sensor/scd4x.rst
@@ -6,7 +6,7 @@ SCD4X CO₂, Temperature and Relative Humidity Sensor
:image: scd4x.jpg
The ``scd4x`` sensor platform allows you to use your Sensirion SCD4X CO₂
-(`datasheet `__) sensors with ESPHome.
+(`datasheet `__) sensors with ESPHome.
The :ref:`I²C Bus ` is required to be set up in your configuration for this sensor to work.
.. figure:: images/scd4x.jpg
diff --git a/components/sensor/sgp4x.rst b/components/sensor/sgp4x.rst
index 313a5cc3b..8e375c1be 100644
--- a/components/sensor/sgp4x.rst
+++ b/components/sensor/sgp4x.rst
@@ -27,7 +27,7 @@ The :ref:`I²C Bus ` is required to be set up in your configuration for thi
# Example configuration entry
sensor:
- - platform: sgp4x
+ - platform: sgp4x
voc:
name: "VOC Index"
nox:
diff --git a/guides/supporters.rst b/guides/supporters.rst
index 1e0a5094b..5fe228a0e 100644
--- a/guides/supporters.rst
+++ b/guides/supporters.rst
@@ -237,11 +237,9 @@ Contributors
- `Dirk Heinke (@DirkHeinke) `__
- `Dirk Jahnke (@dirkj) `__
- `Johann V. (@divinitas) `__
-- `djwlindenaar (@djwlindenaar) `__
- `Marcos Pérez Ferro (@djwmarcx) `__
- `Dan Mannock (@dmannock) `__
- `Dmitriy Lopatko (@dmitriy5181) `__
-- `dmkif (@dmkif) `__
- `Farzad E. (@dnetguru) `__
- `DrZoid (@docteurzoidberg) `__
- `Dominik (@DomiStyle) `__
@@ -449,6 +447,7 @@ Contributors
- `Johan van der Kuijl (@johanvanderkuijl) `__
- `Johboh (@Johboh) `__
- `John Erik Halse (@johnerikhalse) `__
+- `John Moxley (@johnmoxley) `__
- `JonasEr (@JonasEr) `__
- `Jonathan Adams (@jonathanadams) `__
- `Jonathan Treffler (@JonathanTreffler) `__
@@ -553,6 +552,7 @@ Contributors
- `Ben Marengo (@marengaz) `__
- `Marvin Gaube (@margau) `__
- `Martynas Griškonis (@Margriko) `__
+- `maringeph (@maringeph) `__
- `Mario (@mario-tux) `__
- `Marek Marczykowski-Górecki (@marmarek) `__
- `Matthew Harrold (@marrold) `__
@@ -630,7 +630,6 @@ Contributors
- `Nazar Mokrynskyi (@nazar-pc) `__
- `Bergont Nicolas (@nbergont) `__
- `NMC (@ncareau) `__
-- `Nebula (@nebula-it) `__
- `NeoAcheron (@NeoAcheron) `__
- `Mike Meessen (@netmikey) `__
- `Nick B. (@NickB1) `__
@@ -801,7 +800,6 @@ Contributors
- `Ryan Hoffman (@tekmaven) `__
- `testbughub (@testbughub) `__
- `Greg Lincoln (@tetious) `__
-- `Nejc (@thedexboy) `__
- `Thomas Eckerstorfer (@TheEggi) `__
- `Theexternaldisk (@Theexternaldisk) `__
- `TheGroundZero (@TheGroundZero) `__