GPS Component
=============

.. seo::
    :description: Instructions for setting up GPS integration in ESPHome.
    :image: crosshairs-gps.svg

The ``gps`` component allows you to connect GPS modules to your ESPHome project.
Any GPS module that uses the standardized NMEA communication protocol will work.

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

    GPS Module. Image by `Adafruit`_

.. _Adafruit: https://www.adafruit.com/product/746

For this integration to work you need to have set up a :ref:`UART bus <uart>`
in your configuration - only the RX pin should be necessary.

.. code-block:: yaml

    # Example configuration entry
    uart:
      rx_pin: D7
      baud_rate: 9600

    # Declare GPS module
    gps:
      latitude:
        name: "Latitude"
      longitude:
        name: "Longitude"
      altitude:
        name: "Altitude"

    # GPS as time source
    time:
      - platform: gps

The component is split up in platforms, by defining the GPS module
(as seen above).

In addition to retrieving GPS position data, the module can also be used as a
time platform to get the current date and time via the very accurate GPS clocks
without a network connection.

See :doc:`time/gps` for config options for the GPS time source.

Configuration variables:
------------------------
- **latitude** (*Optional*): Include the Latitude as a sensor

  - **name** (**Required**, string): The name to give the latitude sensor
  - **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
  - All other options from :ref:`Sensor <config-sensor>`.

- **longitude** (*Optional*): Include the Longitude as a sensor

  - **name** (**Required**, string): The name to give the longitude sensor
  - **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
  - All other options from :ref:`Sensor <config-sensor>`.

- **speed** (*Optional*): Include the measured speed as a sensor

  - **name** (**Required**, string): The name to give the speed sensor
  - **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
  - All other options from :ref:`Sensor <config-sensor>`.

- **course** (*Optional*): Include the measured course as a sensor

  - **name** (**Required**, string): The name to give the course sensor
  - **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
  - All other options from :ref:`Sensor <config-sensor>`.

- **altitude** (*Optional*): Include the measured altitude as a sensor

  - **name** (**Required**, string): The name to give the altitude sensor
  - **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
  - All other options from :ref:`Sensor <config-sensor>`.

- **satellites** (*Optional*): Include the number of tracking satellites being used as a sensor

  - **name** (**Required**, string): The name to give the tracking satellites sensor
  - **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
  - All other options from :ref:`Sensor <config-sensor>`.

See Also
--------

- :ref:`sensor-filters`
- `TinyGPS++ library <http://arduiniana.org/libraries/tinygpsplus/>`__
- :apiref:`gps/gps.h`
- :ghedit:`Edit`
