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.LedsNow, we can turn an LED on using the name we configured:
Leds.set power: trueOr make it blink slowly:
Leds.set power: :slowblinkWe can even set multiple states for multiple LEDs at once:
Leds.set connected: false, alert: :fastblinkBuilt-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/ledsfeatures are currently implemented