Digijunkies.de

Raspberry Pi 3 mit Jessie:UART einstellen, nutzen und konfigurieren

Ich bin seit einiger Zeit stolzer Besitzer eines Raspberry Pi . Man kann das jetzt als Fluch oder auch als Segen sehen, denn ich habe tierisch Spaß daran: Aber, ich kann auch nicht mehr loslassen. Ich glaub mein Wohnzimmer sieht mittlerweile mehr nach Werkstatt als nach einem Raum aus in dem man „wohnt“.
Irgendwie kann man doch aber sagen, dass „rumnerden“ ja im weitesten Sinne auch irgendwie „wohnen“ ist, oder?? Nun ja, zurück zum Thema. Ich will auch gar nicht lange rumschwafeln was man mit dem Pi so alles machen kann und wieso überhaupt, denn das habe vor mir schon genügend andere Menschen getan. Und vor allem gehe ich davon aus, dass wer wegen der Suchbegriffe „UART“, „ttyAMA0“ oder sonstwas hier gelandet ist, den ganzen Käse schon kennt und sich sagt: „Red Tacheles und komm zum Punkt!“ 🙂

Ja, ja mach ich ja jetzt. Der Raspberry Pi kommt mit diversen, konfigurierbaren- und nutzbaren Schnittstellen daher. Wir interessieren uns im speziellen Fall allerdings für die UART-Schnittstelle. Hierbei handelt es sich um eine serielle Schnittstelle. Daten können damit seriell, also nacheinander übertragen werden und bei UART handelt es sich grob gesagt um den Standard.
Wollen wir also irgendwann mal mit unserem Pi serielle Daten senden (wie z.B. MIDI oder anderes) dann kommen wir an der UART-Schnittstelle eigentlich nicht mehr vorbei.

Das tolle an dem Pi und seinen GPIO Pins ist ja, dass man diese eben belegen kann und dort Ausgaben erzeugen kann oder eben auch Eingaben empfangen kann. Blöderweise nutzt der Pi (auch die älteren Versionen) die Schnittstelle selbst. Soweit ich das korrekt verstanden habe (ich bin auch quasi Neuling auf dem Gebiet) nutzt der Pi z.B. die UART-Schnittstelle um eine Terminal-Kommunikation mit dem Gerät zu ermöglichen, selbst wenn man kein Netzwerk hat.
Beispiel: Wir haben kein Netzwerk und auch keinen weiteren Monitor. Dann besteht die Möglichkeit den Pi direkt mit dem Rechner zu verbinden und dann eine Terminal-Verbindung aufzubauen, um den Pi zu steuern bzw. mit ihm zu arbeiten.

Heisst also: Wir haben per default keinen Zugriff auf die Schnittstelle. Das war auch schon unter Wheezy und Raspberry 2 so. Aber es gab Workarounds und diese Workarounds findet man auch mit der entsprechenden Sucherei….aber: Fast alle handeln von Wheezy und Raspberry 2.

Die Neuerungen: UART unter Jessie und mit dem Raspberry 3

Auch da muss ich ein wenig ausholen, ich will versuchen es ordentlich zu erklären. Ein gutes Beispiel für PC-User sind z.B. die COM1 – so hiess das früher glaub ich mal auf DOS-Rechnern. Da kamen früher mal diese „Joysticks“ dran oder eben andere kleine Gerätschaften. Jedenfalls hiess bzw heisst der Anschluss COM1. Das Äquivalent dazu unter Linux oder somit auch unter Rasbian Jessie ist das /dev/ttyAMA0

Ich war immer Windows-User und sicherlich mögen die Linux-User jetzt schimpfen, aber trotzdem klingt COM1 irgendwie weniger kompliziert, oder?
Naja, jedenfalls kann man den Raspberry dazu bringen, dass er die UART (dev/ttyAMA0) nicht mehr „selbst“ nutzt, sondern von uns genutzt werden kann. Dann stehen uns die PIN’s 14 und 15 zur Verfügung (TxD und RxD) und wir können damit serielle Daten empfangen und senden.

Mit dem Raspberry 3 sind die Dinge nun aber noch einmal ein wenig anders geworden, denn das kleine Ding hat Bluetooth. Und genau deshalb nutzt der Raspberry 3 die UART nun für Bluetooth. Das wäre grundsätzlich gar kein Problem: Können wir auf Bluetooth verzichten, dann gehen wir einfach den Weg und deaktivieren Bluetooth auf der Schnittstelle um sie selbst zu nutzen….(keine Sorge es gibt gleich bissken Code und so)

Aber….was wir bis jetzt nicht wussten ist, dass /dev/ttyAMA0 bzw unsere „alte UART“ nicht mehr auf den Pins 14 und 15 liegen! Das tun sie quasi nur bei den älteren Modellen. Es gibt eine neue, software basierte UART-Schittstelle /dev/ttyS0, die nun quasi „auf“ die Pins 14 und 15 gelegt wurde. Diese steht uns nach wie vor nur zur Verfügung, wenn wir das explizit aktivieren. Aber immerhin.

Schön, bis hier hin….denn nun stellt sich raus: Diese bekackte Software UART ist nicht so leistungsfähig und stabil wie die „alte“ UART und ausserdem komplett abhängig von der CPU-Frequenz:
Steht der Prozessor unter hoher Last, ändert das die Frequenz, was somit wieder direkte Auswirkungen auf unsere Baudrate hat….letztlich kann das somit zu Fehlern in der seriellen Kommunikation führen. Und es hat dafür gesorgt, dass viele Programme, die unter Pi 2 noch liefen, nun auf dem Pi 3 Probleme machen.

All das kann man aber zum Glück hinbiegen. Aber schauen wir noch einmal im Detail auf die Sache:

Am Raspberry Pi 3 haben nun also:

/dev/ttyAMA0 –> Bluetooth
/dev/ttyS0 –> Serieller Port für die GPIOs

Für manche reicht das bis hierhin möglicherweise schon, denn nun ist klar: Es wird ein ganz anderer „Port“ genutzt und in vielen Scripten wird es reichen /dev/ttyAMA0 durch /dev/ttyS0 zu ersetzen und alles cool. Braucht man aber nun eben ZWINGEND den „alten “ Hardware UART muss man wieder ein wenig tricksen.

UART Control aus den Boat Utilities

Zum Glück ist der Pi weit verberitet und fast alle Probleme waren irgendwie schon mal da. Daher gibt es coolerweise bei GitHub eine interessante Geschichte: Die Boat Utilities. Hierbei handelt es sich um eine Reihe von bash-Scripten um den Pi ein wenig anzupassen. Hier dient das vor allem der Anpassung für die Schifffahrt, aber uns interessiert sein Script „uart_control“.

https://github.com/itemir/rpi_boat_utils

Mit diesem Script könnt ihr euren Pi entsprechend anpassen. Öffnet die „uart_control“ inGithub, erstellt euch ein Bash-Script und kopiert den Inhalt hinein:

sudo nano uart_control.sh

Führt dieses mit den entsprechenden Parametern aus:


sudo ./uart_control.sh gpio

Damit schaltet ihr die PINs wieder wie gewohnt auf 14/1 und Hardware UART steht uns wieder zur Verfügung. Jetzt fehlt uns eigentlich nur noch das Feedback und unsere Möglichkeit mal zu schauen ob das so überhaupt klappt. Mit folgendem Code zeigt ihr euch die „Anschlüsse“ an:

ls -l /dev

Dann sollte das so aussehen:

 

 

 

Damit sehen wir nun, dass ttyAMA0 wieder so nutzbar ist, wie man es kennt und das somit auch alte Scripte wieder laufen dürften.
Viel geiler ist aber an dem Script vor allem, dass es uns das Gefummel in der /boot/config.txt und der /boot/cmdline.txt erspart. Auf diesem Wege hab ich mir schon ein System zerschossen….

Wollt ihr wieder alles rückgängig machen und den Raspberry bzw. UART so nutzen, wie in Jessie vorgesehen, dann führt folgendes aus:

sudo ./uart_control.sh default

Dann sollte es folgendermaßen aussehen:

 

 

 

Abschliessend will ich sagen: Ich bin Neuling auf dem Gebiet und ich hab nix mehr gehasst als Tutorials oder Berichte in denen ich alles nachbasteln kann, aber das „Wieso“ nicht verstehe. Die Cracks ujnter euch werden einiges hier für Pipfax halten….aber ich bin mir sicher, es gibt viele – die genauso wie ich – gerade einsteigen und neu starten. Vielleicht hilft denen dieses Grundlagewissen über UART ein wenig weiter.

Ich habe jetzt Tage an dem Problem gefummelt 🙂

Im nächsten Artikel beschreibe ich euch noch, wie man am Pi dafür sorgt, dass man auch „unkovetionelle“ Baudraten einstellen kann. Unter anderem auch auf die Baudrate für Midi.
Lasst mich wissen ob euch dieser Artikel geholfen lasst oder ob ihr Fragen habt.


Beitrag veröffentlicht

in

,

von

Kommentare

9 Antworten zu „Raspberry Pi 3 mit Jessie:UART einstellen, nutzen und konfigurieren“

  1. hanswurst

    danke! Das Script hat mir sehr geholfen!

    ist doch unglaublich, wozu die Schwarmintelligenz fähig ist 😉

  2. mantis

    Richtig gut! Vielen Dank für deine allgemeinverständliche Erklärung. Seit Tagen frage ich mich schon warum ein Python-Script welches den UART unter der Schnittstelle AMA0 verwendet, auf meinem „alten“ Pi3B läuft und auf dem Pi3B+ nicht mehr. Ganz klar: BlueTooth belegt ttyAMA0, nun verwende ich ttyS0 und das funktioniert.
    Vielen Dank nochmal!!!

  3. Jimm

    Hallo zusammen, bei mir klappt es leider nicht.

    pi@raspberrypi:~ $ sudo ./uart_control.sh gpio
    sudo: ./uart_control.sh: command not found

  4. Lukas

    man muss eingeben sudo sh uart_control.sh gpio

  5. klappt super.
    Der Hinweis vor dem Ausführen ein
    sudo chmod +x uart_control.sh
    wäre noch hilfreich gewesen

  6. Nico

    Ich finde den Artikel super, vorallem weil hier nicht stocksteif formuliert wird, sondern geradeheraus gesagt wird wie es ist. Genial 🙂 Weiter so!

  7. Hab Dank
    Hat auch mir geholfen 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.