Forum: Mikrocontroller und Digitale Elektronik Microcontroller Log Auf Server HTTP und TCP Implementierung wie?


von Tobias K. (tobik91)


Lesenswert?

Hi!
Erstmal kurz zu meiner Projektidee:
ICh will auf Basis des Polin AVR NET IO, der RFID Platine von Polin und 
einem Funkmodul sowie einigen Sensoren eine kleine Homeautomatisierung 
mit Alarmanlage bauen.
Falls das Klappt kommen noch einige features dazu.

Grundprinzip (so soll es Funktionieren):
AVR NET IO Als Zentrale, hier sind div. Sensoren angeschlossen.
das AVR NET IO überträgt alle 5 Sekunden die Daten zu einem Webserver 
via GET oder POST (HTTP, auf eine Domain => HTTP; DNS; TCP; IP, Ethernet 
müssen hierfür Implementiert werden)
beim Senden der Sensordaten via HTTP an ein PHP script auf dem Server 
bekommt das NET IO dann eine txt-datei zurück (also wie im Browser 
gesehen) mit Infos für das NET IO, z.B. Text für das Display im RFID 
Modul, eine liste von Variablen wie z.B. die Weckzeit für den nächsten 
Tag, Termine, die im Display gezeigt werden etc.

Dann gibt es eben das RFID Modul (ATiny) mit einem Display und einem 
RS232 out, das für die Zugriffskontrolle zuständig ist: Sendet 
RFID-Zeichenketten dem anderen Mikrocontroller und bekommt in 
regelmäßigen abständen texte, die dann im Display gezeigt werden sollen.

Jetzt meine Fragen:
1. Wo finde ich Infos darüber, wie ich HTTP, TCP, IP etc. implementieren 
kann, dass ich Infos via HTTP-GET oder POST an meinen Webserver 
übertragen kann und die resultierende Datei z.B. im EEPROM 
Zwischenspeichern kann
2. Wie verbinde ich den ATiny auf dem RFID Board mit dem ATMega auf dem 
NET-IO, dass diese miteinander Infos wie z.B. den Displaytext 
austauschen können?

3. KANN ich überhaupt auf dem Polin AVR NEt IO gleichzeitig Daten mit 
einem anderen Prozessor austauschen und via Netzwerk Daten 
schicken/empfangen

von Björn C. (bjoernc) Benutzerseite


Lesenswert?

Hallo, also zum AVR-Net IO kann ich im speziellem nichts zu sagen. Aber 
was meines erachtens zu probelemen führen kann, ist die HTTP-GET / POST 
geschichte. So wie ich das verstehe möchtest du einfach "Nur" Daten von 
a nach b schicken auf einem Webserver. Wobei mir schleierhaft ist, ob 
der uC nun client oder server sein soll - vll. verstehe ich dich auch 
falsch.

Aber den uC als HTTP-Client zu nutzen - naja ist sehr ungewöhnlich vor 
allem weil du dann replika (in einer vereinfachten Form) handeln musst. 
Ansonsten als Server ja ok kann funktionieren, einfache GET und POST 
geschichten funktionieren - aber den gesamten Funktionsumfang wirst du 
unter garantie nicht in einem AVR implementiert bekommen.

Ansonsten wenns wirklich nur um das transferieren der Daten geht, würde 
ich wohl ein eigenes Protokoll dafür schreiben, das natürlich über TCP 
oder halt UDP je nachdem läuft. Hat den vorteil das du kein workaround 
benötigst wie die text-Datei. Du bist darüber hinaus in der Lage, den 
Overhead der Daten möglichst gering zu halten - aber auch da musst du 
genauer schauen was nacher das Bottleneck sein wird - zu 99%iger 
Sicherheit ists der AVR also musst du den Rechenaufwand moderat halten.

Zum zweiten wie du nun den Tiny und den Mega mit einander verbindest - 
naja das ist dir doch selbst überlassen sprich I2C oder RS232 oder SPI 
würde sich da anbieten - wenn das RFID Board schon vorgefertigt ist, 
solltest du mal das DB lesen dort wird bestimmt stehen mit welcher 
Schnittstelle das ganze angesteuert werden kann.

Desweiteren wirst du unter dem folgenden Link mehr über HTTP finden:
http://www.ietf.org/rfc/rfc2616.txt

Ich hoffe ich konnte dir mit dieser Antwort ein wenig weiterhelfen.

von helfer (Gast)


Lesenswert?

1. In den RFCs, oder du verwendest bestehende Bibliotheken dafür, zB die 
von Rading.

2. zB mittels UART oder TWI

3. Jein, den Ethernet Teil übernimmt ja der ENC Chip. Hauptproblem 
dürfte eher das SRAM sein.

von Tobias K. (tobik91)


Lesenswert?

Der uC soll Client sein.

Ich hab einen webspace, daher ist auch kein anderes Protokoll möglich.

Es geht lediglich darum, alle 5 Sekunden eine get Anfrage an den server 
zu schicken mit den aktuellen Sensorwerten und die Antwort zum Teil auf 
dem Display darzustellen.

von Volker S. (volkerschulz)


Lesenswert?

Tobias Keller schrieb:
> Der uC soll Client sein.

Dann schau Dir, wie schon erwähnt, den TCP/IP Stack von Ulrich Radig an. 
Und/oder Ethersex. Und die Suche hier im Forum dürfte auch schon ein 
ganzes Stück weiterhelfen.


> Ich hab einen webspace, daher ist auch kein anderes Protokoll möglich.

Das geht durchaus. Wenn Du den Webserver als Client benutzt, sogar ohne 
Änderungen am NET-IO...


Volker

von Tobias K. (tobik91)


Lesenswert?

Den Stack von Ulrich Radio hab ich mir angeschaut, er hat auch einen 
HTTP Klienten (Wetterabfrage) implementiert. Jedoch bekomme ich den 
Radig Server nicht auf den Prozessor, die Datei ist kompiliert 172kb 
groß, was kann ich hier falsch machen? Ich hab doch sogar Teile des 
Systems gelöscht (httpd, ntp, 1wire etc) und trotzdem kann ich die Datei 
irgendwie nicht auf den Mikrocontroller (ATMega32) flashen.
Wenn ich es doch noch irgendwie schaffe, dieses Programm auf den Mega32 
zu flashen, dann wäre ich schon einen großen schritt weiter.

Wenn ich den uC als Server verwende, muss ich aber auch Portforwarding 
im Router aktivieren und einen dyndns einrichten, damit mein Webspace 
auch darauf zugreifen kann.

von Purzel H. (hacky)


Lesenswert?

Die Idee ist schlecht. Das Projekt zu klotzig. Was machbar waere... eine 
abgespeckte Version. Das TCP/IP wird einfacher, wenn die Meldungsgroese 
kleiner wie der Buffer des Ethernet ist. Dann sendet man einfach 
Meldungen wie : GET /index.html?S=1234&V=1234 Dann muss man noch den 
Server dazu bringen diese Anfragen auf die Disk zu schreiben. Was auch 
immer vom Server zurueck kommt interessiert nicht und wird verworfen. Dh 
eigentlich braucht man keinen TCP/IP Stack.

von Tobias K. (tobik91)


Lesenswert?

ähm, dass ein Webserver eine Anfrage annimmt, braucht man aber das syn 
ack etc... also braucht man doch TCP, und doch, die Antwort des Servers 
interessiert, da der Webserver ja das schickt, was dann auf einem 
Display angezeigt werden soll.

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.