Text-based menus and information pages
Pi Sensor Python Example
For the final project, I want to show Raspberry Pi sensor data in a Whiptail message box. My setup uses a low-cost DHT11 temperature and humidity sensor (about $3-$10), but the more accurate DHT22 module could also be used. These sensors have a three-pin configuration with power, ground, and signal connections.
The Python library for both the DHT11 and DHT22 sensors is installed by:
pip install Adafruit-DHT
A Python wrapper library offers all the Bash Whiptail functionality. Note that this library requires that the basic Whiptail utility be installed as a prerequisite. To install the Python library, enter:
pip install whiptail-dialogs
Once the DHT and Whiptail libraries are loaded, you can create some lightweight projects that connect the sensor data with text interfaces.
The example in Listing 3 imports the Adafruit_DHT and Whiptail libraries (lines 5 and 6) and then reads the DHT11 sensor on pin 4 (line 9). The humidity and temperature values are put into a message string (line 12) that is shown in a Whiptail message box (line 15).
Listing 3
Python DHT11 Sensor Project
An alternative approach to the Python Whiptail library is to write all the code in a Bash script and then call Python in command-line mode. The Python command-line option -c
executes a string of Python statements; for example:
$ python3 -c "a=4;b=5;print(f'{a}+{b}={a+b}')" 4+5=9
The Bash script in Listing 4 calls Python to return the sensor data as a Bash variable (msg
; lines 8-15). Python imports the DHT library (line 11), reads the sensor (line 12), and then prints the results as a string (line 13). The Bash variable (msg
) is then shown in a Whiptail message box (line 18).
Listing 4
Bash DHT11 Sensor Project
Bash and Python scripts each have their own benefits and drawbacks, but the end result produces the same text interface. Figure 5 shows the Raspberry Pi hardware and the sensor data in a Whiptail message box interface.
Summary
Whiptail, preinstalled on Raspbian, is a simple tool for creating text-based interfaces. If you need more functionality, take a look at the Dialog [3] utility, which supports all the Whiptail features and about a dozen more presentation boxes. Two of the features I especially liked about Dialog are inline custom colors and the ability to refresh pages with a time-out parameter.
Infos
- Whiptail: https://whiptail.readthedocs.io/
- wiringPi: https://github.com/WiringPi/WiringPi
- Dialog: https://invisible-island.net/dialog/
« Previous 1 2
Buy this article as PDF
(incl. VAT)