Hallo, ich beschäftige mich hobbymäßig mit µC, besitze jedoch fundierte Kenntnisse über TCP / IP (soll heißen, ich weiß wie die Kommunikation abläuft und kann mit Netzwerkbegriffen was anfangen). Bisher habe ich einige Kleinigkeiten mit den Controllern gemacht (alles in C), wie - LEDs blinken - Tasterabfragen - ADC (intern) - Displays ansteuern (HD44780) - UART Kommunikation (Text an den PC senden via Tastendruck) - alles Kombiniert und mit sinnvollem Hintergrund (Temperaturauswertung) Gerne würde ich jetzt mit Netzwerktechnik weitermachen. HTML, CSS und PHP beherrsche ich sehr gut und somit kann ich meine Steuerseite selbst schreiben. Was ich vor habe: Ich würde gerne die im Betreff genannten Controller via Netzwerk steuern, also Signale vom PC (Windows!!) zum µC und vom µC zum PC übertragen. Dafür habe ich mir ein "ENC28J60 Ethernet LAN Netzwerk Modul" gekauft (bestehend aus ENC28J60 und rj45 Buchse). Ich möchte damit beginnen LEDs über eine Webseite ein- und auszuschalten (das ganze soll dann über LAN und µC angesteuert werden). Hat jemand damit Erfahrung? Die Projekte von Ullrich Radig sind mit bekannt (Webserver) - jedoch übersteigen diese meine Erfahrungen und ich möchte nicht nachbauen, sondern selber lernen. Meine Fragen: - Ich benötige, um das zu realisieren zwanghaft einen Webserver, richtig? - Wie binde ich die Webseite in mein C-Programm ein, sodass Ausgänge gesetzt werden, je nach Eingabe auf der Website? - Gibt es !deutsche! Tutorials zu Netzwerktechnik mit AVRs (selbst keine gefunden)? - Ist das Ziel eurer Meinung nach zu ehrgeizig oder bin ich Aufgrund beschriebner Vorkenntnisse bereit dafür? Danke, Dürk
Dürk schrieb: > - Ich benötige, um das zu realisieren zwanghaft einen Webserver, > richtig? Ja. > - Wie binde ich die Webseite in mein C-Programm ein, sodass Ausgänge > gesetzt werden, je nach Eingabe auf der Website? Die Seite wird "dynamisch" gestaltet, indem im HTML-Quellcode die variablen Daten markiert werden und beim Ausgaben durch den Mikrcontroller durch die anzuzeigenden Werte ersetzt werden. Eingaben erfolgen wahlweise per POST- oder GET-Methode. > - Gibt es !deutsche! Tutorials zu Netzwerktechnik mit AVRs (selbst keine > gefunden)? Der Quellcode von Ulrich Radig ist gut kommentiert. > - Ist das Ziel eurer Meinung nach zu ehrgeizig oder bin ich Aufgrund > beschriebner Vorkenntnisse bereit dafür? Lade dir ein funktionierenden Quellcode herunter, bring ihn zum Laufen und analysiere ihn.
Dürk schrieb: > Was ich vor habe: Ich würde gerne die im Betreff genannten Controller > via Netzwerk steuern, also Signale vom PC (Windows!!) zum µC und vom µC > zum PC übertragen. [...] > Meine Fragen: > - Ich benötige, um das zu realisieren zwanghaft einen Webserver, > richtig? Nein, natürlich nicht. Den benötigst du nur dann, wenn du zwanghaft als Client einen Webbrowser verwenden möchtest. > - Ist das Ziel eurer Meinung nach zu ehrgeizig oder bin ich Aufgrund > beschriebner Vorkenntnisse bereit dafür? Bist du nicht. 1) Wärest du es, würdest du hier nicht fragen müssen, ob du es bist, sondern wüßtest selber, DASS du es bist. 2) Hast du eigentlich bereits selber erkannt, daß du es nicht bist, als du festgestellt hast, daß du den Code von Herrn Radig nicht zu deuten vermagst. Der ist nämlich recht ordentlich geschrieben und dementsprechend einfach nachzuvollziehen, insbesondere, wenn man die Netzwerkgrundlagen bereits beherrscht! Sogar für Leute wie mich, die ein eher gespanntes Verhältnis zur von Herrn Radig verwendeten Programmiersprache haben...
Ist zwar nicht auf deutsch, aber für Anfänger sehr hilfreich: http://www.lucadentella.it/en/category/enc28j60-arduino/page/2/ Am besten mit der Lektion 1 anfangen... Und natürlich geht es auch wireless (z.B. nach HLK-RM04 suchen).
Dürk schrieb: > HTML, CSS und PHP beherrsche ich sehr gut und somit kann ich meine > Steuerseite selbst schreiben. PHP wirst du auf einem AVR aber kaum zu laufen bekommen. Ich persönlich halte viele der Netzwerkprojekte auf Basis von AVRs für einen Griff ins Klo bzw. schlichtweg für ein Proof-of-Concept mit dem man in der Praxis nicht viel anfangen kann. Arduino-Netzwerk Shields z.B. kosten im Endeffekt so viel wie einfache Linux Boards (Raspberry Pi) und auch das Netzwerk Board von Pollin ist nicht viel billiger. Daher ist meine Empfehlung ganz klar: Setzte auf einen Raspberry Pi (oder etwas ähnliches): Dort läuft ein vollwertiger Netzwerkstack, der getestet ist und viel flexibler ist als irgendetwas das man mal eben selbst machen könnte (bzw. die Hardware für einen übernimmt). Des Weiteren hat man auch viel mehr Möglichkeiten in Bezug auf die eingesetzten Technologien. PHP wäre hier überhaupt kein Problem. Andererseits eignet sich ein Raspberry Pi natürlich nicht für alles, insofern könnte es Sinn machen noch einen echten Mikrocontroller nach zu schalten, der dann die eigentlichen Steueraufgaben übernimmt. Das Beaglebone Black (BBB) z.B. hätte auch diese gleich an Board. Mit freundlichen Grüßen, Karol Babioch
Der ATtiny ist mit Sicherheit zu klein für dein Projekt. Auch den ATMega32 würde ich nicht verwenden. Nimm den ATMega1284. Der passt in die gleiche Fassung wie der ATMega32 und bietet hinreichend RAM. Und das brauchst du. Ansonsten kann ich dir auch nur empfehlen, einen der vorhandenen Webserver (Radig, Ethersex und viele mehr) zu nehmen und zu modifizieren.
Hallo, Hannes hat ein *SPI-Netzwerkadapter Wiznet W5500* entwickelt und lauffähige Beispiele auf seine Webseite. http://www.ehajo.de/baus%C3%A4tze/bedrahtete-baus%C3%A4tze/spi-netzwerkadapter-wiznet-w5500.html Die Vorteile eines W5500 gegenüber dem ENC28J60 ergeben sich schnell.
:
Bearbeitet durch User
hallo nochmals, danke euch für die Antworten. Soweit ich das verstanden habe ist Arduino eigentlich ein auf avr besierendes System, oder nicht? Also müsst alles was ein Arduino kann, doch auch (mit viel Aufwand, mir geht es nur ums Prinzip) mit einem avr realisiert werden können?! Raspberry Pi ist für mich schon zu umfangreich und ich will kein Linux als Kernel. Ich weiß, ich habe spezielles vor, aber bei einer Lösung von der Stange wäre ich nicht hier. Der Pi ist wie gesagt wegen Linux keine Option für mich. Wegen dem Code von Radig - ihr meint schon diesen hier oder?: http://www.ulrichradig.de/home/uploads/File/ETH_M32_EX/ETH_M32_EX_SOFT.zip (bzw. sehe ich die Sache vieleicht zu komplex? - welche Files davon muss ich betrachten?) Dürk
Dürk schrieb: > Also müsst alles was ein Arduino kann, > doch auch (mit viel Aufwand, mir geht es nur ums Prinzip) mit einem avr > realisiert werden können?! Ja, und so viel Aufwand ist das i.d.R. gar nicht. Dürk schrieb: > Der Pi ist wie gesagt wegen Linux keine Option für mich. Und was genau spricht gegen Linux? Ich sehe einen wesentlichen Vorteil: Ein ausgereifter Netzwerkstack mit einer Menge an mächtigen Programmen, die sich im Handumdrehen installieren und einrichten lassen. AVRs (oder andere Mikrocontroller) sind in Bezug auf Netzwerk immer Murks und stoßen viel zu schnell auf ihre Grenzen. Mit freundlichen Grüßen, Karol Babioch
Georg G. schrieb: > Der ATtiny ist mit Sicherheit zu klein für dein Projekt. So wie er es angeht: Sicher. Ein kleiner Webserver auf einem Tiny ist zwar nicht unmöglich, aber trotzdem einfach mal nur Quatsch. Und auf jeden Fall absolut kein Projekt für einen Anfänger. Aber ein kleiner UDP-Client, der seine paar Meßwerte per Broadcast in's LAN plärrt, ist wirklich sehr einfach umsetzbar. Der braucht nämlich keinen Netzwerkstack im eigentlichen Sinne, sondern nur vor seinem Meßwert-Geraffel ein paar konstante Header in den Sendepuffer des Netzwerkchips schreiben.
c-hater schrieb: > Der braucht nämlich > keinen Netzwerkstack im eigentlichen Sinne, sondern nur vor seinem > Meßwert-Geraffel ein paar konstante Header in den Sendepuffer des > Netzwerkchips schreiben. Und, sofern das Ganze halbwegs flexibel und robust sein soll auch noch DNS, DHCP und NTP. Darüber hinaus gibt es noch einige RFCs, die man lieber einhalten sollte, wenn man netzwerkfähige Geräte/Applikationen baut. Mit freundlichen Grüßen, Karol Babioch
Hallo Dürk, Ich will sowas ähnliches machen. Allerdings würde ich gerne Analogwerte in eine Datenbank schreiben. Vielleicht könnte man sich austauschen. Viele Grüße
> Vielleicht könnte man sich austauschen.
Mit wem? Mit Dürk der das auch nicht kann;)
Karol Babioch schrieb: > Und, sofern das Ganze halbwegs flexibel und robust sein soll auch noch > DNS, DHCP und NTP. Um per UDP-Broadcast was in's LAN zu plärren, braucht man exakt keines der genannten Protokolle. DNS? Es gibt keinen Server, dessen IP zu ermitteln wäre. DHCP? Dat Teil kriegt einfach eine konstante IP außerhalb des DHCP-Bereichs. Genauso, wie man das auch für Server im LAN handhabt. NTP? Was soll der Tiny mit der Zeit? Der plärrt seine Meßwerte raus und gut ist. Die Meßwerte einer Zeit zuzuordnen kann der geneigte Empfänger selbst erledigen. Er weiß mit Sicherheit, daß das Datenpaket nicht älter als einige wenige ms sein kann, wenn er es empfängt. Das dürfte für die allermeisten, für einen Tiny sinnvollen Anwendungen mehr als ausreichend genau sein.
Dürk schrieb: > Ich weiß, ich habe spezielles vor, aber bei einer Lösung von der Stange > wäre ich nicht hier. Du hast nichts spezielles vor. Das Rad ist schon n-mal erfunden worden, und es gibt fertige Bausteinlösungen, die genau das machen, was Du vor hast, und letztendlich aus nur einem einzigen Chip für 3.50€ bestehen. Sieht dann so aus: Beitrag "Re: Günstigstes Web I/O" Schau hier im Forum, das ist schon n-mal durchdiskutiert worden. Und ja, C und Englisch sind unverzichtbare Grundlagen. Die müssen einfach sitzen, sonst wird das nix. fchk
Wenn du wirklich etwas eigenes entwickeln möchtest oder einen vorhandenen Stack modifizieren möchtest, solltest du dir darüber im Klaren sein, dass das Debugging nicht mit drei printf erledigt ist. Der Umgang mit Wireshark sollte dir geläufig sein. Und gute Kenntnisse der niederen Netzwerkebenen sollten auch vorhanden sein. In der Ecke gibt es viele tiefe Schlammpfützen.
Das Thema klingt sehr interessant für mich. Wie genau plärre ich denn etwas per UDP? Wie stellst du dir das Verfahren denn vor? Ich benötige dennoch ein TCP/IP Protokoll. c-hater schrieb: > Um per UDP-Broadcast was in's LAN zu plärren, braucht man exakt keines > der genannten Protokolle. Ich möchte selbst folgende Anwendung versuchen: Controller mit dem ENC28J60 soll mit Treiber und Relais ein Licht schalten. Steuerung habe ich mir auch über ein Browserbasiertes Webformular vorgestellt. Gibt es hierfür fertige header? Projekt oder vergleichbares?
>Gibt es hierfür fertige header? Projekt oder >vergleichbares? Solche Fragen können nur komplett Ahnungslose stellen. Es gibt kein Ethernet für Dummies. Das ist harte Arbeit. Der Code von Ulrich ist der einfachste den du finden wirst. Versteh ihn oder vergiss es.
Stephan J. schrieb: > Wie genau plärre ich denn etwas per UDP? Broadcast sind meiner Meinung nach eine ziemlich doofe Idee für diesen Anwendungsfall und werden - je nach Firewalleinstellungen - auch direkt verworfen. Stephan J. schrieb: > Steuerung habe ich mir auch über ein Browserbasiertes > Webformular vorgestellt. Das setzt dann also schon einmal HTTP voraus. HTTP wiederum setzt auf TCP und damit hat sich die Sache mit UDP erledigt. Sinnvoll wären dann sicherlich auch dynamische Skriptsprachen wie PHP, python & Co. Alles nicht möglich mit einem Mikrocontroller. Idealerweise würde es auch noch Sinn machen das Ganze zu verschlüsseln (bzw. eine authentische Verbindung mittels SSL/TLS aufbauen), und auch das macht mit einem Mikrocontroller keinen Spaß. Spätestens dann ist auch DNS und NTP sinnvoll ;). Und klar kann man feste IP Adresse vergeben, nur ist das halt nicht wirklich flexibel, vor allem, wenn es am Mikrocontroller selbst keine Einstellungsmöglichkeiten gibt, und man damit zum Neuprogrammieren des Flash- bzw. EEPROM-Speichers gezwungen ist. Alles in Allem: Netzwerk mit 8-bit Mikrocontrollern ist ein Krampf. Ja, es mag funktionieren, aber man kann sich das Leben auch deutlich einfacher machen, zumal "echte" Netzwerklösungen wie eben der Raspberry Pi ungefähr genauso viel kosten wie irgendwelche Netzwerkshields für Arduinos. Mit freundlichen Grüßen, Karol Babioch
:
Bearbeitet durch User
Hi >Es gibt kein Ethernet für Dummies. Das ist harte Arbeit. Gibt es. Wurde doch schon angesprochen: Beitrag "Re: Netzwerk mit ATtiny13 oder ATMega32" Andere Module von WIZNET gibt es hier: http://www.watterott.com/de/Schnittstellen/Ethernet MfG Spess
Hi
>Alles in Allem: Netzwerk mit 8-bit Mikrocontrollern ist ein Krampf.
Geht mit den WIZNET-Teilen problemlos sogar unter Assembler.
MfG Spess
Ich finde die kleinen MikroController für solche Aufgaben gar nicht geeignet. vor allem wenn man da etwas "Sinnvolles" aufbauen will. Klar geht es irgendwie einen Webserver auf einem AVR zum laufen zu bekommen, aber das alles nur um einen etwas per Browser steuern zu können. Ich denke es ist in den meisten Fällen das beste, einen Pi oder in einigen Fällen kann auch ein OpenWRT-Router reichen. Dadurch hat man seine Weboberfläche und von dort aus, geht es mit einem simpleren BUS weiter zu den MikroControllern. Eine skriptgestützete Website, so sie denn zum laufen bekommen wird auf einem kleinen AVR zu hosten, wird ja bei der Benutzung keine Freudensprünge auslösen :-D Gruß, Stefan
spess53 schrieb: > Geht mit den WIZNET-Teilen problemlos sogar unter Assembler. Dann hast du die Quintessenz meines Textes nicht verstanden. Ich habe nie bestritten, dass das geht. Für jemanden, der an Konzepten bzw. der Materie an sich interessiert ist, mag das auch eine schöne Übung sein. In allen anderen Fällen gibt es deutlich mächtigere Lösungen für deutlich weniger Geld. Ansonsten warte ich einfach bis jemand einen vernünftigen Webserver mit Unterstützung für dynamische Skriptsprachen (PHP, Python, etc.) samt SSL/TLS in einem 8 kB Mikrocontroller unterbringt. Mir scheint es fast so, dass jeder der mal mit einem Mikrocontroller ein "ping" abgesetzt ist, sich als Netzwerkprofi ansieht und der Meinung ist, dass irgendwelche Netzwerk-Stacks in Hardware (Wiznet) auch nur im Ansatz vergleichbar wären mit einem vollwertigen Linux-Netzwerkstack - und das nicht Vorhandensein von "vernünftigen" Dämonen (SSH, NTP, Webserver, etc. pp.) wird auch schlichtweg unterschlagen. Mit freundlichen Grüßen, Karol Babioch
Stephan J. schrieb: > Wie genau plärre ich denn etwas per UDP? Wie stellst du dir das > Verfahren denn vor? Ich benötige dennoch ein TCP/IP Protokoll. Nein. Du benötigst genau drei Protokolle: MAC, IP und UDP. Und die bestehen einfach nur darin, daß jeweils ein kleiner Header vor die eigentlichen Nutzdaten geschrieben wird. Der prinzipielle Aufbau einer Nachricht ist also: |MAC-Header|IP-Header|UDP-Header|Payload| Und da bei Broadcasts sowohl auf MAC-Level als auch auf IP-Level sowohl Absender- als auch Empfängeradresse konstant sind und auch deine Meßwert-Records sinnvollerweise eine konstante Länge besitzen, sind auch diese Header (weitgehend) konstant. Ausnahmen sind die Prüfsummenfelder in den Headern, die vom Payload abhängen, die müssen natürlich berechnet werden. Viele NIC-Chips helfen aber dabei auch noch. > Controller mit dem ENC28J60 soll mit Treiber und Relais ein Licht > schalten. Steuerung habe ich mir auch über ein Browserbasiertes > Webformular vorgestellt. Das ist was völlig anderes. Die oben dargestellte Minimallösung ist dafür nicht geeignet, aber sie ist dafür geeignet, die Sensoren eines im LAN verteilten Sensornetzes zu betreiben und ermöglicht es deshalb, den Aufwend für die Sensoren so gering zu halten, daß auch ein kleiner Tiny geht. Natürlich muß es dann irgendwo im gleichen LAN eine Instanz geben, die die Meßwerte empfängt und speichert. Dafür braucht man ohnehin mehr Power, und dort könnte dann auch ein richtiger Stack laufen, der den Betrieb eines Webservers ermöglicht.
ass den Überbau ganz weg und beschränk dich auf den low_level-Teil z.B. vom Radig-Webserver. Du hast dann gerade zwei Funktionen: buffer_read und buffer_write. In den buffer schreibst du deine Header. per udp kannst du mit diesen beiden Funktionen ganz elementar Daten austauschen. Wenn das funktioniert, kannst du das ganze nach und nach erweitern.
Ich habe mit einem Arduino und einem Wiznet-Shield eine einfache IP Kommunikation aufgebaut. Dadurch, dass der Wiznet-Chip fast alles selber macht, war es kein Problem. Nach einer Stunde hatte ich etwas lauffähiges. Allerdings habe ich schon jahrelang Netzwerkprogrammierung auf verschiedensten Ebenen gemacht, kenne also die Details schon. Dem Dürk würde ich vorschlagen, erst einmal alles mit 2 PCs zu machen. Darauf kleine Programme schreiben, die sich unterhalten. Den erzeugte Verkehr sich dann auch einmal mit Wireshark anschauen. Dann bekommt man ein Gefühl, was alles notwendig ist, und wie das funktioniert.
Eine sehr einfache Einführung gut erklärt findest du hier: http://www.lucadentella.it/en/2012/08/10/enc28j60-e-arduino-7/ Ich, als absoluter "newbie", hab das dort angegebene Beispiel in einer Stunde mit Arduino Uno Mini und dem ENC-Chip implementieren können...
spess53 schrieb: > Hi > >>Alles in Allem: Netzwerk mit 8-bit Mikrocontrollern ist ein Krampf. > > Geht mit den WIZNET-Teilen problemlos sogar unter Assembler. Widerlegt ja nun die Aussage NICHT. Das Wiznet Modul ist wohl kein 8-Bitter und wenn doch kanns einem egal sein, weil schon fertig. Da haben sich halt andere den Krampf gegegeben.
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.