How to Blink Morse Code On the Omega LED
Here’s a little fun one! You can use the LED on the Omega to send messages in Morse code.
To start, you’ll need to install the
opkg update && opkg install mod-ledtrig-morse
Once this is done, a kernel module that can translate text to Morse code and blink the LEDs is automatically installed. But you still need to tell the kernel which LED you want to blink. The kernel exposes a lot of hardware status and configuration options through a virtual filesystem under
/sys. (I.e. the files under
/sys aren’t actually files, but they look and act like files to make it very easy to access them from the command line and in scripts or programs.)
To tell the kernel that we are going to use the new Morse code module, set the LED trigger condition for the Onion system LED to
morse by using the
echo command to write the setting into the virtual file:
echo morse > /sys/class/leds/onion\:amber\:system/trigger
You can verify that it worked by using
cat to look at the virtual file:
root@Omega-12D9:~# cat /sys/class/leds/onion\:amber\:system/trigger none timer default-on netdev transient gpio heartbeat [morse] oneshot usbdev phy0rx phy0tx phy0assoc phy0radio phy0tpt
You can see that
morse is selected because it’s in brackets. The other text in that file shows the other available options that this particular bit of the kernel can be set to.
Anyway, now we have everything set up! We just need to tell the kernel what message to blink on the LED. Conveniently, once the morse option is selected, the kernel creates a new virtual file for that called (unsurprisingly enough)
message. We can use
echo again to put text there:
echo Hello, Onion > /sys/class/leds/onion\:amber\:system/message
Now watch your LED! If it’s too fast or too slow, you can change the speed with the
delay file that also gets created. E.g.
root@Omega-12D9:~# cat /sys/devices/platform/leds-gpio/leds/onion\:amber\:system/delay 50
That’s pretty fast! Let’s slow it down a bit so that people like me who aren’t experts can read it:
root@Omega-12D9:~# echo 100 > /sys/devices/platform/leds-gpio/leds/onion\:amber\:system/delay
The message will keep looping forever or until you change it. To stop it, you can either clear the message entirely:
echo > /sys/class/leds/onion\:amber\:system/message
or change the LED trigger to something else:
echo default-on > /sys/class/leds/onion\:amber\:system/trigger
Feel free to try some of the other options as well! Remember that you can view the available options by using
cat as mentioned above. (The
heartbeat option is fun too.)
There are many more settings status files available for other devices in
/sys and it can be a great way to learn about working with hardware under Linux.
Thanks to Fader for writing this awesome tutorial!