Blog der Heimetli Software AG

Laufschrift ansteuern mit Python

Der Post zu dieser Anzeige ist zwar schon recht alt, aber es kommen immer noch Fragen dazu.

Aehnliche (oder gleiche) Geräte

Anscheinend ist die Anzeige ein OEM-Produkt von Amplus. Auf jeden Fall findet einiges was zu diesem Gerät passt auch unter diesem Namen. Auch unter der Marke Maplin wird ein ähnliches Gerät verkauft. Auf der Velleman-Webseite gibt es eine dreifarbige Laufschrift mit einer klaren Verwandtschaft zu meiner.

Für die Google-Suche ist AM004 ein gutes Stichwort.

Die Anschlusskabel

Zur McCrypt-Version gab es zwei Anschlusskabel, eines mit einem 9-Pol Stecker für RS232, und ein zweites mit USB-Stecker. Das USB-Kabel enthält einen USB-Seriell Wandler, die Laufschrift hat also eine serielle Schnittstelle. Im Stecker vom McCrypt sind nur drei Pins belegt, höchst wahrscheinlich Ground, Rx und Tx.

Die Software

Bei mir liegt eine Mini-CD mit einem Programm für Windows herum. Die habe ich aber nie gebraucht, kann also nichts dazu sagen.

Im letzten Post habe ich ein C-Programm für den Raspberry beschrieben, aber C ist halt nicht jedermanns Sache :-)

Python-Script zur Ansteuerung

Um die Sache etwas portabler zu machen gibt es hier ein Python-Stript. Auf Linux ist Python schon installiert, auf Windows kann man es einfach installieren.

So lief das Script unter Linux mit dem USB-Kabel. Bei Bedarf kann das Port auf der 6. Zeile angepasst werden.

#!/usr/bin/env python3

import sys
import serial

PORT = "/dev/ttyUSB0"

def main( text ) -> int:
    try:
        port = serial.Serial( PORT, 9600, timeout=5 )

        request = bytearray( b"<ID01><L1><PA><FE><MQ><WB><FE>" )
        request.extend( sys.argv[1].encode("ascii") )

        check = 0
        for i in range(6,len(request)):
            check ^= request[i]

        request.extend( f"{check:02X}<E>".encode("ascii") )
        port.write( request )

        response = port.read( 1 )

        if response == b"A":
            response = port.read( 2 )
            if response == b"CK":
                print( "Text written to display" )
                return 0
            print( f"Error: invalid response \"A{response.decode('ascii')}\"" )
            return 2
        elif response == b"N":
            response = port.read( 3 )
            if response == b"ACK":
                print( "Failure: Text not accepted" )
                return 3
            print( f"Error: invalid response \"N{response.decode('ascii')}\"" )
            return 4

    except BaseException as ex:
        print( f"Exception: {ex}" )
        return 5

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print( "usage: mccrypt.py text" )
        sys.exit( 1 )

    sys.exit( main(sys.argv[1]) )

Im letzten Post hatte ich geschrieben dass die Umlaute ohne weiteres korrekt dargestellt werden. Das kann ich aber heute nicht mehr reproduzieren. Eventuell hatte ich damals eine Option gesetzt die unterdessen vergessen wurde. Die deutschen Sonderzeichen ä, ö und ü werden so codiert: <U64><U76><U7C>. Weitere Sonderzeichen finden Sie im Manual oder mit einer Google-Suche nach dem Manual.

Vergessen Sie das Quoting des Parameters nicht wenn Sie das Script aufrufen:

python3 mccrypt.py "Hello world!"

Windows

Mit Winndows 10 klappte es nicht mit dem USB-Kabel. Es wurde anscheinend ein Treiber installiert, aber nach dem Restart konnte Windows mit dem Chip im Kabel immer noch nichts anfangen.

Mit einem separaten USB-Seriell Adapter und dem RS232-Kabel lief die Schnittstelle problemlos. Schauen Sie im Control Panel nach welche Schnittstelle der Adapter belegt.

Bei mir fehlte das pyseriel-Modul aber das kann man einfach nachinstallieren:

python -m pip install pyserial

Die Schnittstelle passte natürlich auch nicht. Bei mir belegte der Adapter COM3, und mit dieser Zeile funktionierte das prima:

PORT = "COM3"