| .. zephyr:code-sample:: blinky |
| :name: Blinky |
| :relevant-api: gpio_interface |
| |
| Blink an LED forever using the GPIO API. |
| |
| Overview |
| ******** |
| |
| The Blinky sample blinks an LED forever using the :ref:`GPIO API <gpio_api>`. |
| |
| The source code shows how to: |
| |
| #. Get a pin specification from the :ref:`devicetree <dt-guide>` as a |
| :c:struct:`gpio_dt_spec` |
| #. Configure the GPIO pin as an output |
| #. Toggle the pin forever |
| |
| See :zephyr:code-sample:`pwm-blinky` for a similar sample that uses the PWM API instead. |
| |
| .. _blinky-sample-requirements: |
| |
| Requirements |
| ************ |
| |
| Your board must: |
| |
| #. Have an LED connected via a GPIO pin (these are called "User LEDs" on many of |
| Zephyr's :ref:`boards`). |
| #. Have the LED configured using the ``led0`` devicetree alias. |
| |
| Building and Running |
| ******************** |
| |
| Build and flash Blinky as follows, changing ``reel_board`` for your board: |
| |
| .. zephyr-app-commands:: |
| :zephyr-app: samples/basic/blinky |
| :board: reel_board |
| :goals: build flash |
| :compact: |
| |
| After flashing, the LED starts to blink and messages with the current LED state |
| are printed on the console. If a runtime error occurs, the sample exits without |
| printing to the console. |
| |
| Build errors |
| ************ |
| |
| You will see a build error at the source code line defining the ``struct |
| gpio_dt_spec led`` variable if you try to build Blinky for an unsupported |
| board. |
| |
| On GCC-based toolchains, the error looks like this: |
| |
| .. code-block:: none |
| |
| error: '__device_dts_ord_DT_N_ALIAS_led_P_gpios_IDX_0_PH_ORD' undeclared here (not in a function) |
| |
| Adding board support |
| ******************** |
| |
| To add support for your board, add something like this to your devicetree: |
| |
| .. code-block:: DTS |
| |
| / { |
| aliases { |
| led0 = &myled0; |
| }; |
| |
| leds { |
| compatible = "gpio-leds"; |
| myled0: led_0 { |
| gpios = <&gpio0 13 GPIO_ACTIVE_LOW>; |
| }; |
| }; |
| }; |
| |
| The above sets your board's ``led0`` alias to use pin 13 on GPIO controller |
| ``gpio0``. The pin flags :c:macro:`GPIO_ACTIVE_HIGH` mean the LED is on when |
| the pin is set to its high state, and off when the pin is in its low state. |
| |
| Tips: |
| |
| - See :dtcompatible:`gpio-leds` for more information on defining GPIO-based LEDs |
| in devicetree. |
| |
| - If you're not sure what to do, check the devicetrees for supported boards which |
| use the same SoC as your target. See :ref:`get-devicetree-outputs` for details. |
| |
| - See :zephyr_file:`include/zephyr/dt-bindings/gpio/gpio.h` for the flags you can use |
| in devicetree. |
| |
| - If the LED is built in to your board hardware, the alias should be defined in |
| your :ref:`BOARD.dts file <devicetree-in-out-files>`. Otherwise, you can |
| define one in a :ref:`devicetree overlay <set-devicetree-overlays>`. |