Nerves.Leds
Simple API to drive leds exposed by linux /sys/class/leds
.
Designed for use with nerves,
but works on any distribution of Linux that supports /sys/class/leds
.
Configuration
Use config.exs to create a friendly name that maps to an entry in
/sys/class/leds
that make sense for your application.
An example configuration for the Alix 2D boards:
# in your app's config/config.exs:
config :nerves_leds, names: [
power: "alix:1",
connected: "alix:2",
alert: "alix:3"
]
Usage
It’s customary to bring the Nerves.Leds module into scope as “Leds”, as follows:
alias Nerves.Leds
Now, we can turn an LED on using the name we configured:
Leds.set power: true
Or make it blink slowly:
Leds.set power: :slowblink
We can even set multiple states for multiple LEDs at once:
Leds.set connected: false, alert: :fastblink
Built-In LED 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:hearbeat
- 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.
Limitations, Areas for Improvement
- most but not all
`/sys/class/leds
features are currently implemented