Using the curses library to view IoT data
Curses Windows
The examples so far have been based on a main screen object, but the curses library also supports windows. Windows are useful because they support border outlines, and text can be cleared from and written to windows without affecting the main screen object. The syntax to create a curses window object is:
mynewwindow = curses.newwin( height, width, begin_y, begin_x)
The code for Figure 3,
# define a win1 window object win1 = curses.newwin(9, 44, 6, 4) # write text inside the window object win1.addstr(8,0, "Sensor 1: Temperature Reading", curses.A_BOLD) value1 = pyfiglet.figlet_format( "23 C", font = "doom") win1.addstr(0,0,value1,curses.color_pair(2) )
produces two curses windows. The major difference in the code is that information within a window is addressed by the window object instead of the background screen object.
Dynamic Bars
Simple progress or indicator bars can be created by a curses window with a border (Listing 4). The bar itself is generated by writing a space character with inverse video (Figure 4).
Listing 4
bar.py
01 import curses 02 03 bar = ' ' # with reverse video a space will show up 04 value1 = 10 # in real life this needs to be scaled 05 06 stdscr = curses.initscr() 07 curses.curs_set(0) # don't show the cursor 08 09 stdscr.addstr(1,3, "Python Curses Bar") 10 stdscr.refresh() 11 # Define windows 12 win1 = curses.newwin(3, 32, 3, 2) 13 win1.border(0) # add a border 14 # a horizontal bar 10 characters wide 15 win1.addstr(1, 1, bar * value1,curses.A_REVERSE ) 16 win1.refresh() 17 18 # Wait for a key press then exit 19 stdscr.getch() 20 curses.endwin() # restore the terminal to original settings
After I had the basic curses bar working, I was able to use what I learned in the earlier examples to create Raspberry Pi interfaces that included color and large text (Figure 5).
Summary
If you are looking for a quick and easy way to present data, without the bother of a GUI, curses is a great solution. Curses is supported in a variety of programming languages. I focused my curses work here on C and Python, but I've also had good success in Lua.
I only had one presentation issue and that was with line drawing characters like borders when I used Putty (a Windows-based SSH program). To fix this issue, I changed the Putty Window | Translation setting to use the VSCII character set; then, everything looked good.
Infos
- Python curses: https://docs.python.org/3/library/curses.html
- Code for this article: ftp://ftp.linux-magazine.com/pub/listings/linux-magazine.com/232/
- pyfiglet: https://github.com/pwaller/pyfiglet
- FIGlet fonts: http://www.figlet.org/examples.html
« Previous 1 2
Buy this article as PDF
(incl. VAT)
Buy Linux Magazine
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters
Support Our Work
Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.
News
-
Latest Cinnamon Desktop Releases with a Bold New Look
Just in time for the holidays, the developer of the Cinnamon desktop has shipped a new release to help spice up your eggnog with new features and a new look.
-
Armbian 24.11 Released with Expanded Hardware Support
If you've been waiting for Armbian to support OrangePi 5 Max and Radxa ROCK 5B+, the wait is over.
-
SUSE Renames Several Products for Better Name Recognition
SUSE has been a very powerful player in the European market, but it knows it must branch out to gain serious traction. Will a name change do the trick?
-
ESET Discovers New Linux Malware
WolfsBane is an all-in-one malware that has hit the Linux operating system and includes a dropper, a launcher, and a backdoor.
-
New Linux Kernel Patch Allows Forcing a CPU Mitigation
Even when CPU mitigations can consume precious CPU cycles, it might not be a bad idea to allow users to enable them, even if your machine isn't vulnerable.
-
Red Hat Enterprise Linux 9.5 Released
Notify your friends, loved ones, and colleagues that the latest version of RHEL is available with plenty of enhancements.
-
Linux Sees Massive Performance Increase from a Single Line of Code
With one line of code, Intel was able to increase the performance of the Linux kernel by 4,000 percent.
-
Fedora KDE Approved as an Official Spin
If you prefer the Plasma desktop environment and the Fedora distribution, you're in luck because there's now an official spin that is listed on the same level as the Fedora Workstation edition.
-
New Steam Client Ups the Ante for Linux
The latest release from Steam has some pretty cool tricks up its sleeve.
-
Gnome OS Transitioning Toward a General-Purpose Distro
If you're looking for the perfectly vanilla take on the Gnome desktop, Gnome OS might be for you.