Python und C kommunikation (RPi und Arduino)

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo :)
    ich möchte mit einem RPi und einem Arduino Pro mini eine Art autonomen Roboter verwirklichen. Ich weis das wir dieses Thema hier schon oft im forum hatten, nur ich komme auf die schnittschtellen noch nicht so ganz klar :/

    Zu meinem Setup:
    der rpi hat ein python script laufen was steuerbefhle durch eine webschnittstelle empfangt und ausführt, klappt auch...allerding soll er selbstständig entscheiden können ob er die gesendetetn befehle auch ausführen kann (zb user sendet befehl vorwährts fahren, allerdings ist ne wand vorm pi (geht mit python und direkt über die gpios gut)) --> der abstand wird per ultraschallsensoren überwacht, die bisher (hier liegt mein haupt problem) direkt an den pi angeschlossen waren, auf grund eines mangels von gpios habe ich mir gedacht, das die us sensoren durch den pro mini überwacht werden sollen.
    Ich bin in python halbwegs sicher, hab aber jetzt fast keinen plan von c da ich es bisher nur lesen und nie selber schreiben musste....
    Die entscheidende frage ist nun: wenn die sensoren einen zu geringen abstand fest stellen, wie soll das der arduino dem pi sagen? (ich kann nur die TX und RX pins vom pi nutzen, usb ist nicht drin, weil schon voll belegt) Ausserdem wie soll das in das python script eingebettet werden?

    ich bin für jeden hinweis dankbar :3

    lg Tim

    Anhang:
    Hauptsteuerscript das bisher vom rpi genutzt wurde:
    -der ankomenden webschnittstelle:

    und stellvertretend das vorwärtsfahr script :

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

  • das ist schon mal schön zu wissen, das das mit tx und rx leicht geht^^
    bei dem link den du mir gesendet hast, wie soll ich da am besten ran gehen ?
    ich steh grade bisschen sehr auf der leitung :D

    nach meinem verständnis würde ich
    >>> import serial
    >>> ser = serial.Serial(0) # open first serial port
    >>> print ser.name # check which port was really used
    >>> ser.write("hello") # write a string
    >>> ser.close() # close port

    den code auf den arduino brennen, oder versteh ich das falsch?
    (mir erschliest sich einfach nicht was für den pi und was für den pro mini ist, zumal ich kein readme finde :/ )

    lg Tim

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

  • Hi Tim,
    ein wenig genauer umschauen und suchen wäre manchmal nicht schlecht :fies: ...
    Zunächst mal gibt es für die Kombination RPi und Arduino (µController im allgemeinen) ein eigenes Subforum.
    Dort findest Du sicherlich einiges, was du als Grundlage verwenden kannst.
    Unter anderem zum Beispiel -> hier <- in der Übersicht.


    cu,
    -ds-

  • ich habe schon gesucht, nur die suchfunktion von dem forum ist totaler müll, weil einem sonst wie viel beiträge angezeigt werden, bloß die relevanten sind auf seite 12 oder noch weiter hinten :/

    und auf deine übersicht bin ich auch schon gestolpert, bei mir haperts aber am verständnis und der technischen machbarkeit... zb dieses minecom lässt das ganze terminal einfrieren, und es die shortcuts wie strg+a p etc. funktionieren einfach nicht :(


    dbv dankö :3 ich werd da noch bisschen rumprobieren hab auch schon was gefunden --> http://www.doctormonk.com/2012/04/raspbe…nd-arduino.html
    klappt nur noch nicht so ganz da python keine werte zurückgibt trotz umstallung im quellcode auf den serial port

    lg Tim

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

  • stimmt ja da war ja was.... du hast ja fast das gleiche projekt hier im forum laufen wie ich privat und in kleinen teilproblemen im forum verstreut :DD

    :danke_ATDE:

    lg Tim

    PS: nur noch so ne frage...wenn ich bei deinen erklärungen auf probleme stosen sollte soll ich das dann hier fragen oder dir ne pn schreiben oder als frage unter deinen post schreiben :o

    ^^

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

  • Hi Tim,


    ...
    ... soll ich das dann hier fragen ...
    ...

    wobei hier nicht zwangsläufig diesen Beitrag oder dieses Subforum bedeutet, sondern alles, was Python betrifft im passenden Subforum, alles was den Arduino betrifft, im passenden Subforum ...

    Ach ja: Du hast angemerkt, dass die Suchfunktion so viel Müll liefert ... woran mag das wohl liegen :fies:
    (hat aber jetzt nix mit Dir zu tun ;) ...)

    cu,
    -ds-

  • meigrafd bezüglich dem lösen der schnittstellen probleme: ich habe in deinem anderen post ein python script gefunden was gut die anforderungen an meine problem bereit stellt:


    einiges darin werde ich umschreiben müssen damit nur ner serielle port genutzt wird, sollte allerdings kein problem darstellen.

    Jetzt muss ich das ganze nur noch irgendwie mit dreamshaders anleitung für die ultraschallsensoren kombiniert bekommen (der arduino soll am ende 4 dieser sensoren überwachen und die werte wieder an den pi zurück geben) und fertig ist das modul was dann in das haupt steuerscript eingesetzt werden kann... (hoffe ich :D )

    lg Tim

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

  • Naja, wieso umschreiben? :) Du willst doch auch etwas Autonomes bauen oder nicht? Dann sollte ein WebInterface nur Optional sein und unabhängig vom Rest..

    Der Arduino dient nur zur Anbindung der Sensoren und Motorsteuerung. Alle Daten werden an den PI übermittelt, der dann das weitere Vorgehen managed.

    Die RoPi_Socket.py macht genau das - quasi das Herzstück des ganzen - wobei eben zusätzlich die Möglichkeit besteht über Socket weitere Module anzubinden wie zB ein WebInterface oder zum Entwickeln eine socket_client.py um Befehle manuell absetzen zu können...
    Mit Sockets macht es übrigens auch das (mir zu) mächtige ROS.

    Um das parallel abwickeln zu können läuft das jeweils in einem Thread, da sonst das Script alles andere blockieren würde, also auch Abfragen vom WebIf oder manuelle Eingaben.

    Mittlerweile sehen meine Scripts etwas umfangreicher aus, sind aber noch längst nicht Fehlerfrei oder präsentabel, da ich selber auch noch mit dem ein oder anderen zu Kämpfen habe, wie zB den KI bzw AI Part :-/
    Siehe Beitrag#135, da hab ich auch erst später einen Fehler entdeckt und behoben - so wirds eben stetig immer weiter entwickelt und verbessert ;)


    Also ich würd die Socket Sachen an deiner Stelle drin lassen und dein WebIf entsprechend umbauen - sonst ärgerst du dich später das du "alles" umbauen musst da du merkst das dein Weg zu langsam, zu umständlich ist oder nichts mehr mit Autonom zu tun hat :fies:

  • Zitat

    Naja, wieso umschreiben? Icon_smile Du willst doch auch etwas Autonomes bauen oder nicht? Dann sollte ein WebInterface nur Optional sein und unabhängig vom Rest..

    stimmt schon nur du benutzt in deinem script die usb schnittstelle so wie es aussieht:

    Code
    SerialPort = "/dev/ttyACM0"
    SerialBaudrate = 38400
    SocketHost = "0.0.0.0"
    SocketPort = 7060


    die serielle schnittstelle wäre "/dev/ttyAMA0" ^^

    ausserdem ist mir gerade aufgefallen das ich wahrscheinlich meinen arduino gebricked habe :( der nimmt keine daten mehr an, nur noch "avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00"
    wahrscheinlich weil ich nen loop mit ner seriellen ausgabe zuletzt programmiert hatte, und er nun nur noch das zurücksendet wenn er strom bekommt...

    Weis da jmd ein workaround auf die schnelle?

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

  • Egal was für ein Sketch du geflasht hast, er muss sich wieder neu flashen lassen... Die Fehlermeldung kommt bei mir auch hin und wieder.

    Rausziehen, 10 Sekunden warten und wieder einstecken. Irgendwann gehts scho :)


    PS: ein paar Settings ändern ist nicht "einiges umschreiben" :)

  • ich hab einfach mal das board gewechselt, vom alten auf den neuen chipsatz, und tada obwohl der chipsatz nicht stimmt hat ers diesmal angenommen :D komische dinger sind das, diese arduinos :baeh2:

    //EDIT: ja variabeln änden nicht umschreiben, hast recht ^^

    Some people have told me they don't think a fat penguin really embodies the grace of Linux, which just tells me they have never seen a angry penguin charging at them in excess of 100mph. They'd be a lot more careful about what they say if they had."[1996] -Linus Torvalds (*1969) :geek: ~hehxes

    Einmal editiert, zuletzt von hehxes (30. Oktober 2014 um 16:32)

Jetzt mitmachen!

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