Daten aus/in DB lesen/schreiben über USB möglich? oder Ethernet shield

Hallo,

mein Arduino hängt direrkt an dem Raspberry auf dem ein/e Datenbank und Webserver läuft. Da ich z.B. mal Soll-Temp Werte ändern möchte und diese sollten dann auch vom Arduino ausgelesen werden damit er damit arbeiten kann sollte der Arduino auch Werte von Sensoren in die DB schreiben können.

Das meiste was ich im Netz an Beispielen fand baute auf eine Verbindung via Enthernet-shield auf.

Die Gründe dazu fand ich leider nicht.

Deshalb hier die Frage. Ist es wohl nicht möglich das der Arduino via USB-Verbindungskabel mit dem Raspberry und der dortigen DB kommunizieren kann, bzw. hat dies gravierende Nachteile?

Gibt es dazu einen Link mit einer guten Erklärung und Beispielen wie man das am besten umsetzen kann?

Viele Grüße Jürgen

Ist es wohl nicht möglich das der Arduino via USB-Verbindungskabel mit dem Raspberry und der dortigen DB kommunizieren kann, bzw. hat dies gravierende Nachteile?

Natürlich ist dies auch über USB bzw. die serielle Schnittstelle möglich. Der grösste Nachteil ist die fehlende Erfahrung mit serieller Kommunikation bei den meisten Programmierern, zumindest unter Linux. Mit PHP hat man aber relativ schnell so etwas zusammengefrickelt, also liegt die Lösung mittels Web-Applikation auf der einen und Web-Client auf der anderen Seite ziemlich nahe.

Rein theoretisch kannst Du sogar über die serielle Schnittstelle HTTP "fahren", auch wenn Du nach Bibliotheken dafür wahrscheinlich relativ lange suchen wirst.

Hallo,

PHP auf dem Arduino? geht doch nicht oder.

Der Arduino soll/muss daten in eine DB schreiben und von dort selbständig lesen. Wenn ich das via PHP auf dem Raspberry mache so müsste ich ja erst die Daten aus dem Arduino lesen und dann in die DB schreiben oder habe ich da was falsch verstanden

PHP auf dem Arduino? geht doch nicht oder.

Nein, aber es ist auf dem Raspberry Pi durchaus üblich.

Der Arduino soll/muss daten in eine DB schreiben und von dort selbständig lesen.

Definiere "selbständig"! Ohne Hilfe von Software auf dem Pi wird das nur schwer möglich sein, da die DB ja dort laufen soll. Und eine DB-Client-Bibliothek auf dem Arduino habe ich bis jetzt nicht gesehen, wird wohl aufgrund der mangelnden Speicherausstattung nie Realität werden.

Wenn ich das via PHP auf dem Raspberry mache so müsste ich ja erst die Daten aus dem Arduino lesen und dann in die DB schreiben oder habe ich da was falsch verstanden

Nein, ich dachte, so hättest Du Dir das gedacht. Der Raspberry Pi kann die Daten natürlich auch direkt einlesen, aber wozu hast Du denn den Arduino vorgesehen? Hattest Du nicht den Arduino für die Anbindung an spezielle Hardware vorgesehen und der Raspberry Pi soll der Server mit DB und anderen "High-Level" Sachen sein?

Hallo gut ich will mal versuchen das besser transparent zu machen was ich machen möchte.

Es soll ein Aquarium-Controller werden.

Auf dem Arduino soll später ein sketch laufen der ständig überprüft und Daten die mittels Sensoren bekommt soll er dann in eine DB schreiben . Die DB, der Webserver etc, dass läuft dann alles auf dem Raspberry. Weiter möchte ich dann via Webfrontend hier z.B. homecontrol.js Daten in eine DB schreiben. Diese sollen dann vom Arduino wieder gelesen werden damit er entsprechend dieser Neuen Werte andere Berechnungen machen und wieder an die DB übertragen kann

Beispiel. Der Arduino liest mittels Sensor die Wassertemp. Diese schreibt er in die DB damit ich sie später via Web auslesen kann. Dann möchte ich die Wassertemp erhöhen. Der Raspberry fragt dann zwischendurch immer in der DB nach ob es Änderungen gab. Wenn ja wird er die Heizung im Becken anschalten bis die neue Temp erreicht ist.

Aus diesem Grund muss der Arduino ständig Werte aus der DB holen und auch wieder dort hin schreiben.

Das ist quasi ein ständige hin und her.

Mittels PHP oder eben heimcontrol.js oder einem anderen Tool (habe bis dato nur heimcontrol.js gefunden) möchte ich nur Daten aus der DB auslesen. Evtl. wäre es noch komfortabel wenn ich direkte Daten in Echtzeit vom Adruino in mein Webfrontend bekommen könnte. Beispiel: Ich möchte das Wasser und dort die Temp überwachen während dieses aufgeheizt wird und nicht "alte" Daten die vom Arduino in die DB vor einer Minute geschrieben wurden

Das ist zwar ein blödes Beispiel mit dem Wasser da das Aufheizen nicht so fix geht aber nur zum Verdeutlichen wie die Komminikation von statten gehen sollte

Ich suche dabei eine simple Lösung ohne das ich an einer Schnittstelle noch was rumbasteln muss. Ich muss dann eh schon genug mit dem sketch auf dem Arduino arbeiten und dem Webfrontend. Ich möchte mir nur umständliche Wege fernhalten für die ich im Netz fast keine Doku finde.

Was meinst Du?

Gruß Jürgen

Wenn Du schreibst "der Arduino liest" oder "der Arduino schreibt", dann ist das bereits verklausuliert, dass der Arduino per Web-Interface auf die Daten zugreift. Wenn Du den selben Setup ohne Ethernet-Shield auf dem Arduino machen willst, dann hat der Arduino keinen Zugriff auf die Daten, sondern bekommt jene Daten, die er braucht, vom RaspPi mitgeteilt und liefert seinerseits die Daten, die er hat, an den RaspPi ab. Da dies über eine serielle Schnittstelle geschieht, setzt diese Lösung etwas Know-How in der Programmierung der seriellen Schnittstelle unter Linux voraus. Die Lösung mit Ethernet-Shield setzt nur Kenntnisse in einer Übertragunstechnik voraus. Somit erkaufen sich die meisten mit etwas mehr Hardware weniger Lernaufwand in der Programmierung und viel mehr Beispiele und fertige Bibliotheken auf dem Netz.

Wie bereits angedeutet, könnte der Raspberry Pi die Temperatur auch selbst lesen und die Heizung direkt steuern, aber der Arduino hat hier bezüglich Einfachheit die Nase vorn. Es bedeutet aber, dass man zwei Computer mit unterschiedlichen APIs programmieren muss. Im Endeffekt ist es ein Abschätzen der eigenen Fähigkeiten gegen den Hardware-Aufwand.

Hallo,

nein, ich meinte nicht das der Arduino via Webinterface auf irgendwas zugreifen soll habe ich das so geschrieben? dann war es falsch.

gut dann komme ich um ein Ethernetshield nicht rum. Mist. Ja genau. Deswegen habe ich mich für dei Kombination Arduino + entscheiden weil es tausende sensoren für den Arduino inkl. fertiger Beispielsketche gibt. Das war genau der Grund.

Natürlich erkaufe ich mir das was ein sehr guter Programmierer über die Seriell etc. schnell mal einprogrammiert mit Hardware, aber dennoch ist wohl alles so hoffe ich günstiger als fertig gekauft wobei das fertige eh nicht das ist was man möchte

aber gut dann weiss ich zumindest jetzt das es nur mit erhöhten Aufwand für mich möglich wäre direkt über USB mit dem Raspberry zu kommunizieren.

Hi. Ich bin gerade dabei mein heute frisch eingetroffenen Raspi als Server aufzusetzen mit Raspbian. Dass hier hat wunderbar geklappt: http://www.renehering.de/2013/12/raspbian-auf-einem-raspberry-pi-installieren/

Nun wollte ich ein mini img nehmen, hat soweit alles geklappt ausser install php5 Hier das mini img: http://www.linuxsystems.it/raspbian-wheezy-armhf-raspberry-pi-minimal-image/ Hatte schon früher Webmin am laufen, dachte schmeiß ich hier auch drauf, hier ne Anleitung: http://www.forum-raspberrypi.de/Thread-tutorial-webmin-1-590-auf-dem-raspberry-pi-installieren

Nun zu deinem Anliegen.... Der Raspi dient hier "nur" als Webserver. Darauf liegen html/php Dateien. Schau dir dies mal an: https://github.com/JanStevens/ArduinoPi-Controller

Ich nutze ein Mac, mit LAMP/XAMP/MAMPP. Da hab ich diese Seite gefunden: http://www.instructables.com/id/Control-an-Arduino-with-PHP/all/?lang=de Also Dateien hochgeladen und schon läuft es.

Melde mich noch wenn ich mit dem Raspi was hinbekommen hab.

Hallo

erstmal vielen Dank für die hilfreichen Links. wirklich gut!

das der Raspberry nur als Webserver dient bzw. eben ein kleiner Linux-PC ist wusste ich schon deshalb setze ich ihn ja auch ein. Ich suche nur was gut dokumentiertes um mir meine Steuerung zu bauen. Ob das nun sensoren zum auslesen sind die in die DB geschrieben werden oder die ich in Echtzeit auslesen will oder eben Änderung/Vorgaben in die DB schreibe die dann dem Arduino dienen um bestimmte aktionen auszuführen. Genau sowas such ich zumindest wie man es nachbauen kann. Ändern muss ich eh einiges ... ich suche nur den Einstieg

Heimcontrol.js was ich zuerst dachte ist sowas von grottenschlecht dokumentiert, selbst die Beispiele dort mit Screenshots und der Arduino-Konfiguration stimmen nicht annähernd z.B ist dort auf dem arduino Pin 3 belegt und im Screenshot aus dem Webfrontend sieht man das angeblich Pin08 angesteuert werden soll.

Ich hätte das sehr gerne verwendet aber bei dieser schlechten Doku... phooo da kann ich gleich was eigenes entwickeln

Der Link zu github ist gut, es wird ja aktuell vieles mit der Bibliothek erledigt, ich suche jedoch einen Ansatz bzw. einen Lösung in der Mysql integriert ist und benutzt wird. Auf diese Lösung möchte ich dann aufbauen

Kennst Du da was?

Jep, kenn ich. Auch nachgebaut. Allerdings ohne Raspi sondern aufm Mac Server und mit nem Ethernet Shield. Sollte aber kein Problem sein ohne das Shield zu Arbeiten. http://fluuux.de/2012/09/arduino-mysql-temperatur-sensoren-uber-webserver-auslesen/

Mit Ajax, um di Daten sofort zu aktualisieren http://startingelectronics.com/tutorials/arduino/ethernet-shield-web-server-tutorial/web-server-read-switch-automatically-using-AJAX/

cool,

na ja, das Ethernet shield habe ich schon akzeptiert bevor ich mir noch mehr Arbeitsaufwand antue ich glaube via Ethernet-shield die Daten aus der Mysql zu lesen und in diese zu schreiben ist von der verfügbaren Doku leichter für mich.

Danke für die Links

Bekomme keine Verbindung über Serial, muss auf dem Raspi Arduino IDE laufen? Wie man den Serial Port herausfindet weiß ich wohl, der stimmt in der .php Datei. Auf dem Arduino müssen keine "änderungen" gemacht werden, wie zB Widerstand oder Kondensator?

Bekomme keine Verbindung über Serial, muss auf dem Raspi Arduino IDE laufen? Wie man den Serial Port herausfindet weiß ich wohl, der stimmt in der .php Datei. Auf dem Arduino müssen keine "änderungen" gemacht werden, wie zB Widerstand oder Kondensator?

Diese Information ist in etwa soviel wert wie "geht nicht". Was ist bei Dir eine "Verbindung über Serial"? Hast Du den Arduino über USB angeschlossen? Nein, die IDE muss nicht laufen. Welchen Arduino verwendest Du? Änderungen auf dem Arduino? Wozu? Damit Du ihn über USB ansprechen kannst? Nein, sonst könntest Du ihn nicht programmieren.

Ja ich hab den Arduino Mega/UNO mit USB an den Raspi hängen. Hab aber gelesen dass der Raspi zu wenig Strom bietet, was ich dann aber nicht verstehe wie die dann hier machen: http://lets-get-nerdy.com/arduino-mit-einem-raspberry-pi-verbinden-und-kommunizieren-lassen/

Änderungen am Arduino deswegen: http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection

Als ich den Arduino am PC hängen hatte, musste ich zuerst den Serial Monitor öffnen, damit die Verbindung hergestellt werden kann.

Hab aber gelesen dass der Raspi zu wenig Strom bietet, was ich dann aber nicht verstehe wie die dann hier machen: http://lets-get-nerdy.com/arduino-mit-einem-raspberry-pi-verbinden-und-kommunizieren-lassen/

Das geht eigentlich nur, wenn der RaspPi modifiziert wurde (i.A. die Sicherungen kurzgeschlossen, also nicht zu empfehlen). Einen Servo per Arduino zu versorgen, sollte man nicht mal machen, wenn der Arduino per Netzteil versorgt wird, ausser man achtet beim Kauf explizit darauf, dass der Servo nicht mehr Strom zieht, als der Arduino liefern kann.

Änderungen am Arduino deswegen: http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection

Das bringt doch für die Stromaufnahme nichts. Habe ich das was falsch verstanden?

Als ich den Arduino am PC hängen hatte, musste ich zuerst den Serial Monitor öffnen, damit die Verbindung hergestellt werden kann.

Habe ich Deinen Satz richtig verstanden? Du kannst auf den Arduino nichts uploaden, ohne dass Du vorher den Serial Monitor geöffnet hattest? Das dürfte dann eher an Deinem PC liegen. Bei meinem ist das nicht nötig, normalerweise dürfen Geräte am USB bis zu 500mA beziehen, auch wenn der Standard da eigentlich separate Anforderungen vorsehen würde.

Also ich versuche dieses zum laufen bekommen:

Wenn ich ein Button drücke, sieht man am Raspi eine LED aufleuchten/blinken.
Am Arduino leuchtet aber nix auf, also keine Verbindung.
Wenn ich denselben Sketch nehme und diesen PHP Code, dann sieht man dass am Arduino was passiert, also Verbindung hergestellt.

Mit der Stromaufnahme hats nix zu tun und selbst mit dem Uploaden auch nix.
Es geht um die Serial Verbindung. Wenn man ganz normal den Serial Monitor öffnet, wenn man den Arduino am PC hängen hat, dann sieht man ja dass da eine LED aufblinkt. Wie ich es verstehe, macht das Board ein reset. Deswegen diese änderungen am Arduino, wenns am Raspi hängt.
Am PC musste ich erst den Serial Monitor öffnen, damit die Serial Verbindung funktioniert.

Du bringst hier einige Sachen durcheinander.

Wenn ich ein Button drücke, sieht man am Raspi eine LED aufleuchten/blinken.

Wo drückst Du einen Button und welche LED leuchtet bzw. blinkt?

Am Arduino leuchtet aber nix auf, also keine Verbindung.

Falsche Schlussfolgerung. Es heisst höchstens, dass das serielle Device (auf dem RaspPi) nicht aktiviert wurde und deshalb der ATmega16U2, der für die USB-Schnittstelle verantwortlich zeigt und die RX/TX-LEDs auf dem Arduino kontrolliert, nicht “aktiv” ist.

Mit der Stromaufnahme hats nix zu tun und selbst mit dem Uploaden auch nix.

… und mit der Verbindung nix.

Es geht um die Serial Verbindung. Wenn man ganz normal den Serial Monitor öffnet, wenn man den Arduino am PC hängen hat, dann sieht man ja dass da eine LED aufblinkt. Wie ich es verstehe, macht das Board ein reset. Deswegen diese änderungen am Arduino, wenns am Raspi hängt.

Das mit dem Reset stimmt und mit dieser Veränderung wird normalerweise kein Reset mehr ausgelöst.

Am PC musste ich erst den Serial Monitor öffnen, damit die Serial Verbindung funktioniert.

Nein, nicht damit die Verbindung funktioniert, sondern damit Du die LEDs blinken siehst. Du hast das dann mit Verbindung funktioniert gleichgesetzt. Hier siehst Du, dass genaue Beschreibungen der Symptome wichtig sind und dass Du nicht Deine Interpretation der Fakten, sondern die Fakten selbst hier posten solltest.

Button drücke (im Browser, html), blinkt auf Raspi. (vermutung: Raspi hat ein commando empfangen)

Falsche Schlussfolgerung. Es heisst höchstens, dass das serielle Device (auf dem RaspPi) nicht aktiviert wurde und deshalb der ATmega16U2, der für die USB-Schnittstelle verantwortlich zeigt und die RX/TX-LEDs auf dem Arduino kontrolliert, nicht "aktiv" ist.

Nehme ich aber ein anderen php Code(nur zum testen) dann funktioniert das drücken im Browser und das Blinken auf dem Raspi und das blinken auf dem Arduino. Und wie aktiviere ich den dann?

Fakt ist, es war nur dann so, als der Arduino nicht am Raspi sondern am PC hing: Fakt ist, Serial Monitor nicht offen, nichts funktioniert. Fakt ist, Serial Monitor offen, alles funktioniert. Hat mit dem blinken nix zu tun.

Fakt ist, es war nur dann so, als der Arduino nicht am Raspi sondern am PC hing:

Was auch immer "so" hier wieder heisst. Mit PC meinst Du in diesem Fall wahrscheinlich ein Windows irgendwas. Auch hier sollte man genau sein, an meinem PC funktioniert's, aber der hat ein besseres Betriebssystem :).

Fakt ist, Serial Monitor nicht offen, nichts funktioniert.

Ach ja, ich dachte mit dem PHP-Teil hat's auch funktioniert? Du widersprichst Dir.

Hat mit dem blinken nix zu tun.

Dann hast Du zuwenig genau beschrieben, denn Deine Beschreibung sprach nur von blinkenden LEDs und nicht von anderen Symptomen (auch die im letzten Post war in dieser Hinsicht nicht genauer).