Menu System for LCD Plates, shared on the Adafruit Forums:
A menu driven application template for the Adafruit LCD Plates on a Raspberry Pi.
It provides a simple way to navigate a nested set of menus, and run various functions, by pressing the buttons on the Adafruit LCD Plate. Included is a way to determine the IP address of the Pi when running headless. Also, allows the user to select from a large list of choices (using List Selector), by cycling through letters vertically and horizontally. It uses an XML file to configure the menu structure, and processes tags to enable different options. XML element support includes:
- folders, for organizing menus.
- widgets, which are really just functions to call in the code.
- run, which allows you to run any command and see the output on the LCD.
It assumes the user has the LCD Plate from Adafruit already attached. It is also possible to make a quick modification to the LCD libraries to detect if the LCD is attached before progressing into the app. Support is included also to turn on the LCD to different colors. (at least for the 16×2 positive LCD plate) You can also launch the Python based application from /etc/init.d using the provided init file. In that mode, you can launch right into the application without keyboard or monitor, yet still determine the IP address, change networks if you like, or any other capability you build in. Obviously double check the content of the provided init file before use. Also note that once you put it in init.d, if you don’t actually connect the LCD, you may find lots of error messages. You may want to test for presence of the LCD before running it. Included also is an approach to switch networks from the UI, in case you want to switch between different network layouts if you travel with it.
Some of the canned menu items are functional, but other are place holders to spawn ideas. Such as using gphoto2 to trigger camera operations. Or using the ephem library to do astronomy calculations.
BTW, the ListSelector relies on using the LCD plate’s blink cursor capability. As of this writing, it had a bug, where you need to modify the LCD code to define a blink method, similar to the other cursor methods. Notice there are two noBlinks, so change one to blink and change the code to do the right thing.
Written by Alan Aufderheide
Featured Adafruit Product
Adafruit RGB Positive 16×2 LCD+Keypad Kit for Raspberry Pi: This new Adafruit Pi Plate makes it easy to use an RGB 16×2 Character LCD. We really like the RGB Character LCDs we stock in the shop. (For RGB we have RGB negative and RGB positive.) Unfortunately, these LCDs do require quite a few digital pins, 6 to control the LCD and then another 3 to control the RGB backlight for a total of 9 pins. That’s nearly all the GPIO available on a Pi! With this in mind, we wanted to make it easier for people to get these LCD into their projects so we devised a Pi plate that lets you control a 16×2 Character LCD, up to 3 backlight pins AND 5 keypad pins using only the two I2C pins on the R-Pi! The best part is you don’t really lose those two pins either, since you can stick i2c-based sensors, RTCs, etc and have them share the I2C bus. This is a super slick way to add a display without all the wiring hassle. (read more)
Each Friday is PiDay here at Adafruit, be sure to check out our posts, tutorials and new Raspberry Pi related products. Have you tried the new “Adafruit Raspberry Pi Educational Linux Distro” ? It’s our tweaked distribution for teaching electronics using the Raspberry Pi. But wait, there’s more! Try our new Raspberry Pi WebIDE! The easiest way to learn programming on a Raspberry Pi.
We now have Raspberry Pi Model B with 512MB RAM in stock and shipping now!