Hallo zusammen, ich habe bereits fundierte Kenntnisse beim programmieren von Microcontrollern. Nun würde ich gerne einen Messwert aufnehmen und diese in meine Datenbank eintragen. Hat jemand damit schon Erfahrung? oder kann mir jemand ein gutes Buch empfehlen? vielen Dank im voraus
was für eine Datenbank? wo soll die Datenbank laufen? welchen "Verbindung" gibt es vom Messwertsystem zum Datenbanksystem? welche Datenmengen müssen übertragen werden?
Ich empfehle das Buch "Messwerte aus Microcontrollern in Datenbanken abspeichern", Verlag: "Dumm&Dämlich GmbH". ISBN musst aber selber raussuchen. Sollte alles drinstehen was du wissen musst.
welche Datenbank das ist, ist im mom egal, schön wäre es wenn es über TCP/IP gehen würde. ich stell es mir sovor, dass ich z.B ein Temperaturmesswert aufnehme. Dieser dann in der Datenbank gespeichert wird und mit Hilfe eines Web Servers per Smartphone abfragen kann
Und der Controller ist wohl auch unwichtig. Normalerweise hat man einen Client für eine Datenbank. Dieser läuft lokal und spricht über TCP/IP mit dem Datebanksever. Zur Anwendung stellt er meist standardisierte Schnittstellen (ODBC) zur Verfügung. D.h. du brauchst nur einen Client und musst dir ODBC angucken. Allgemeine Kentnisse über relationale Datenbanken setze ich mal vorraus, bzw. müssten seperat angeeignet werden. gruß cyblord
Miriam schrieb: > welche Datenbank das ist, ist im mom egal, schön wäre es wenn es über > TCP/IP gehen würde. Dann könntest du auf deinem Messsystem den Datenbanktreiber nutzten, oder auf dem Datenbankserver ein Programm schreiben was die Daten über TCP annimmt und an die DB weiterreicht. Darüber wird du kein Buch finden, weil du kein konkretes Problem hast.
Miriam schrieb: > welche Datenbank das ist, ist im mom egal, schön wäre es wenn es über > TCP/IP gehen würde. Es stellt sich immer noch die Frage: Wie ist deine Systemarchitektur? Wo läuft die Datenbank? Läuft die auf dem µC (welcher?) oder läuft die auf einem eigenen Datenbankserver? > ich stell es mir sovor, dass ich z.B ein Temperaturmesswert aufnehme. > Dieser dann in der Datenbank gespeichert wird und mit Hilfe eines Web > Servers per Smartphone abfragen kann Das ist so aussagekräftig wie: Ich will ein Auto bauen. Ich stelle mir das so vor, dass es 4 Räder haben soll. Ich will ein Verkehrsflugzeug bauen. Dazu stelle ich mir vor, dass ich Flügel und Triebwerke brauchen werde. Ich will ein Haus bauen. Ich stelle mir vor, dass es ein Dach und eine Eingangstür hat. Welchen µC hast du? Welche Kommunikationsmöglichkeiten hast du auf dem µC? Hast du einen Web-Server zur Verfügung? Hast du einen Web-Provider, der dir eine Datenbank zur Verfügung stellt? Wie sonst soll der Zugriff aus dem Web auf die Daten erfolgen? Im Moment sieht das nach einer 2-Teilung aus
1 | µC Server |
2 | +--------+ +---------+ |
3 | | |---------->| | |
4 | +--------+ | |<----- WEB |
5 | | Daten- | |
6 | | bank | |
7 | | | |
8 | | Web- | |
9 | | Server | |
10 | +---------+ |
Wo steht der Server? Hast du einen bei dir zu Hause? Wenn zu Hause: Wie ist deine Web-Anbindung, ist die ständig verfügbar? Eventuell könnte man auch den Server mit dem µC 'verheiraten', in dem man beides zb auf einen NET-I/O gibt, der die Datenbank auf einer SD-Karte realisiert (Wobei Datenbank ein recht hochtrabender Begriff für eine Reihe aus Tupeln ist)
ich habe das I/O Net Board von Pollin mit einem ATMEGA32 ja die Struktur soll wie oben beschrieben sein. Micrcontroller nimmt die Messwerte auf, schickt sie an eine Datenbank die auf meinem PC läuft, Webserver stellt die Daten im Hausnetz zur verfügung. Der Webserver läuft auch auf dem PC. lediglich die Messwertaufnahme und die Versendung der daten per TCP sollte auf dem uC realisiert werden
Also bleiben dir 2 Möglichkeiten: Du schaust in die tech. Doku deiner Datenbank und schreibst die Kommunikation via TCP selbst, oder du suchst dir einen fertigen Client für den AVR, bzw. portierst einen. Aber die Frage stellt sich: Warum muss es eine ausgewachsene Datenbank sein? Und warum direkt damit Kommunizieren? Wenn du schon einen Webserver hast, dann mach ein PHP-Skript welches Meßwerte z.B. über GET Parameter entgegen nimmt, dann kannst du via TCP sehr einfach einen HTTP Request senden und diese Webseite aufrufen und deine Meßwerte übergeben. Das PHP-Skript kann diese dann sehr einfach in eine Datenbank schreiben. Die Hürde hierbei: Kannst du denn bereits sauber via Net/IO Daten via TCP raussenden? Oder musst du das auch noch implementieren? gruß cyblord
das muss ich auch noch implementieren :-( oder du suchst dir einen fertigen Client für den AVR -> was meinst du damit?
Miriam schrieb: > das muss ich auch noch implementieren :-( > oder du suchst dir einen fertigen Client für den AVR -> was meinst du > damit? man könnte auch versuchen einen mysql/MS-SQL (freetds)/sqllite/ Client auf deinem AVR zu übersetzen.
Miriam schrieb: > ok, gibt es dafür ein Buch > sowas hör ich zum ersten mal nein bestimmt nicht, weil es vermutlich noch niemand gemacht hat. Es ist für einen AVR einfach nicht sinnvoll. Bei einem ARM macht das dann schon mehr sinn. Das einfachste für den AVR wird sein, die Messwerte per UDP an einen Server zu senden. Dann kann es aber passieren das auch mal ein Messwert verloren geht. (im LAN sehr unwahrscheinlich).
Miriam schrieb: > ok, gibt es dafür ein Buch Eher nicht. > sowas hör ich zum ersten mal Dann ist es für dich sowieso unmöglich. Das macht man nicht mal so schnell. Halte dich an die Webserver/PHP Methode, das könnte klappen. Den TCP/IP Stack brauchst du halt noch auf deinem AVR. Bevor das nicht steht, würde ich mir um höhere Schichten erstmal keine Gedanken machen.
Mit dem Vorwissen sollte man auch mal ins Auge fassen, den ganzen Plan etwas umzuändern. Auf dem Net-IO wird ein Web-Server installiert. Zb. der vom Radig Ulrich, oder Ethersex. Dieser Web-Server übernimmt das Ausliefern der kompletten Web-Site und das Programm wird soweit gepimpt, dass die Messwerte lokal gehalten werden. Entweder im EEPROM speichern (falls die Datenmengen nicht allzu gross sind), oder auf einer SD-Karte. Aber im Moment sehe ich da ehrlich gesagt noch etwas schwarz, weil dir noch gar nicht bewusst ist, dass du erst mal die komplette Infrastruktur schaffen musst, damit du überhaupt erst mal eine Netzwerk Verbindung herstellen und betreiben kannst. Erst wenn diese Verbindung steht, stellt sich dann erstmalig die Frage: Wer? kommuniziert eigentlich mit wem? auf welchem? Port und welche Daten? werden vom Net-IO zu wem? übertragen, der dann was? damit macht? Im Momemnt stehst du da, wie die Banker am Anfang des 20. Jahrhunderts, die die Börsenkurse von London nach New-York übertragen möchten (das ist ihre Wunschvorstellung), die aber das Problem haben das noch überhaupt keine Transatlantikleitung liegt und die Ingenieure auch noch keine Ahnung davon haben, wie das funktionieren soll, die schwachen Telefonspannungen über eine Distanz von 6000km zu übertragen. Ehe der Wunsch der Banker in Erfüllung gehen kann, gilt es, erst mal einen Haufen darunter liegende Technik zu erstellen und lauffähig zu machen. Mit dem Wunsch alleine ist es nicht getan.
Schau Dir das mal an: http://www.haeussler.name/blogs/hobby/avr/avr-net-io-gaewachshaus-steuerung/ Wenn Du damit erst anfängst, plane viiiiiel Zeit ein ;-)
Ich habe auch noch einen Lösungsvorschlag, der vielleicht nicht so schön ist, aber warscheinlich eine ganze Ecke einfacher umzusetzen. Statt sich auf dem kleinen AVR mit TCP/IP-Implementierung rum zu schlagen, werden die Daten per UART an den PC übermittelt. Dann musst du nur noch auf dem PC ein Programm schreiben, dass die Daten am UART entgegen nimmt und diese entweder über ODBC direkt oder (wenn es eine MySQL_DB sein soll) über den mitgelieferten Komandozeilen-Clienten in die DB einträgt. Nicht besonders schön, wenn man schon das Net-IO Board hat und somit gut übers LAN gehen könnte, aber sicherlich einfacher in der Umsetzung.
Hallo Miriam, ich mache das bei mir so: - die ATmega-Schaltung hängt per serieller Schnittstelle an einem Raspberry Pi - der Raspberry Pi ist in meinem Netzwerk und hat damit Internet-Verbindung - die ATmega-Schaltung empfängt mit einem Funkmodul Messwerte von Temperatur/Feuchte/Druck-Sensoren - überträgt diese über die serielle Schnittstelle an den Raspberry Pi - dort läuft ein Python-Script, dass auf diese Messwerte wartet und diese dann an eine "Web-DB" wie ThingSpeak (www.thingspeak.com) schickt, DBs wie diese sind genau dafür gemacht. - auf Thingspeak.com kannst Du Dir die Graphen zu Deinen Messwerten direkt ansehen oder Du kannst es wiederum mit anderen Scripts per API abfragen - auf diese Weise steuere ich Luftbefeuchter: Script auf dem Raspberry Pi holt den letzten Wert für das Schlafzimmer. Wenn der <40% Luftfeuchtigkeit ist, dann schalte ich eine Funksteckdose ein, wenn darüber, dann wieder aus. - die Funksteckdose wird auch von der Atmega-Schaltung angesteuert, der Raspberry Pi schickt über die serielle Schnittstelle den Befehl zum Schalten einer Funksteckdose D.h. ich brauche hierfür kein TCP/IP, das erledigt der Raspberry Pi. Und ich brauche auf dem keine Datenbank, das wäre mir zu pflegeaufwändig. Man könnte sich aber dort auch selber eine DB einrichten, MySQL zum Beispiel. Mit Python ist es sicher nicht schwierig auf eine MySQL-DB zuzugreifen. Viele Grüße, Conny
cyblord ---- schrieb: > Halte dich an die Webserver/PHP Methode, das könnte klappen. Den TCP/IP > Stack brauchst du halt noch auf deinem AVR. Bevor das nicht steht, würde > ich mir um höhere Schichten erstmal keine Gedanken machen. Lass das lieber mit dem Netzwerk auf dem AVR. Mach es per serieller Schnittstelle.
Conny G. schrieb: > cyblord ---- schrieb: >> Halte dich an die Webserver/PHP Methode, das könnte klappen. Den TCP/IP >> Stack brauchst du halt noch auf deinem AVR. Bevor das nicht steht, würde >> ich mir um höhere Schichten erstmal keine Gedanken machen. > > Lass das lieber mit dem Netzwerk auf dem AVR. Mach es per serieller > Schnittstelle. er hat doch schon Netzwerk: > I/O Net Board kann doch nicht so schwer sein, damit einfach ein UDP Packet mit den Messwerten abzuschicken.
Conny G. schrieb: > cyblord ---- schrieb: >> Halte dich an die Webserver/PHP Methode, das könnte klappen. Den TCP/IP >> Stack brauchst du halt noch auf deinem AVR. Bevor das nicht steht, würde >> ich mir um höhere Schichten erstmal keine Gedanken machen. > > Lass das lieber mit dem Netzwerk auf dem AVR. Mach es per serieller > Schnittstelle. Einfach so per serielle Schnittstelle wird wohl schwierig, da müsste das Ding ja neben dem PC stehen. Und es wird einen Grund geben, wenn explizit nach Netzwerk gefragt wird und ein NetIO Board verwendet wird. Und deine Methode geht auch übers Netzwerk, nur hast du einen RasPi dazwischen. Das ist mit Kanonen auf Spatzen geschossen. Wenn dann würde ich einen integrierte Netzwerkbaustein nehmen, welcher direkt per z.B. per SPI angesteuert werden kann und den Stack integeriert hat. Der ENC auf dem netIO ist einfach zu unhandlich und umständlich. > kann doch nicht so schwer sein, damit einfach ein UDP Packet mit den > Messwerten abzuschicken. 1. Wohin? Ein Webserver benötigt eigentlich TCP. Dann muss man die Gegenstelle auch noch selber programmieren. 2. Der ENC Baustein kann nur MAC. Dann fehlt dir noch die ganze IP Schicht, inkl. ARP usw. Selbst wenn du dann NUR noch UDP oben drauf setzt. Erst mal machen dann behaupten es wäre so einfach. gruß cyblord
Peter II schrieb: > kann doch nicht so schwer sein, damit einfach ein UDP Packet mit den > Messwerten abzuschicken. Das Problem ist, dass man zum Net-Io nur so ein schwindliges Programm mitbekommt. Und noch nicht mal das in Source Code Form. Wenn sie wenigstens den Source Code für einen einfachen UDP/TCP Stack mitliefern würden oder irgendwo downloadbar hätten. Eine andere Variante würde es noch geben: Das auf dem Net-IO mitgelieferte Programm funktioniert grundsätzlich. D.h. man kann mittels TELNET (auf einem anderen Port) oder einem Terminal-Programm welches man auf eine IP/Port Kombination ansetzen kann, auf den Net-IO zugreifen und mittels ASCII Kommandos den Status von Port-Pins oder Analogen Eingängen abfragen. Dann müsste man die Steuerung des kompletten Vorgangs auf dem Server-Rechner machen. Der Net-IO ist dann nur ein passiver Teilnehmer im Netzwerk, der PC macht die laufende Abfrage des Sensors und trägt das in die Datenbank ein. Grundsätzlich machbar wäre das schon. Dann läuft eben auf dem PC ein Programm, welches alle 30 Sekunden den Messwert vom Net-IO erfragt und weiter verarbeitet.
Miriam schrieb: > ich habe bereits fundierte Kenntnisse beim programmieren von > Microcontrollern. Nein, hast du nicht. Suche dir erstmal eine Datenbank aus. Dann suchst du dir zu dieser Datenbank raus, wie man sie anspricht. Und DANN überlegst du dir, wie man da rangehen könnte. Dazu benutzt du am besten eine Internet-Suchmaschine deiner Wahl.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.