These days, working with a display in software is fairly easy. Thanks to the convenience of the modern OS, we’re blessed with graphical user interfaces, where things such as buttons and windows and text are all taken care of for us. Of course, once you start to wander off the beaten track, particularly in embedded systems with no GUI, things can get a little more difficult. For these situations, [JSBattista] wrote some code to blast text directly to the Linux framebuffer.
It’s a project borne out of necessity. Working with a Raspberry Pi with no X server, it was found that the console text size made it difficult to display data. By writing directly to the framebuffer, it would be possible to display text of a larger size without having to implement a full GUI, and overheads could be kept to a minimum.
Working in this manner comes with some limitations. Glyphs are taken from an array in bitmap format, rather than font files. In this case, a font akin to that of the Alien sentry gun interface was chosen, for an attractive sci-fi look. Lowercase characters are currently unimplemented. Testing thus far has been on Raspberry Pi and Beaglebone non-GUI systems, with performance varying depending on platform.
It’s a project we suspect might prove useful to the developers of lightweight embedded systems. It’s something that may take some tweaking and experimentation to implement, but the hacker set rarely shy away from a challenge. If you’re eager to get down and dirty with some heavy programming, this tutorial on Linux graphics will help.
There was a time when writing embedded systems meant never having to deal with graphical user interfaces, and spending long hours trying to free up a dozen bytes of ROM to add a feature. Nowadays, an embedded system is likely to have a screen and what would have been a huge amount of memory even for a PC a scant decade ago. Qt has long been a popular choice for building software on desktop platforms, and — while not as popular — has even run on phones for a while. Now there’s Qt for MCUs which is clearly targeting the IoT market that everyone is trying to capture. You can see the glitzy video for the new product, below.
We generally like Qt, and the move recently has been towards an HTML-like markup language called QML instead of directly manipulating widgets. We guess that’s a good thing. However, Qt isn’t just for user interfaces. It provides a wide range of services in a straightforward way
Continue reading “Qt Arrives For Small Computers”
We featured [Fabrizio Di Vittorio]’s FabGL library for the ESP32 back in April of this year. This library allows VGA output using a simple resistor based DAC (3 resistors for 8 colors; 6 resistors for 64 colors), and includes functions for PS/2 mouse and keyboard input, a graphics library, and many of the miscellaneous functions you might need to develop games on the ESP32. Now, a GUI interface library has been added to ease application development.
The GUI, of course, runs on the VGA output. The library includes what you’d expect from a minimal windowing GUI, like keyboard and mouse support, windows with the usual minimize/maximize/close controls, and modal and message dialog boxes. For input controls, there are labels, text boxes, buttons, radio buttons, checkboxes, normal and editable combo boxes, and listboxes — you know, pretty much everything you need to develop a modern GUI application. All the code is open-source (GPL 3.0) and in the GitHub repo.
While the original FabGL had a game-development orientation, the addition of this new GUI functionality opens up a new range of applications. If you want to find out more about using the FabGL library, you can check out our previous coverage of the mostly game-oriented functions.
You can get a look at the new GUI functions in action in the video, after the break.
Continue reading “ESP32 Gets Advance Windowed Apps Using This VGA GUI Library”
The 6th Generation iPod Nano was something of a revelation on launch. Packing a color screen, audio hardware, and a rechargable battery into a package no bigger than a large postage stamp remains impressive to this day. They’re now being used in various maker projects for their displays, but if you’re doing so, you might want to think about how you’re going to build a graphical interface. Not to worry – just grab an ESP32 and the right GUI library, and you’re on your way.
The Nano screen uses a MIPI DSI interface, which isn’t the easiest thing to use directly with the ESP32. Instead, a SSD2805 interface chip converts parallel input data to MIPI DSI signals to drive the display. Driving the display is only part of the game, however – you need something to display on it. Combining the LittlevGL GUI library with the screen’s touchpad makes creating a full graphical interface easy.
Hacked screens are something we don’t see as much these days, with the proliferation of display products aimed directly at the maker market. However, it’s always awesome to see a successful hack pulled off well. We’ve seen the display reverse engineered, too – and it certainly wasn’t easy.
Microcontrollers are wonderfully useful things, but programming them can be a little daunting if you’re used to the simplicity of compiling for regular PCs. Over time though, this has become easier. Communities have strayed away from assembly code and created higher-level languages such as Micropython, to allow these devices to be programmed in a more accessible manner. Unfortunately, Micropython has historically lacked a decent high-level GUI library. Thankfully, that’s no longer the case, with [amirgon] porting LittlevGL to the platform.
Putting a GUI into a project with a screen seems simple, until one actually gets down to brass tacks. A simple button can consist of a background color, text, and a symbol – and that’s not even considering the use of shading or other visual effects. Having a library to handle the grunt work can massively cut down development time.
LittlevGL is the work of [kisvegabor], and is programmed in C, but this effort has made it possible to integrate it with Micropython code. It’s all object-oriented, and thus works well in the broader Python framework. [amirgon] notes that it’s particularly good for quick development, due to Python’s ability to run code without a slow compiling step.
There are other approaches to this problem, too – with MyOpenLab being a particularly versatile example.
If you’re like me, chances are pretty good that you’ve been taught that all the elements of the modern computer user interface — programs running in windows, menus, icons, WYSIWYG editing of text documents, and of course, the venerable computer mouse — descended from the hallowed halls of the Xerox Corporation’s Palo Alto Research Center in the early 1970s. And it’s certainly true that PARC developed these technologies and more, including the laser printer and object-oriented programming, all of which would grace first the workplaces of the world and later the homes of everyday people.
But none of these technologies would have existed without first having been conceived of by a man with a singular vision of computing. Douglas Engelbart pictured a future in which computers were tools to sharpen the human intellectual edge needed to solve the world’s problem, and he set out to invent systems to allow that. Reading a Twitter feed or scanning YouTube comments, one can argue with how well Engelbart’s vision worked out, but there’s no arguing with the fact that he invented almost all the trappings of modern human-computer interaction, and bestowed it upon the world in one massive demonstration that became known as “The Mother of All Demos.”
Continue reading “The Mother Of All Demos, 50 Years On”
With surface-mount technology pushing the size of components ever smaller, even the most eagle-eyed among us needs some kind of optical assistance to do PCB work. Lots of microscopes have digital cameras too, which can be a big help – unless the camera fights you.
Faced with a camera whose idea of autofocus targets on didn’t quite coincide with his, [Scott M. Baker] took matters into his own hands – foot, actually – by replacing mouse inputs to the camera with an outboard controller. His particular camera’s autofocus can be turned off, but only via mouse clicks on the camera’s GUI. That’s disruptive while soldering, so [Scott] used an Arduino Pro Micro and a small keypad to mimic the mouse movements needed to control the camera.
At the press of a key, the Arduino forces the mouse cursor up to the top left corner of the screen, pulls down the camera menu, and steps down the proper distance to toggle autofocus. The controller can also run the manual focus in and out or to take a screenshot. There’s even a footswitch that forces the camera to refocus if the field of view changes. It looks really handy, and as usual [Scott] provides a great walkthrough in the video below.
Like it or not, if shrinking technology doesn’t force you into the microscope market, entropy will. If you’re looking for a buyer’s guide to microscopes, you could do worse than [Shahriar]’s roundup of digital USB scopes. Or perhaps you’d prefer to dumpster dive for yours.
Continue reading “Arduino Provides Hands-Free Focus For Digital Inspection Scope”