Der Raspberry Pi 3 hat zwei UART Schnittstellen eine Hardware und eine Softwareschnittstelle (miniUART). In der Standard Konfiguration nach installieren des Betriebssystems ist die miniUART Schnittstelle auf die GPIO's gelegt und die Hardware Schnittstelle ist mit dem Bluetoothmodul verbunden .

Software seitig heisen die zwei UART Schnittstellen :

ttyAMA0     -> Bluetooth

ttyS0        -> GPIO's

Es ist ratsam wenn man die GPIO UART Schnittelle benutzen möchte diese zu drehen da der miniUART stark den Prozessortakt Schwankungen unterliegt. 

Um die  UART Schnittstellen zu tauschen ist eine Anpassung der Config.txt Datei nötig. In der Datei ist am Ende  dtoverlay=pi3-miniuart-bt  einzutragen dies kann man manuell mit einem Texteditor am PC erledigen oder im Raspberry Pi durch den Aufruf von sudo nano /boot/config.txt um hier die Zeile einzutragen . Der Befehl bewirkt nach einem Neustart das die UART Schnittstellen getauscht werden und der miniUART zum Bluetoothmodul verbunden wird jedoch ist jetzt keine Bluetooth Kommunikation mehr möglich.

Die UART Schnittelle lässt sich jetzt so von QT aus ansprechen und Daten senden. Das empfangen von Daten stellt sich jedoch schwieriger da manchmal klappt es und manchmal liest QT nur ein teil der Daten wenn die Datenpakete zu lang sind. Das Problem liegt nicht bei QT schaut man sich den Vorgang am Oszilloskop an kann man folgendes Bild erkennen:

DS2 QuickPrint6  

Bild1: CH1 : Tx vom Modul geht auf Rx vom Raspberry Pi  | CH2: RX vom Modul geht auf Tx vom Raspberry Pi

Wie man auf dem Bild erkennt sendet das QT Programm zum Modul eine Anfrage, das Modul antwortet auf die Anfrage wehrend das Modul noch Antwortet sendet der Raspberry Pi erneut Daten zum Modul. Diese Daten kommen jedoch nicht vom QT Programm, lässt man das Programm auf einem PC laufen und verbindet das Modul kann man deutlich sehen das das Programm das Modul antworten lässt :

DS2 QuickPrint1

Bild2: Modul Kommunikation mit PC

Diese verhalten vom Pi kommt daher das die UART Schnittstelle an den GPIO's noch eine Console bereithält von wo aus man auf den Pi zugreifen kann. Diese Console antwortet auf die empfangenen Daten was zu dem Problem führt das QT nicht den ganzen Ganzen Datenstrom lesen kann da der Readbuffer von der Console gelehrt wird bevor QT ihn lehren kann. 

Um die Console abzuschalten ruft man sudo nano /boot/cmdline.txt auf .

Die Textdatei enthält folgenden Eintrag: dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

Hier muss man den Abschnitt console=serial0,115200 herauslöschen um die Console zu deaktivieren nach einem Neustart funktioniert die Kommunikation reibungslos.