Posts by joh.raspi


    Meine Frage ist jetzt aber, wie ich den mit Strom versorgen soll.
    ...
    Gibt es vielleicht einen Adapter von Micro USB auf USB oder so?


    Ja den gibt es. Hast du aber bestimmt schon selber herausgefunden :) So Adapter sind nur meistens etwas klobig und daher nicht wirklich praktisch.


    Ich hätte noch folgende Mögilchkeiten anzubieten:


    • USB Kabel mit A Stecker auf beiden Seiten
    • Spezielles Adapterkabel mit USB A Stecker auf der einen und einen in die Hohlbuchse passenden Stecker auf der anderen Seite
    • Oder die nötigen 5V direkt mit passenden Kabeln vom GPIO Header abzwacken


    Nein.
    Die Datei ansich ist ausführbar und wird nicht an einen Interpreter übergeben sondern direkt ausgeführt ...


    Doch. :)
    Um meine Theorie zu überprüfen habe ich das ganze gerde mit logger selbst getestet. ( rpi444 Danke, logger ist echt super :thumbs1: Kannte ich (wie so vieles) noch nicht. Ich hätte das jetzt in eine Datei geloggt :rolleyes: )


    Mit korrektem SheBang wird die rc.local wie folgt aufgerufen:

    Code
    /bin/sh -e /etc/rc.local


    Ohne (oder mit ungültigem) SheBang so:

    Code
    /bin/sh /etc/rc.local



    rpi444, noch eine kleine Korrektur zu deinem Codebeispiel

    Code
    cat /var/log/syslog | grep -i logger


    funktioniert so natürlich nicht. Das war wohl so

    Code
    cat /var/log/syslog | grep "benutzte shell"


    gemeint. ;)




    Nimmst du -e weg würde er den nächsten Befehl auch ausführen obwohl der vorherige fehlerhaft war.


    Was auch in diesem Fall "gewollt" war/ist.



    insidERR Du musst das also nicht mehr testen. Was ich an deiner Stelle aber jetzt machen würde ist den SheBang wieder so zu ändern wie er ursprünglich war, dann das mounten in die fstab auslagern und anschließend das Python Skript wie von meigrafd beschreiben im Hintergrund starten.


    Joh

    Hallo Leute,


    meigrafd Ich könnte mir schon vorstellen dass das so funktioniert.
    Ich habe dazu eine kleine Theorie :)
    Die rc.local wird ja sowieso von einer Shell(/bin/sh ?) aufgerufen und auch von dieser interpretiert. Wenn in der ersten Zeile kein Shebang angegeben wird bedeutet dass ja nur dass die aufrufende Shell das Skript interpretieren muss(und nicht die vom Shebang definierte). Ich hätte auch gedacht dass der "kaputte" Shebang eher zu einem Synthax Error oder so führt aber es scheint als ob der er einfach ignoriert wird. Dabei wird natürlich auch die Option -e ignoriert. Und um nicht zu lang um den heißen Brei zu schreiben Poste ich schnell was ich dazu gefunden habe:

    Quote

    http://wiki.ubuntuusers.de/rc.local#Problembehebung
    Des Weiteren kann es passieren, dass die Datei nicht vollständig ausgeführt wird. Dazu kommt es, wenn einer der eingefügten Befehle einen Fehler erzeugt (Returncode != 0). Da in der ersten Zeile #!/bin/sh -e standardmäßig die Option -e angegeben ist, wird die Ausführung sofort abgebrochen. Um dieses Verhalten abzustellen, verkürzt man die 1. Zeile auf #!/bin/sh.


    Ich könnte mir vorstellen dass genau das passiert ist. Die rc.local wird mit /bin/sh und eben nicht mit "/bin/sh -e" geparst. Das erklärt auch wieso das Python Skript das eine mal(mount Befehl erfolgreich) ausgeführt wird und das andere mal nicht(mount Befehl schlägt fehl).


    Das alles ändert aber nichts an der Tatsache dass vor "!/bin/sh -e" auf jeden Fall ein "#" gehört! ;)



    insidERR Würde es dir etwas ausmachen das ganze kurz zu überprüfen?
    Dazu müsstest du deine rc.local nochmal so ändern dass in der ersten Zeile nur "#!/bin/sh" steht. Also wie vorhin, nur ohne "-e" und mit "#". Wenn du dann den Raspi neu startest müsste eigentlich alles genauso wie davor funktionieren. Gib uns bitte bescheid ob das geklappt hat.


    Als nächstes würde ich den mount Befehl aus der rc.local herausnehmen. Um automatisch Laufwerke zu mounten gibt es unter Linux eine eigene Konfigurationsdatei names "fstab". [http://wiki.ubuntuusers.de/fstab]. Hier im Forum gibts auch ein paar Threads dazu. (Hier ist zum Beispiel einer)



    meigrafd Ich könnte mir Vorstellen dass das starten der Prozesse im Hintergrund durch die benutzung der fstab gar nicht mehr nötig ist, da es m.M.n ja nur ein problem mit dem mount Befehl gibt. Müsste man aber auf jeden Fall testen!
    Du hast auch einen kleinen Fehler im Code gemacht. Die Zeile

    Code
    ( sleep 30; python /media/RASPI/Autostart.py #Ein Pythonscript auf nem USB-Stick (FAT32) ) &


    gehört eigentlich so

    Code
    ( sleep 30; python /media/RASPI/Autostart.py ) & #Ein Pythonscript auf nem USB-Stick (FAT32)


    Grüsse,
    Joh

    Ist zwar schon ein paar Wochen her...


    Dein Testskript funktioniert eigentlich problemlos, da ist nur ein kleiner Denkfehler drin.
    Welcher Befehl wird denn direkt nach
    echo "0" > /sys/class/leds/led0/brightness
    ausgeführt? Fehlt da nicht etwas ;) (Das dass dem dreamshader nicht aufgefallen ist :) )


    Die rc.local ist ja nur eine Textdatei welche Anweisungen enthält die beim starten automatisch ausgeführt werden. Hier und hier gibts zwei kleine Tutorials dazu.


    Grüsse,
    Johannes

    Das tolle an Linux ist unter anderem die Tatsache dass fast alles über normale Text Dateien konfiguriert werden kann. Die Konfigurationsdatei für die Netzwerkeinstellungen findest du im Ordner /etc/network und heißt "interfaces". <Hier> gibt's einen sehr guten und ausführlichen Artikel dazu.


    Die einfachste Möglichkeit die mir einfällt ist die interfaces Konfigurationsdatei mithilfe eines Shellskriptes einmalig beim ersten Start mit einer von dir geschriebenen Konfigurationsdatei zu ersetzen(dabei auf die Dateirechte achten).

    Könnte es sein dass du in deinem Programm vielleicht die falschen Pins ansprichst? Was für eine Programmiersprache verwendest du und nach welchem Pin Nummerierungs-Schema greifst du auf die Pins zu? Ich hatte ein ähnliches Problem und der Grund war dass ich in meinem Programm das BCM Nummerierungs-Schema anstatt dem wriringPi Schema verwendet habe, nach welchem ich meine Taster angeschlossen hatte.

    Hallo und Danke euch allen!


    Und Danke Andreas und dreamshader für die Anmerkung. :)


    Da hab ich mich wohl ein bisschen undeutlich ausgedrückt. Mir ging es nicht um die Erzeugung eines PWM Signals sondern um die Auswertung eines solchen. Ich habe fälschlicherweise angenommen dass der Sensor den Abstand eines Gegenstandes in Form eines PWM Signals (wobei sich die Pulsbreite des PWM Signals proportional zum Abstand verhält) zur verfügung stellt.
    dreamshaders Danke, jetzt weiß ich wie diese Module funktionieren. Werde mich das nächste mal auch besser informieren bevor ich Halbwissen verbreite. ;)


    bytekiller234 Über eine Google Suche(vorzugsweise auf englisch) findet man eigentlich genug Informationen zum Thema. Hilfreiche Suchbegriffe sind z.B.: Mikrocontroller, AVR, Arduino, Raspberrypi, GPIO.


    Grüsse,
    Johannes

    Direkt kannst du nur das HC-SR501 Modul an den Raspi anschließen.
    Wieso:
    In der ebay Beschreibung zum Modul steht "Operating Voltage range: 4.5-20V" was bedeutet das das Modul mit einer Spannung zwischen 4.5 Volt und 20 Volt versorgt werden kann. Der Raspi stellt 5V zur verfügung, das passt also schonmal. Als nächstes musst du darauf achten dass das Signal welches vom Modul kommt auf keinen Fall größer als 3V3(andere Schreibweise für 3.3 Volt; das Komma wird einfach duch ein V ersetzt) ist. In der Beschreibung steht: "Level Output: HIGH 3.3V / LOW 0V" und bedeutet dass die Signal-Spannung in der Tat nicht höher als 3.3 Volt ist. Die einzige Aufgabe von diesem Modul besteht ja darin den Ausgabe/Signal Pin auf HIGH zu setzten wenn eine Bewegung registriert wurde. Oder anders gesagt: Wird eine Bewegung registriert liegt auf dem Ausgabe/Signal Pin eine Spannung von 3.3 Volt an. Ein Programm auf dem Raspi überprüft dann in einer endlos Schleife, oder besser im Interrupt Betrieb, den Zustand des GPIOs and welchen die Signal Leitung angeschlossen ist und macht beim Zustandswechsel etwas(Programm starten/beenden, Sound abspielen, Netzwerk-Dinge,....).


    Beim HC-SR04 ist es etwas anders. In der Beschreibung steht "1. Working Voltage: 5V", das passt also auch. Aber bei "3. Output Signal" steht "high level 5V, low level 0V" und bedeutet das die Signal-Spannung 5 Volt beträgt und daher auf KEINEN Fall direkt mit den Raspi verbunden werden darf! Hier wäre also eine Pegelwandlung( von 5V auf 3V) nötig! Ausserdem ist die Arte der Signalisierung eine ganz andere. Hier reicht ein einfaches Signal nicht da ja ein bestimmter Zahlenwert/Abstand (und nicht nur ein Ein/Aus) vom Modul zum Raspi übertragen werden muss. In diesem Fall funktioniert das ganze mittels PWM (ähnliche funktionsweise wie Servos) und kann vom Raspi, soweit ich weiß, nicht verarbeitet werden weil man beim Raspi nicht so schnell auf die GPIO Pins zugreifen kann, und falls doch würde es die ganzen Ressourcen verbrauchen die dem Raspi zur verfügung stehen da man beim Raspi keinen direkten Zugriff auf die Pins hat. Beim Raspi sagt man dem Betriebssystem(OS) dass mann einen bestimmten Pin setzen oder lesen will und das OS kümmert sich dann darum, was eben etwas langsam von statten geht.. Hier wäre ein Arduino die bessere Wahl da auf dem Arduino kein OS läuft sonder ein einzelnes Programm welches eben direkt auf die GPIO Pins zugreifen kann.


    Das LED Matrix Modul kannst du nicht direkt an den Raspi hängen, dafür sind spezielle LED Treiber ICs(z.b. MAX7219) nötig. (Siehe den weiter oben verlinkten Thread)


    Ist jetzt doch ein bisschen ausführlicher geworden als geplannt. Ich hoffe das hilft. :)