Digitaler Messschieber – Arduino Android serielle Verbindung

Sending the caliper data through a serial connection to an android tablet.
Sending the caliper data through a serial connection to an android tablet.

Für ein komfortables Ablesen und Interagieren werden die Daten des Messschiebers an ein standard Android Tablet gesendet. Der Datenaustausch geschieht über eine serielle USB Verbindung. Um die Verbindung aufzubauen bietet Android den UsbManager, mit dem die Liste der angeschlossenen Geräte abgefragt und nach Hersteller-ID und Produkt-ID durchsucht werden kann. Um die IDs zu bekommen kann beispielsweise lsusb unter Linux oder USBView unter Windows verwendet werden.

Sobald das Gerät gefunden wurde, muss vom Anwender die Zugriffsberechtigung abgefragt werden. Ein BroadcastReceiver wird genutzt, um die asynchrone Antwort zu bearbeiten. Nach dem Erhalt der Berechtigung wird UsbDevice verwendet, um die passenden Schnittstelle/Endpunkte zu finden. Baudrate etc. kann manuell eingestellt werden, indem die passenden UsbDeviceConnection.controlTransfer(...) Aufrufe gesendet werden. Die korrekten Parameter für diese Aufrufe sind unter Umständen etwas schwer zu bekommen und müssen evtl. in der Dokumentation des USB-Adapters nachgeschaut werden. Alternativ kann auf eine USBSerial Bibliothek wie https://github.com/felHR85/UsbSerial zurückgegriffen werden.

In der verwendeten Konfiguration läuft die Kommunikation mit 115200 8N1 über die „bulk transfer endpoints“ ohne bemerkbare Verbindungsprobleme.
Um die Datenübertragung zu organisieren kommt ein simples Request-Response Protokoll zum Einsatz. Der Mikrocontroller wartet auf einen Request vom Android Hostsystem. Der Standardrequest („0x01“) ordnet das Lesen und Übertragen des Messwertes an. Um den Wert zu erhalten, wartet der Mikrocontroller an der Taktleitung auf eine ausreichend lange Pause, um sicherzugehen, dass ein neuer Messwert beginnt. Weiteres Pollen der Taktleitung und entsprechendes Auslesen der Datenleitung ergibt dann die 24 Datenbits der LCD-Anzeige. Der Messwert wird als Integer in zwei Bytes zum Host zurückgesendet. Dieser sammelt die eingehenden Bytes, bis eine Antwort vollständig ist und zeigt anschließend den neuen Messwert an.

Nächste Schritt: Erweiterung der Oberfläche mit Funktionen zum Voreinstellen von Werten etc. Anschließend wird es dann Zeit die Elektronik an der Drehbank anzuschließen.