Blog der Heimetli Software AG

TESA USB-Adapter am Raspberry Pi

Für ein Projekt habe ich einen TESA USB-Adapter für induktive Messtaster bekommen. Der Adapter hat die Bezeichnung P-USB S-73.75.

TESA Adapter S-73.75

Das Projekt hat zwar nichts mit dem Raspberry zu tun, aber rein aus Interesse habe ich das Ding mal an den Raspberry angesteckt. Auf dem Raspberry lief ein relativ aktuelles Raspbian.

Ausgabe von dmesg

Wenn das Gerät an den Raspberry angesteckt wird, zeigt dmesg folgende Kernel-Meldungen an:

[  596.222800] usb 1-1.2: new full-speed USB device number 6 using dwc_otg
[  596.336759] usb 1-1.2: New USB device found, idVendor=03eb, idProduct=2018
[  596.336781] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[  596.336794] usb 1-1.2: Product: TESA INDUCTIVE PROBE
[  596.336807] usb 1-1.2: Manufacturer: TESA
[  596.336819] usb 1-1.2: SerialNumber: 9A010207 
[  596.366599] cdc_acm 1-1.2:1.0: ttyACM0: USB ACM device
[  596.367544] usbcore: registered new interface driver cdc_acm
[  596.367556] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

Der Adapter wurde frisch bestellt und erst vor zwei Wochen geliefert. Seine Firmware müsste also top-aktuell sein.

Er funktioniert problemlos am Pi. Das folgende Python-Script liest ihn aus und printet die empfangenen Zeilen.

Beispielcode zum Auslesen der Messwerte

Die Adapter haben einen Messbereich von ±2mm, mit einer Auflösung von 0.1µm.

Weil es sich hier nur um einen kurzen Test gehandelt hat, ist das Programm zum Auslesen der Messwerte auch eher rudimentär:

# Import the serial package and open the port
import serial

ser = serial.Serial( "/dev/ttyACM0", 115200, timeout = 1 )

ser.flushInput()

value = bytearray()

while True:
    # Ask for the value
    ser.write( bytes("?\r","UTF-8") )

    # Read a line with the measured value
    del value[:]
    ch = 0
    while ch != b"\n":
        ch = ser.read()
        value.extend(ch)

    print( value.decode("UTF-8").strip() )

Das Gerät gibt den gemessenen Wert als String zurück, terminiert mit "\n". Der String hat folgendes Format:

" 0.3150  \r\n"
"-0.0107  \r\n"

Die Quotes dienen hier zur Verdeutlichung, die kommen nicht von der Schnittstelle. "\r\n" ist ein Carriage-Return gefolgt von einem Linefeed.

Wozu die Spaces nach der Zahl dienen ist nicht dokumentiert. Eventuell sind es Platzhalter für Adapter mit höherer Auflösung.

Das Programm ist natürlich nicht tagelang gelaufen, aber bei meinen Tests konnte ich keine Instabilitäten feststellen.