About the Author:
G. Michael Wood is a university professor in Canada who teaches elementary and secondary teachers about using STEM-based approaches, including micro:bits, in their classrooms.
It can, after a while, get tiresome reading numbers and words scrolling across the 5-X-5 LED matrix on the micro:bit, so at that point, one starts looking for options available to provide visual output.
One option is the Waveshare 1.8” diagonal LCD display with 160 x 128 pixels that can display 65k colours. It has a plug-in micro:bit adapter and the display can show both text and (as we will see) simple images.
Waveshare is a company that has made many accessories for the small computer world and this is their first (and so far, only) display for the micro:bit.
The 1.8” colour display arrived in a small box a few weeks after
being ordered and paid for online. It was carefully wrapped in bubble wrap and a piece of closed-cell foam. I suspect the damage-in-transit rate is very low.
When the micro:bit is inserted into the Wavebit LCD Display the latter is located “below” the Micro:bit....and the default (and unchangeable) text output means that any use of text requires that this orientation be the one that is used.
The Waveshare LCD display has a built-in character set which allows 10 lines of 22 characters each of what appears to be a Courier non-proportional 7-pixel wide font that is reasonably easy to read. Overall the display is sharp and the edges of graphics and characters are clear. Although the colour of any text string can be easily set, there is no option to change the size or style of the text (so no bold or italics options). Depending on the character/number symbol design the actual characters can be up to 7 pixels wide (e.g., “m” or “u”) but most have a 1-pixel space buffer before and after each character. However, the width of some characters means that there is no visible gap between letters when they are beside each other (such as with the word “Humid” where the “u” and “m” touch on the Waveshare display). The alphanumeric characters are up to 8 pixels in height.
However, letters with “descending” parts, such as lower-case “y” require 2 pixels below the base “line” for the characters. In addition, there is a 1-pixel buffer allocated above and below the tallest and lowest letter, so the overall line “height” of text lines (with the 1-pixel buffers) is 12 pixels. On a display 128 pixels high this allows for 10 lines of text with a buffer at the top and the bottom of the display (or elsewhere if one desires as any text line is located by display-level x/y coordinates). The display overall is bright and clear (artefacts and ghosting in the images are the results of the difficulty of taking a digital picture of a digital source).
The Waveshare LCD display has a built-in character set which allows 10 lines of 22 characters each of what appears to be a Courier non-proportional 7-pixel wide font that is reasonably easy to read. Overall the display is sharp and edges of graphics and characters are clear. Although the colour of any text string can be easily set, there is no option to change the size or style of the text (so no bold or italics options). Depending on the character/number symbol design the actual characters can be up to 7 pixels wide (e.g., “m” or “u”) but most have a 1-pixel space buffer before and after each character. However, the width of some characters means that there is no visible gap between letters when they are beside each other (such as with the word “Humid” where the “u” and “m” touch on the Waveshare display). The alphanumeric characters are up to 8 pixels in height.
However, letters with “descending” parts, such as lower-case “y” require 2 pixels below the base “line” for the characters. In addition, there is a 1-pixel buffer allocated above and below the tallest and lowest letter, so the overall line “height” of text lines (with the 1-pixel buffers) is 12 pixels. On a display 128 pixels high this allows for 10 lines of text with a buffer at the top and the bottom of the display (or elsewhere if one desires as any text line is located by display-level x/y coordinates). The display overall is bright and clear (artefacts and ghosting in the images are the results of the difficulty of taking a digital picture of a digital source).
The graphics options offered for this display are straightforward but somewhat limited allowing one to draw a point, a line, a rectangle, and a circle with a small range of 4 line thicknesses and the last 2 the ability to “fill” the object with a range of colours (that match the line colour if unfilled). It is not possible to have the line defining the object outline in one colour and the fill of the object in another colour.
The colour, of text or drawn objects, can be set using one of fourteen pre-set, named colours OR using a slider (that provides 65k colours). Any of these objects, or text or numbers, can be overlapping.
Even with text, however, the display “refresh” rate is not rapid. For instance, if one changes the colour of a letter on the bottom line it takes more than a second for the letter to change colour after the code refreshes the screen. This delay isn’t affected by the order of the code either. If one codes for changing a letter at the bottom to a new colour and then one at the top to a new colour (in that order) the screen refresh changes the colour from top to bottom irrespective of the order it is coded in if one is only using a single “Send Display Data” command at the bottom. One can force a sequence by adding a “Send Display Command” after each text colour change but that consequently makes the entire process take longer because the entire display is refreshed each time. For some users (particularly in games) the slow speed of refresh might be a problem, but for others (such as numeric output from sensors with a lower sampling time) it likely will not be. There is, however, a code block that can somewhat address this “speed of refresh” issue.
The whole display “refresh” option -- enacted by the “Send Display Data” code block -- occurs in a visible fashion and with either text or graphics, the user can watch the refresh roll down the screen. However, there is a code block – “Show windows display data” - that allows you to refresh only part of the display. In practice, this code block with a designated X/Y starts/stops causes significantly faster screen refreshes than the code block “Send Display Data” for both graphics and text changes on the display because it refreshes only the designated part of the whole screen. This can make updating an area of text or graphics much quicker.
The Waveshare display uses a number of the available GPIO pins, which can also be accessed either through the adapter or by wiring the micro:bit to PCB access points, but others (pins 0, 3, 4, 5, 6, 7, 9, 10, 11, 12, 19, 20) are still available if an adapter board is used to give access to them. Note that the 5-X-5 LED matrix on the micro:bit can also be used in conjunction with the Waveshare display.
In conclusion, The Waveshare LCD display is a handy piece of kit that made some aspects of using the micro:bit more useful (particularly since I work with science teachers and I am interested in how the micro:bit can be used to collect data in classroom science activities. To get around the shortage of available pins (and access to them) I use one micro:bit to collect the data and then send it over the “radio” to another micro:bit with the Waveshare display attached. The slow refresh rate, even with the block-specified refresh area, would limit the display for many uses but there are few other options allowing graphics available for the micro:bit right now and this display is reasonably straightforward to use and is affordably priced.
The Waveshare 1.8” LCD display for the micro:bit can be purchased from the manufacturer at https://www.waveshare.com/1.8inch-lcd-for-micro-bit.htm for $15.99US (+ shipping), but it is also available from other distributors. My order (to Canada) took about one month to arrive.
8/10