Daten an RasPi senden

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,

    möchte meinen RaspPi über UART ansteuern und zwar über Hterm. Mit

    Code
    echo Hallo >>  /dev/ttyAMA0

    kann ich Nachrichten vom RasPi empfangen.
    Jedoch verstehe ich nicht, wie ich die Daten( Befehle ) vom PC an Pi schicke.
    Habe eine Datei übertragen, jedoch finde ich sie nicht in meinem Pi. Wenn ich einen " Hallo" schicke sehe ich das auf der Konsole oder in irgendeiner Datei?

  • Will auch keine Daten übertragen. War nur zur Testzwecken.

    Eigentlich möchte ich Anweisungen zum Ausführen von Befehlen schicken, zum Beispiel
    Datei öffnen oder Videodatei abspielen usw. Die Dateien sind auf dem Pi drauf.

    Habe versucht vom PC aus über Hterm ein

    Code
    echo  ABC  >> dev/ttyAMA0

    an den RasPi zu schicken und dies mit

    Code
    sudo cat /dev/ttyAMA0 >> /tmp/Empfangen

    in der Datei Empfangen.txt zu speichern. Jedoch hat es nicht funktioniert.

    Einmal editiert, zuletzt von Cool_pi (27. August 2014 um 11:41)


  • Jedoch verstehe ich nicht, wie ich die Daten( Befehle ) vom PC an Pi schicke.

    Siehe auch diesen Thread bei UU: http://forum.ubuntuusers.de/topic/uart-bedienen/

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Erst mal musst du auf Seiten des PI's UART freischalten bevor du das anderweitig verwenden kannst - denn standardmäßig wir das beim PI fürs Console-Log verwendet. Wie das geht steht >> hier <<

    Dann musst du beide Seiten auf die selbe Baudrate einstellen. Das musst du jedesmal machen wenn du den Rechner (egal ob PC oder PI) neu startest. Besser wäre sogar jedes mal wenn du die Verbindung aufbaust.
    Auf dem PI machst du das so:

    Code
    sudo stty 19200 -F /dev/ttyAMA0

    Auf deinem PC musst du das dann halt im entsprechenden Programm einstellen....

    Und dann musst du auf dem PI ein Script laufen haben was auf Verbindungen reagiert und das empfangene verarbeitet - der muss ja auch wissen was ausgeführt/gemacht werden soll wenn du ihm was schickst....

  • Hi,


    Kannst du ein Beispiel geben?
    ...

    jede Client/Server Anwendung funktioniert so.
    ssh ist auch so eine Anwendung.
    Der Daemon (Server) läuft z.B. auf dem RPi - er empfängt die Eingaben über das WLAN/LAN von einem Client, prüft nach, was das ist und führt dann das entsprechende Kommando aus. Die Ausgaben sendet er zurück an den Client.
    Der Client ist z.B. putty auf dem Windows-Rechner. Der liest Deine Eingaben von der Tastatur und schickt sie dann über LAN/WLAN an den Server.

    Das Ganze ist nicht auf WLAN/LAN beschränkt und funktioniert genau so über die serielle Schnittstelle (z.B. serielle Konsole).

    cu,
    -ds-

  • Also wenn du Befehle senden möchtest und diese eventuell auf der gegenseite empfangen und weiterverarbeitech möchtest empfehle ich dir diese mit python zu machen.

    Das ist eigentlich relativ leicht. Dort definierst du dann deine Schnittstellenparameter und dann kannst du auch schon senden und empfangen.

    Deine Angaben sind etwas schmal um dir genaueres zu sagen...

    Wenn du nicht zwischen 2 Pi´s sendest solltest du Levelshifter oder ähnliches nutzen, damit du dir nicht zerschiesst... Pi verträgt nur 3.3V >> Arduino sendet z.B. mit 5V ... -> Pi kaputt!

    .. wenn du deine serielle Schnittstelle für ein Programm nutzt solltest du außerdem den UART reservieren! ..sonst können konflikte in der kommunikation entstehen....

    wenn du einfach einen Befehl von deinem PC zum Pi schicken möchtest geht das genauso über minicom.. wenn dein eine serielle Schnittstelle hat... ansonsten kannst du dir USB-Serial-converter zulegen...

    Und wirklich ganz wichtig... die Pegel beachten!!!

    mit deinem echo befehl... zeigst du es dir selbst nur an der konsole an wenn ich mich nicht täusche.. oder hast du was an deinen pins angeschlossen was dir dieses anzeigt?

    Schildere mal was du genau vor hast... denn ich meine im endeffekt mit minicom oder hterm kannst du es dir soweit ich weiß auch bloß anzeigen lassen.. willst du das denn eventuell noch weiterverarbeiten?

    und beim reservieren vorsichtig was du weg nimmst.. sonst bleibt beim booten der monitor dunkel!

    .. ich bin jetzt ruhig! .. du bist dran!

    Rede wenig, rede wahr, trinke mäßig, zahle bar.:angel:

    Einmal editiert, zuletzt von Kornfeld (27. August 2014 um 12:09)

  • Also die Einstellungen zur Aktivierung der UART habe ich gemacht. Verbindung zum Pi:
    Laptop->ein kleines Mikrocontrollerboard wie STK ( selbst gebastelt , nicht von mir :D ). Das Board funktioniert und wird über USB versorgt. Benutze davon nur 2 UART Pins und einen GND Pin->RasPi.
    Auf dem Laptop ist Hterm offen, auf dem Pi minicom.

    Also mein Ziel ist es einige Befehle zu formulieren, z.B Open_file.
    Soweit ich verstanden habe schreibe ich diesen Befehl im RasPi.
    Dann gebe ich im Terminal vom Programm Hterm Open_file und gebe den Pfad, wo dieser Befehl gespeichert wurde?.

    Zum Einstieg wollte ich erstmal auf dem Pi was anzeigen lassen, z. b " UART funktioniert" oder so was, um zu überprüfen, dass der Datenempfang vom PC überhaupt funktioniert.

    Brauche ich den Hterm auf dem PC und Minicom auf Pi oder reicht eins von beiden?

    Einmal editiert, zuletzt von Cool_pi (27. August 2014 um 13:32)

  • Eins reicht!

    Was hat der UART von dem Mikrocontroller für eine Funktion in dem ganzen Spiel? Wenn du eigentlich vom PC zum Pi senden möchtest?

    Ich wüsste aber nicht das du über minicom dateien öffnen kannst... bin bei minicom aber auch nicht so drin..

    Mit Python wiederrum geht das... Dort kannst du dann auch die Bedingungen festlegen das wenn der empfangene Befehl das dementsprechende ist soll das ausgeführt werden( Datei öffnen, LED leuchten what ever.)

    ...wenn du in der Richtung was machen willst kommst du um Programmierung nicht herum... da solltest du dir ein Buch zulegen für Raspberry und Python z.B.

    dort findest du oft die Grundlagen die du kombinieren musst und eventuell etwas erweitern..

    Hattest du die UART Pins schon verbunden und hast probiert (Spannungen beachten ^^)?

    Rede wenig, rede wahr, trinke mäßig, zahle bar.:angel:

  • Um dem Chaos mal entgegen zu wirken:

    Du setzt am PC einen Befehl ab zum Beispiel openfile /tmp/xyz.txt
    Der Befehl würd über UART direkt an den PI übermittelt
    Der PI muss ein Script laufen haben um den befehl zu empfangen
    Das Script vom PI führt entsprechend wie programmiert eine Aktion aus, in diesem Beispiel Öffnet er die Datei /tmp/xyz.txt
    Anschließend könnte das Script auf dem PI noch eine Bestätigung zur Öffnung der Datei zurück senden, oder eben einen Fehler. Danach könnte man dann noch einen Befehl absetzen um zum Beispiel etwas in die Datei rein zu schreiben usw.

    Die Terminal Programme dienen nur der Veranschaulichung wobei du auf dem PC schon ein Terminal Programm wie PuTTY oder HTerm brauchst.

    Soweit verstanden :huh:

    Also:
    Erst mal musst du auf dem PI UART freischalten.
    Dann brauchst du dort ein Script was UART überwacht, dafür würde sich python mit pyserial anbieten.
    Dann musst du in dem Script festlegen was gemacht werden soll wenn ein Befehl übermittelt wird.

  • Ok, habe verstanden.

    In Hterm tippe was ein, in minicom sehe ich, was eingetippt wurde. Jetzt funktioniert es auch.

    Habe ein Programm in C für UART Ansteuerung. Starte es mit gcc. my_uart.c
    In dem Programm ist schon definiert, was passiert, wenn ich a oder b eingebe. Jetzt muss ich nur noch a oder b bei Hterm eingeben und schon kann es los gehen?

    P.S Weiß jemand, was diese Fehlermeldung aussagt?:
    my_uart.c: (.text+0x14): undefined reference to " serialOpen "
    So steht es in der besagten Zeile

    Code
    int Port = serialOpen("/dev/ttyAMA0", 9600) ;


    Die Baudrate im Hterm ist auch auf 9600 eingestellt.

    Einmal editiert, zuletzt von Cool_pi (27. August 2014 um 15:52)

  • P.S Weiß jemand, was diese Fehlermeldung aussagt?:
    my_uart.c: (.text+0x14): undefined reference to " serialOpen "
    So steht es in der besagten Zeile

    Code
    int Port = serialOpen("/dev/ttyAMA0", 9600) ;


    Du hast irgenein Header File includiert, welches die Definition der Funktion "serialOpen" definiert, hast aber den entsprechenden Programmcode nicht in Dein Programm gelinkt.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!