Raspberry PI + Arduino Uno+ Webserver

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Guten abend zusammen,

    Ich versuche seit längerer zeit dieses Tutorial zu vollenden:
    http://www.robosphere.de/raspberry-pi-a…-communication/
    aber ich glaube was der da so geschrieben hat ist auch nicht ganz korrekt...

    also komm ich mal zu meinem Projekt...
    Ich möchte gerne über den Raspberry Pi einen Arduino Uno und einen Ardunio Mega über eine website bedienen... Ich habe ein großes Lichtspiel und auf der Website möchte ich gerne auf ein Bild drücken und dann spielt es ein gewisses Lichtspiel ab...ich habe bereits eine verbindung vom Raspberry Pi zu den Arduinos... zumindest kann ich die Arduinos über den Raspberry Pi programmieren...
    mit html kenn ich mich noch ein wenig aus, nur fehlt mir irgentwie der zusammen hang, wie ich die I/O's vom Arduino in das php verzeichnis bekomme...

    wäre super wenn mir jemand helfen könnte, vllt hat jemand sowas ja schonmal gemacht, wenn ich das tutorial wie oben hinbekomme, denke ich würde ich den rest selber schaffen

  • Warum gehst du den Umweg über ein Bash Script? Auf die Seriellen Schnittstellen kannst du Problemlos auch per PHP zugreifen. Entweder nimmst du einfach die Standard Dateifunktionen oder z.B.: PHP Serial das funktioniert sehr zuverlässig.

    Eines solltest du aber dabei bedenken, der Arduino macht bei jeder neuen Verbindung einen Auto Reset.
    Die Daten vom Arduino in PHP zu bekommen ist recht einfach, im Arduino Sketch machst du aus den Werten einfach einen String den du über die Serielle Verbindung feuerst.

    z.B.:

    Code
    Serial.print(statusD2);
    Serial.print(statusD3);
    Serial.print(statusD4);
    ...
    Serial.println();

    In PHP liest du dann so lange die Seriellen Daten bis die Zeile mit einem \n beendet wird.

    z.B.: (mit PHP Serial)
    [code=php]
    //einfachste Form (sollte aber mit einem Timeout erweitert werden da sonst das Programm da hängen bleibt wenn der Arduino nicht Antwortet
    while (true) {

    $line = '';
    while(true) {

    $rawData = $this->readPort();
    $line .= $rawData;
    if(preg_match('#\n#', $rawData)) {

    break;
    }
    }

    //in $line ist nun die komplette Zeile inkl. \n enthalten
    }
    [/php]

    Bei dieser Variante hast du dann ein Bitmuster wie z.B.: 01010010\n in der $line Variable. Mit der trim() Funktion kannst du das \n entfernen lassen. Danach hast du das Reine Bitmuster das von Rechts her mit dem kleinsten I/O anfängt und links den höchsten Darstellt.

  • Ich glaube er will das eher anders herum haben.

    PI + Webserver stellt die Webseite dar, wo man ein Bild auswählen kann, dann sendet der Pi die Seriellen Daten an den Arduino, welcher über das Lichtspiel (was ist das eigentlich? Ein Berg LEDs? :) ) die vorbereitete Programmierung darstellt.

  • Also Mega hat das problem verstanden, und zwa handelt sich es wirklich um einen Berg von LED, das Bild welches im Anhang ist, ist z.b. ein Lichtspiel, da fehlen allerdings noch sterne, die kann ich aber erst einbauen wenn ich den rest erledigt habe... Ich habe RGB's verwendet, und kann jede Menge Varianten darstellen..., ich habe auch schon einige schöne Bilder erstellt, nur fehlt mir jetzt noch die einbindung zum webserver...
    Also wenn ich z.B. auf das Foto auf der Website anklicke soll sich dieses Bild/lichtspiel öffnen

    • Offizieller Beitrag

    Find ich sau cool. Ich mag Weltraum..unendliche Weiten und so. Wenn du auf dem Arduino über serial.read reinkommende Befehle entgegen nimmst und entsprechend dieses Befehles dann das LED Bild baust. müsstest du doch über PHP am ende nur noch serielle Befehle senden., oder?


  • ....handelt sich es wirklich um einen Berg von LED, das Bild welches im Anhang ist


    :thumbs1::thumbs1::thumbs1:
    2D ? 3D ? wieviele LEDs ich habe gerade meine 2te Lieferung aus China bekommen, 2x arduino mega 2560 für 25€

    am mega328p lasse ich schon ws2812b LEDs laufen, wäre ja perfekt für sowas, aber trotzdem viel Lötkram wenn man die stripes schneidet, egal ob 2D oder 3D

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Zitat von dbv

    Find ich sau cool. Ich mag Weltraum..unendliche Weiten und so.

    Hehe danke, ja ich mag es auch abnormale Sternenhimmel zuerzeugen :D


    Zitat von dbv

    Wenn du auf dem Arduino über serial.read reinkommende Befehle entgegen nimmst und entsprechend dieses Befehles dann das LED Bild baust. müsstest du doch über PHP am ende nur noch serielle Befehle senden., oder?

    Naja das hört sich nicht so schwierig an, aber ich weiß nicht wie ich das realisieren soll...

    Ich muss eigentlich für jedes Bild oder jedes Lichtspiel ein Programm erstellen, und Das irgentwie abrufen...

    Wenn der sich neu verbindet ist das halb so schlimm... also wenn der kurz das programm neu hoch lädt, ich habe die Arduinos eh an einem USB HUB, einer läuft auf ttyACM0 der andere auf ttyACM1

    Einmal editiert, zuletzt von dbv (25. Juni 2014 um 11:33)

    • Offizieller Beitrag

    Hab mal deinen Beitrag etwas aufgehübscht :). Flashst du den Arduino bereits über den Pi? Wenn ja, ist es genau wie du gesagt hast. du erstellst für jedes Bild einen Sketch, welches du dann per Klick auf das Bild auf den Arduino flashst. In php gibt es funktion(en), shell_exec() wenn ich nicht irre, die es erlauben, commandozeilen (sprich Bash)-Befehle direkt in PHP auszuführen). Die suche sollte zum thema "shell_exec" ein paar brauchbare Beispiele liefern.

  • Hey, also diese lichtpunkte sind Glasfaser... ich habe 48 RGB LEDs, jede farbe ist einzelnt ansteuerbar..., Die RGB LEDs leuchten Glasfaser bündel an... ich habe geschätzte 15.000 Bohrlöcher und 3km Glasfaser mit 2mm Durchmesser

    was meinst du mit flash?, ich habe lediglich die Arduino programme vom PI auf den Arduino übertragen...

    shell_exec <-- danke für den tipp ich werde dem mal nach gehen

  • okay so wie in dem Tutorial z.B.?
    siehe Bild

    diese schritte habe ich schon ein paar mal gemacht, aber ich glaube da stimmt was nicht...
    eigentlich muss ich doch nur den Inhalt in eine Textdatei schreiben und die datei dann arduino-connect.sh nennen, und diese Dateien muss ich doch dann in das /var/www/ verzeichnis kopieren oder? ich arbeite meistens auf der Grafischen Oberfläche des RPI... also schiebe ich quasi die dateien in die Ordner

    • Offizieller Beitrag

    Jupp, das ist ein Ansatz. ich würde es , aus Faulheitsgründen, alles in einem Script zusammenfassen ;) Aber dieser Weg funktioniert genauso. Brauchst dann halt mehrere shell_exec in deinen php code.

    • Offizieller Beitrag

    Ok, das was du dort siehst (in dem Bild, hast du nen Link zu dem tutorial?) sind BashScripte, diese werden ausserhalb von php ausgeführt.

    Aber fangen wir doch mal einfach an. Mit welchen Befehl überträgst du denn die Programme auf den Arduino. Wenn war das haben, können wir mal ein prxis nahes Beispiel basteln.

  • Von shell_exec würde ich auf dem RPi generell abraten, das ist extrem langsam. Der Weg wie ich ihn oben mit PHP Serial beschrieben habe geht auch anders herum, also das der RPi die Zeichenketten über die Serielle Schnittstelle an den Arduino sendet.
    Das würde ich auch als beste Lösung sehen, da alles direkt in PHP abläuft, sobald shell_exec ins spiel kommt wird eine Webanwendung auf dem RPi Spührbar langsam (das musste ich beim PCC und SHC mehr als oft feststellen).

    Wenn du den RPi als Steuerzentrale nimmst und der Arduino nur befehle ausführt die vom RPi kommen, ist alles direkt in PHP denke ich die effizenteste Lösung.

    • Offizieller Beitrag

    Jetzt war ich verwirrt, weil du das gleiche Bild wie meigrafd hast :)

    Bedeutet das aber nicht, das auf dem Arduino alle LED Schaltungen in einem Sketch laufen würden und er dann beim "Schalt mal auf Bild 2 um" Bfehl in die jeweilige funktion springen würde? Oder hab ich grad nen Denkfehler?

  • okay super danke dir/euch
    also oben ist ein Link zum Tutorial, hier aber nochmal -> http://www.robosphere.de/raspberry-pi-a…-communication/

    Also ich weiß nicht ob man das wirklich übertragung oder Kommunikation nennen kann
    Also die 2 Arduinos hängen an einem USB Hub, ebenfalls habe ich ein W-lan stick dran...
    Ich übertrage die Programme von der Grafischen Oberfläche des RPI's mit dem programm "Arduino IDE" , quasi ganz normal übertragen halt nur vom rpi aus, aber das ist ja noch keine kommunikation...

  • Es kommt auf die Organisation an, generell würde ich den RPi als Zentrale nehmen und die Arduinos nur als Aktoren. Also nicht dem Arduino sagen schalte auf Bild 3 sondern schalte DO 3,5,9 und 11.

    Also das im RPi die Bilder gespeichert werden und der Arduino einfach eine Liste mit Ausgängen bekommt die er schalten soll. Das hat den Vorteil das man wenn ein Bild geändert wird nicht die Sketches im Arduino ändern muss.

    ernyburny
    verstehe ich das richtig, du schiebst einen neuen Sketch auf die Arduinos wenn du ein anderes Bild haben willst?

    Einmal editiert, zuletzt von agent47 (25. Juni 2014 um 12:36)

  • Also ich habe 30 Pins am Arduino Mega gleichzeitig HIGH und gleichzeitig auf dem Arduino UNO 8 PINS auf HIGH, diese sollen so lange an sein, bis ich auf das nächste Bild klicke oder halt auf AUS klicke

    na das würde mich nicht stören wenn er die programme neu drauf lädt... die 3,4 sekunden... ich habe auch nur die LED's an den Arduinos.



    aber eigentlich hast du recht... wie und wo lege ich diese liste denn an? muss ich die im /var/www/ verzeichnis kopieren oder wo kommt das rein? und wie lauten die befehle dafür?

    Einmal editiert, zuletzt von ernyburny (25. Juni 2014 um 12:44)

Jetzt mitmachen!

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