ich versuche mit gerade darin das Arduino Uno mit dem Ethernet Shield so in Betrieb zu nehmen, dass es als unabhängiger Webserver fungiert. So weit so gut, nett wäre nun ein Web-Interface (mit Ajax?) um das Board zu steuern, Eingänge schalten usw.
Leider finde ich wenig bis keine Referenzprojekte oder Ideen, daher hier die Nachfrage ob jemand etwas ähnliches anbieten kann oder vorhat?
Was ist dein Problem? Der Arduino bekommt über eine Website (die z.B. auf der SD-Karte liegt) einen Befehl und verarbeitet ihn entsprechend. Wie du die Seite aussehen lässt, bleibt doch dir überlassen... Oder fragst du, ob jemand ein fertiges Interface rumliegen hat, dass er mit dir teilen würde?
Mir geht es grundsätzlich um die Klärung ob das so möglich ist, eine kleine Website auf der SD-Karte bereit zu stellen. Danach sollen darüber diverse Kommandos geschickt werden, welche zum Beispiel einen Motor laufen lassen, verschiedene Ausgänge schalten usw. Ich habe schon einfache Sachen mit einer LED gesehen, von dem her wird das schon klappen. Habe aber dann wiederum gelesen dass solche Sachen nur begrenzt möglich sind - was nun?
Braucht die Website alleine fast die komplette Leistung des Arduino?
Braucht die Website alleine fast die komplette Leistung des Arduino?
Die komplette Leistung nicht, aber viel RAM. Darum nimmt man oft den Arduino Mega. Der ATmega1280/2560 kann durch einen externen RAM-Baustein von internen 8kByte auf interne 64 KByte aufgestockt werden. http://ruggedcircuits.com/html/megaram.html
Du weißt schon daß Ajax viel Javascipt bedeutet und da es keine Ajax-Jmplementation für Arduino gibt, mußt Du alles selbst progrmmieren.
Ich würde da eher auf reines HTML setzen.
Grüße Uwe
Aha, vielen Dank. Also müsste mich auf den Mega setzen, das wäre fürs Projekt grundsätzlich kein Problem, alles selbst programmieren klingt unschön, das wird wohl auf html herauslaufen.
Die Meisten Ansätze die ich im Web gefunden habe setzen entweder immer einen Arduino mit Internetverbindung voraus wobei dann Skripte ausgelager sind oder der Arduino hängt an einem USB eines Computers und beides möchte ich vermeiden.
Ziel wäre es den Arduino per Ethernet einmal zu konfigurieren, z.B. über Smartphone oder Tablet...
Ziel wäre es den Arduino per Ethernet einmal zu konfigurieren, z.B. über Smartphone oder Tablet...
Was meinst Du damit? Nur einmal am Anfang konfigurieren, danach wird die Netzwerkschnittstelle nicht mehr benötigt? Das ist overkill.
Es sollte möglich sein Webseiten recht "ram-schonend" direkt von der SD-karte lesend auf den Output-Stream der Webverbindung zu schreiben und dabei z.b. bestimmte Platzhalter durch aktuelle Werte (Zustand eines Aus- oder Eingangs etc.) zu ersetzen. Dabei gibt es aber folgendes zu beachten, SD-Karte und Ethernet-Chip verwenden beide die SPI-Schnittstelle und werden nur über ein entsprechendes Chip-Select aktiviert und deaktiviert. Hier muss man vermutlich genauer schauen, ob das alles sauber läuft.
Das eigentliche Problem das ich bei solchen Lösungen aber sehe, ist das Du recht viel Ressourcen für das Webfrontend auf dem Arduino verpulverst. Gerade wenn ein HTTP-Request kommt und der Arduino zum großen Teil damit beschäftigt ist, diesen zu bearbeiten. Zumal Du nie vorhersehen kannst, wann ein Request kommt, oder wieviele.
Eine andere Möglichkeit, die ich z.B. bei meiner Wetterstation verwende ist, den Arduino aktiv Daten über HTTP auf einen "normalen" Webserver schreiben zu lassen, bzw. Daten von diesem zu holen. Dabei entscheided der Arduino wann Zeit für Netzwerkzugriffe ist.
Die in meinem Fall ermittelten Wetterdaten (Temperatur, Luftdruck, Feuchtigkeit, Wind etc.) werden wie im IDE-Beispiel Web-Client auf eine spezielle URL (Werbserver) per GET Request übertragen und dort durch ein PHP-Script verarbeitet. Das komplette Webfrontend läuft auf dem Webserver, nicht auf dem Arduino. Gleichzeitig werden alle ermittelten Daten noch lokal auf dem Arduino auf eine SD-Karte geloggt, falls mal kein Zugriff auf den Webserver möglich ist.
Der Arduino holt sich regelmäßig auch per GET (wieder über eine spezielle URL) Requests ab. Z.B. um die Daten eines bestimmten Tages auszulesen. Die Daten werden dann wieder per HTTP (diesmal per POST) auf den Webserver geschrieben. Damit vermeide ich, den Arduino als Webserver betreiben zu müssen. Als Webclient hat er es deutlich einfacher.
Du willst also Arduino als Webserver im lokalen Netz?
Genau - ohne Zugriff aufs Internet. Das lokale Netz kann ich dann auch Outdoor aufbauen wo eben keine www-Verbindung besteht.
Was meinst Du damit? Nur einmal am Anfang konfigurieren, danach wird die Netzwerkschnittstelle nicht mehr benötigt? Das ist overkill.
Das ist mir bewusst. Ich habe eine Outdoor Anwendung, die muss je nach Wetterlage konfiguriert werden, als User-freundliches Interface sähe ich da eine HTML5/Ajax Website die über ein Mobile / Tablet den Arduino konfigurieren lässt. So hätte man Einstellungen im Griff. Danach wird die Konfig auf den Arduino geschrieben der dann standalone agiert für die nächsten Stunden - bis man wieder etwas ändern möchte...
Dabei gibt es aber folgendes zu beachten, SD-Karte und Ethernet-Chip verwenden beide die SPI-Schnittstelle und werden nur über ein entsprechendes Chip-Select aktiviert und deaktiviert. Hier muss man vermutlich genauer schauen, ob das alles sauber läuft.
Auf Grund meiner Anwendung: Konfiguration und Betrieb getrennt wäre das kein Problem, schätze ich!
Eine andere Möglichkeit, die ich z.B. bei meiner Wetterstation verwende ist, den Arduino aktiv Daten über HTTP auf einen "normalen" Webserver schreiben zu lassen, bzw. Daten von diesem zu holen. Dabei entscheided der Arduino wann Zeit für Netzwerkzugriffe ist.
Diese Lösung ist schön, ressourcenschonend und habe ich auch schon in Betracht gezogen. Da aber meine Anwendung im Outdoor Bereich ohne Netzempfang funktionieren soll - passt diese leider nicht in mein Konzept...
OK, bei der Outdoorlösung und Netzwerkkonfig braucht Du aber dann auch noch WLAN-Equipment, oder hat Dein Tablet ein RJ45 Anschluss? Und ein Kabel hast Du dann trotzdem zum Arduino hin. Wenn es nur um die Konfiguration geht, würde ich lieber ein Bluetooth-Modul verwenden, das dann ohne Kabel wie eine serielle Schnittstelle angesprochen werden kann. Dann kannst Du super einfach mit einer Anwendung Daten zum Arduino hin und von ihm auch wieder weg transportieren. Wenn es ein Android-Tablet bzw. Phone ist, sollte die Softwareentwicklung dafür recht einfach werden, da man die gebauten Pakete direkt auf das Tablet kopieren und ausführen.
Bei iPhone und iPad wird es schwieriger, da hier der Zugriff auf Bluetooth nicht so einfach ist. Dazu gab es schon mehrere Threads hier im Forum.
OK, bei der Outdoorlösung und Netzwerkkonfig braucht Du aber dann auch noch WLAN-Equipment, oder hat Dein Tablet ein RJ45 Anschluss? Und ein Kabel hast Du dann trotzdem zum Arduino hin.
Ich würde einen kleinen AP verwenden wie den TP-Link Nano und damit wäre das Problem gelöst.
Wenn es nur um die Konfiguration geht, würde ich lieber ein Bluetooth-Modul verwenden, das dann ohne Kabel wie eine serielle Schnittstelle angesprochen werden kann. Dann kannst Du super einfach mit einer Anwendung Daten zum Arduino hin und von ihm auch wieder weg transportieren. Wenn es ein Android-Tablet bzw. Phone ist, sollte die Softwareentwicklung dafür recht einfach werden, da man die gebauten Pakete direkt auf das Tablet kopieren und ausführen. Bei iPhone und iPad wird es schwieriger, da hier der Zugriff auf Bluetooth nicht so einfach ist. Dazu gab es schon mehrere Threads hier im Forum.
Die Lösung sollte universal funktionieren, also mit Android, Windows und iOS. Das heisst ich müsste mich mal schlau machen, denn der Vorschlag mit Bluetooth klingt ganz interessant. Habe mir auch schon überlegt ein kleines Board zu kaufen auf dem ein Webserver läuft mit php, das würde dann auch klappen. Nur habe ich kein entsprechendes und günstiges Board gefunden...
Evtl. ist dann das folgende Shield für Dich interessant. Ich hab das auch gerade erst entdeckt. Das hat zumindest schon mal einen eingebauten HTTP-Server.
Ich habe nur kurz die Beschreibung überflogen, aber vielleicht kannst Du ja dort den HTML-Kram ablegen und reichst die eigentlichen Nutzdaten für die Konfig nur an den Arduino durch. Zumindest sparst Du Dir auf jeden Fall schonmal den AP.
Oder schon in "Fertig": http://www.matthiasrosenthal.de/blog/?p=272
Da wird zwar ein Roboter gesteuert, aber das ist im Prinzip erstmal das Gleiche beim Übertragen von Daten.
mkl0815:
Oder schon in "Fertig": http://www.matthiasrosenthal.de/blog/?p=272
Da wird zwar ein Roboter gesteuert, aber das ist im Prinzip erstmal das Gleiche beim Übertragen von Daten.
Mit Matthias hatte ich schon Kontakt - er nutzt auch einen weiteren Webserver für das Absetzen der Befehle.
Ich sehe das ich mir hier eine eher anspruchsvolle Aufgabe gesetzt habe
Ich sehe das ich mir hier eine eher anspruchsvolle Aufgabe gesetzt habe
Das stimmt wohl. Trotzdem sollte die Aufgabe lösbar sein.
Vielleicht solltest Du die Aufgaben auf 2 Arduinos aufteilen.
Arduino 1 mit einem RedFly Shield und einem SD-Card Breakout für den Webserver.
Arduino 2 für die eingentliche Aufgabe.
Beide Arduinos "reden" über eine serielle Schnittstelle miteinander. Das sollte reichen. Arduino 1 kann dann sogar als Datenspeicher herhalten und die Daten des 2. Arduino auf die SD-Karte loggen.
Vielleicht solltest Du die Aufgaben auf 2 Arduinos aufteilen.
Arduino 1 mit einem RedFly Shield und einem SD-Card Breakout für den Webserver.
Arduino 2 für die eingentliche Aufgabe.
Das ist ein guter Ansatz. Ich versuche mich wohl erstmal mit dem Ethernet Shield und dem SD-Slot auf diesem Board und einem einfachen Webserver. Danach kann ich das ausweiten auf einen zweiten Arduino sofern nötig und zum Schluss den RedFly Shield.
in einem anderen Thread wurde besprochen, wie man effektiv die PIN-Stati auslesen kann und der Code größtenteils auf der SD-Karte liegt.
Dabei ging es um die Steuerung eines Funksteckers. Aber das Prinzip ist das selbe. Funkschalter in Webserver einbinden
(Etwas Scroll-Arbeit obligatorisch )
Ich bin gerade bei einem ähnlichen Projekt, doch mein Lösungsweg ist anders. Das Arduino fungiert als reiner Controller auf XML Basis.
Für die eigentliche Aus- und Eingabe der Daten fungiert ein normaler Webserver.
Da Ajax nur lokale Verbindungen unterstützt, wird ein "proxy" Script die Aufgabe an das Arduino senden. Der Arduino Webserver gibt dann lediglich ein true oder false aus.
Soweit zur Theorie.
Loetkolben:
Der Arduino Webserver gibt dann lediglich ein true oder false aus.
Was 1:1 das Prinzip in dem von mir Angehängten Link beschreibt 8)
Mit dem einzigen Unterschied, dass in dem Fall auch noch die HTML-Datei auf der SD-Karte des Arduinos liegt. Aber kopiert man diese auf irgendeinen Webserver oder auch lokal auf die Platte, funktioniert es genauso. (Vorausgesetzt man arbeitet nicht mit relativen Pfaden)
hi, es gibt verschiedene Projekte für Dein Anliegen zbsp. webduino, tinywebserver. Auf dem uno wird es zwar etwas eng doch es geht. tinywebserver hat ein Beispiel mit SD Anbindung dabei. Meine implementation eines solchen Server ist auch bald verfügbar.