Forum: Mikrocontroller und Digitale Elektronik Messwert in Datenbank abspeichern


von Miriam (Gast)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

was für eine Datenbank?
wo soll die Datenbank laufen?
welchen "Verbindung" gibt es vom Messwertsystem zum Datenbanksystem?
welche Datenmengen müssen übertragen werden?

von Cyblord -. (cyblord)


Lesenswert?

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.

von Miriam (Gast)


Lesenswert?

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

von Cyblord -. (cyblord)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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)

: Bearbeitet durch User
von Miriam (Gast)


Lesenswert?

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

von Cyblord -. (cyblord)


Lesenswert?

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

: Bearbeitet durch User
von Miriam (Gast)


Lesenswert?

das muss ich auch noch implementieren :-(
oder du suchst dir einen fertigen Client für den AVR -> was meinst du 
damit?

von Peter II (Gast)


Lesenswert?

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.

von Miriam (Gast)


Lesenswert?

ok, gibt es dafür ein Buch
sowas hör ich zum ersten mal

von Peter II (Gast)


Lesenswert?

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).

von Cyblord -. (cyblord)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

: Bearbeitet durch User
von Stefan B. (sibbl) Benutzerseite


Lesenswert?

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 ;-)

: Bearbeitet durch User
von Dominik R. (vision)


Lesenswert?

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.

: Bearbeitet durch User
von Conny G. (conny_g)


Lesenswert?

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

von Conny G. (conny_g)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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.

von Cyblord -. (cyblord)


Lesenswert?

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

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

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.

: Bearbeitet durch User
von Svenska (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.