Hanover flipdot bus sign display component

Hiya, thought I’d post something I’ve been working on which might be of interest to some.

I bought a few flipdot (electromechanical) matrix displays made by Hanover Displays, and wrote a component to integrate them as a native ESPHome display. These displays were very commonly fitted on UK buses, (and anywhere they were exported), and are still relatively easy and relatively cheap to buy off ebay and other marketplaces as the buses are being taken out of service (I paid £160 for a full bus set of 3) .

They use RS485 and a slightly weird protocol, but connecting one to a cheap Chinese TTL-RS485 adapter works fine. They have a rotary encoder for the addresses, although they have been set to 0 on all the ones I bought (nobody would have reset them though). At first I thought that the signs would just ignore a display packet which doesn’t match the display size (and so the addressing would only be needed if you want two or more signs showing different data), but in fact they will just display a corrupted image, so who knows! :smiley:

The native display “rotation” seems to work ok too - in the video below the sign is upside-down but rotation: 180 just worked :smiley:

Example in operation:

I need to tidy it up and add a few more features (eg. enabling test mode) and then I’ll put it on Github.

A few questions though if anybody can help:

  • I haven’t tried it yet, but if I have two displays using the same uart (ie. they are on the same RS485 bus with different addresses), will that clash badly or is there some sort of blocking?
  • As you can see in the video, a standard font (Arial) works sort of ok but it’s not great. Is there a good way to use a bitmap font with predictable pixel heights?
3 Likes

hey, did you manage to put your flipdot display/esphome code on github yet? We’ve got a couple (out of the bus company skip!) to play with. We found the various other efforts as you did, then wrote our own software for it.

Our attempt uses a (Perl!) module named Imager, which can be asked to output a string using a loaded ttf font, at a certain font size, and then asked how many actual pixels high that is, so we iterated to get sane heights. There’s a bunch of made-for-terminal fonts which mostly work: See here The Ultimate Oldschool PC Font Pack: Font Index

Didn’t realise you could chain them and just address via different addresses! Makes perfect sense tho will try that :wink:

Do you happen to have / found a copy of the Flip_Dot_Manual_vB.pdf at all? would love one…

Hiya! Sorry I hadn’t, but I just sat down and finally got around to it :smiley:
I’ve put it up here: https://github.com/gattrill/hanover_flipdot_esphome

I extracted the actual bus fonts out of the design software and converted them to TTF so that they can be used within ESPHome, and it sort of works! I’ve uploaded a few here if they are of interest.

edit: Oh and no unfortunately I don’t have one, I probably hit the same dead-ends as you looking for it! I keep meaning to email Hanover to see if they can send me a copy.

1 Like

@castaway, there’s a copy of the file you’re after here - https://engineer.john-whittington.co.uk/assets/Flip_Dot_Manual_vB.pdf
It’s linked from Adventures with Flippy the Flip-dot Display | John Whittington's Blog

Great initiative, thanks for this! Slowly progressing with my Hanover 84x8 display. Almost got your code working, except for the ID that is mentioned (I replaced it by XXXXXX) within it.print(it.get_width() /2, it.get_height()/2, id(XXXXXX), TextAlign::CENTER, “Hello”);

Should have read the documentation, it is the font which can be replaced by any font to be uploaded to HA…

Tried several things, but the Hanover display doesn’t react to the RS485 signals. Hope someone can point me in the right direction.

Things that I’m not certain about:
→ the dial on the 7090 board has an arrow pointing to 1; so address in code should be 0x01 then?
→ uart1 is not allowed anymore in esphome; so I replaced both uart1 references with uart_0
→ My wiring is as follows:

ESP32S<—>RS485
3v3<---------->VCC
Ground<----->Ground
D2<----------->TXD

RS485<—>Hanover
A+<---------->A+ (red cable)
B-<----------->B- (black cable)

→ Didn’t use the resistor as I didn’t understand where pin 3 and 4 would be…

Update 19-2:
Read somewhere that the address should be 1 higher than the dial indicator. So changed the address to 0x02 and now it all works!
Started linking the Hanover to my Home Assistant and is now showing all kinds of information in a very satisfying way :slight_smile: