Nerves.Leds (nerves_leds v0.8.1) View Source
A convenient interface to setting LEDs defined in /sys/class/leds
.
While an application could write directly to /sys/class/leds, the main advantage of using this module is to provide a layer of abstraction that allows easily defining application-specific led names and states, like this:
alias Nerves.Leds
Leds.set power: true # turn on the led we called "power"
Leds.set power: :slowblink # make it blink slowly
Leds.set connected: false, alert: :fastblink # set multiple LED states at once
## alternate syntax via set/2
Leds.set :power, :slowblink
Configuration
Use config.exs in your application to create a friendly name that maps to an
entry in /sys/class/leds
that make sense for your application.
A trivial example for Raspberry Pi:
# in your app's config/config.exs:
config :nerves_leds, names: [ red: "led0", green: "led1" ]
A more useful example for the Alix 2D boards implementing a router:
# in your app's config/config.exs:
config :nerves_leds, names: [
power: "alix:1",
connected: "alix:2",
alert: "alix:3"
]
Included states
In addition to true
(on) and false
(off) the following atoms provide predefined
behaviors:
:slowblink
- turns on and off slowly (about twice a second):fastblink
- turns on and off rapidly (about 7.5 times a second):slowwink
- mostly on, but "winks off" once every second or so:heartbeat
- a heartbeat pattern
Customizing states
The standard LED states are defined as @predefined_states
near the top of
lib/nerves_leds.ex
. You can change or add to them using config.exs as
follows:
config :nerves_leds, states: [
fastblink: [ trigger: "timer", delay_off: 40, delay_on: 30 ],
blip: [ trigger: "timer", delay_off: 1000, delay_on: 100 ]]
See the Linux documentation on sys/class/leds
to understand the meaning of
trigger, delay, brightness, and other settings.
Link to this section Summary
Functions
Enumerate all the LEDs on this device. If the device has no LEDs or doesn't support the Linux LED interface, an empty list is returned.
Set states of one or more LEDs by using their mapped name
Set the state of a single LED
Link to this section Functions
Specs
enumerate() :: [binary()]
Enumerate all the LEDs on this device. If the device has no LEDs or doesn't support the Linux LED interface, an empty list is returned.
Specs
set(Keyword.t()) :: true
Set states of one or more LEDs by using their mapped name
Nerves.Leds.set power: true, error: :fastblink
Specs
Set the state of a single LED
Nerves.Leds.set :power, true
Nerves.Leds.set :backlight, brightness: 200
Note that unlike set/1, this allows optionally directly naming the file of the led in /sys/class/leds by using a string name rather than an atom.
Nerves.Leds.set "led2", [ trigger: "timer", delay_on: 1000, delay_off: 1000 ]