My big problem with my robots is getting them to communicate with me if and when they need to.
@cyclicalobsessive solved this problem, (very cleverly and nicely, I might add), by attaching voice modules and speakers to his 'bots. With that, his robots can “ask for help” whenever they have a problem.
Unfortunately, everyone else in my house has a spite again’ any extraneous noises - even me thinking out-loud or listening to music drives them absolutely BONKERS!
Also, I’m not as comfortable as @cyclicalobsessive is with the idea of letting robots wander the house aimlessly, waiting for the opportunity to get under foot or trip someone. (I can trip over my own two feet, all by myself, no help necessary, thank you very much! )
So, I decided that a visual display was the best option.
But that has its own set of problems.
Displays, (aside from remote displays), can be divided into four broad categories:
-
Displays that plug into the Raspberry Pi’s display port connector.
-
Displays that plug in to the GPIO connector and communicate via SPI.
-
Displays that plug into the GPIO connector and communicate via i2c.
-
Other displays that use a serial connection, or plug into a HDMI port, etc.
Then there’s the question of size.
-
Display-port and HDMI displays are large, power-hungry, and expensive, and I don’t want a display that’s too large to mount flat on a robot’s back.
-
Other displays are either too large or are so tiny that they can’t be ready without a magnifier.
That leaves us with either e-Ink displays or small TFT/LCD/OLED displays and a choice of interface.
-
The e-Ink displays are a very good especially as they come in a variety of sizes and configurations, they’re high-contrast displays, they sip power through a carbon nanotube and the interface is fairly simple.
-
Other displays take relatively large amounts of power, (roughly in proportion to their size), they’re powered on the entire time you’re using them, (e-Ink displays are powered down after the display is written), and depending on the interface, they can be a Royal Pain to use.
The interface:
-
SPI:
- The SPI interface is fast enough to drive a somewhat large display at respectable frame rates.
- There is only one SPI interface in common use - and that’s the one used by the robot itself.
(There are actually TWO SPI interfaces available and each SPI interface has TWO select lines, therefore the theoretical maximum number of SPI devices is four without multiplexing.) - Unfortunately, 99.9999% of the SPI devices use SPI-0 and CS0, the “original” SPI interface from the 26 pin Pi-1 days.
[Note that the GoPiGo-3 uses SPI-0 and CS1, so - theoretically - the robot should be able to coexist with other devices. except that EVERY SPI device I have seen only respects ONE of the two available SPI chip-select lines, resulting in an inability to know if the buss is in use and subsequently there are often massive buss collisions.] - Buss collisions usually result in the robot, the display, or both becoming inoperable until fully restarted.
-
i2c
- i2c has the advantage of a multitude of potentially available addresses for individual devices. Because of the signalling protocol used, i2c is relatively easy to multiplex, allowing more than one device to exist at a single i2c address.
- Many i2c devices allow for changing the programmed i2c address via switches, jumpers, or small selectable solder-bridges.
- Unfortunately, because of the relative slowness of i2c compared to SPI, virtually all manufacturers don’t make anything larger than Adafruit’s 128x32 OLED display.
I need a display that’s at least twice the size of Adafruit’s display and was 100% i2c.
Since it doesn’t exist, (at the present time), I needed to get creative. . .
(Continued next message)