hubert
04.01.2016, 16:20 |
Arduino (Netzwerktechnik) |
Hallo an die FAN-Gemeinde
ich war schon mal hier wegen meinem
ARDUINO Ethernet Shield 2
kann mir jemand bitte sagen was ich tun muss um ein Register über LAN auszulesen und setzen zu können.
Mein Testprogramm ist mit Assembler geschrieben.
Bin beim Googeln nicht weiter gekommen |
bastelix
04.01.2016, 21:40
@ hubert
|
Arduino |
» Hallo an die FAN-Gemeinde
» ich war schon mal hier wegen meinem
» ARDUINO Ethernet Shield 2
» kann mir jemand bitte sagen was ich tun muss um ein Register über LAN
» auszulesen und setzen zu können.
» Mein Testprogramm ist mit Assembler geschrieben.
»
» Bin beim Googeln nicht weiter gekommen
Hast du dir mal in der Arduino-IDE die Beispiele unter Ethernet angeschaut? (Menü Datei -> Beispiele -> Ethernet) Da z.B. das ChatServer-Beispiel?
Im Prinzip kannst du den Beispiel-Code so anpassen, dass er ankommende Nachrichten nicht nach Serial schreibt sondern parst und den wert anderweitig verarbeitet, z.B. in ein Register schreibt oder ein Register ausliest und das als Antwort an den Client zurückschickt. Zum testen kannst müsste eigentlich telnet reichen um via Netzwerk mit dem Arduino zu sprechen. |
hubert
04.01.2016, 22:04
@ bastelix
|
Arduino |
Danke für den Hinweis,
den Webserver hab ich nun schon getestet
kannst du mir bitte noch sagen, was zu tun ist, wenn man z.B Port D aus Ausgang stellen und setzen oder rücksetzen möchte.
Habe die Datei Ports für den include nicht gefunden.
» » Hallo an die FAN-Gemeinde
» » ich war schon mal hier wegen meinem
» » ARDUINO Ethernet Shield 2
» » kann mir jemand bitte sagen was ich tun muss um ein Register über LAN
» » auszulesen und setzen zu können.
» » Mein Testprogramm ist mit Assembler geschrieben.
» »
» » Bin beim Googeln nicht weiter gekommen
» Hast du dir mal in der Arduino-IDE die Beispiele unter Ethernet angeschaut?
» (Menü Datei -> Beispiele -> Ethernet) Da z.B. das ChatServer-Beispiel?
»
» Im Prinzip kannst du den Beispiel-Code so anpassen, dass er ankommende
» Nachrichten nicht nach Serial schreibt sondern parst und den wert
» anderweitig verarbeitet, z.B. in ein Register schreibt oder ein Register
» ausliest und das als Antwort an den Client zurückschickt. Zum testen kannst
» müsste eigentlich telnet reichen um via Netzwerk mit dem Arduino zu
» sprechen. |
bastelix
04.01.2016, 22:21
@ hubert
|
Arduino |
» Danke für den Hinweis,
»
» den Webserver hab ich nun schon getestet
»
» kannst du mir bitte noch sagen, was zu tun ist, wenn man z.B Port D aus
» Ausgang stellen und setzen oder rücksetzen möchte.
»
» Habe die Datei Ports für den include nicht gefunden.
Die müssten via arduino.h kommen, die von der IED automatisch eingebunden wird. Selber hab ich Ports noch nie direkt verwendet, aber hier wäre ne ausführliche Beschreibung (auf englisch) https://www.arduino.cc/en/Reference/PortManipulation
Wenn ich das richtig sehen, dann reicht es für Port D einfach auf die Register zuzugreifen:
DDRD - The Port D Data Direction Register - read/write
PORTD - The Port D Data Register - read/write
PIND - The Port D Input Pins Register - read only
DDRD = DDRD | B11111100; // setzt pins 2 bis 7 als output
PORTD = B10101000; // setzt pins 7,5,3 auf HIGH
Wenn dir die Doku nicht weiterhilft (weiß nicht wie gut du englisch sprichst) einfach nochmal melden. |
hubert
05.01.2016, 17:05
@ bastelix
|
Arduino |
Hallo Bastelix,
danke für deine Hilfe
zugegeben, mein deutsch ist besser als mein englisch
die ports hab ich nun verstanden, denke ich mal!
ich bin nun mittlerweile vom Webserver abgekommen
wegen des Speicherplatzes
ich hab nun einen anderen Plan
über vb.net möchte ich den Arduino ansteuern und einzelne Eingänge bzw. Ausgänge ansteuern u.abfragen
soll aber über tcp sein
» » Danke für den Hinweis,
» »
» » den Webserver hab ich nun schon getestet
» »
» » kannst du mir bitte noch sagen, was zu tun ist, wenn man z.B Port D aus
» » Ausgang stellen und setzen oder rücksetzen möchte.
» »
» » Habe die Datei Ports für den include nicht gefunden.
»
» Die müssten via arduino.h kommen, die von der IED automatisch eingebunden
» wird. Selber hab ich Ports noch nie direkt verwendet, aber hier wäre ne
» ausführliche Beschreibung (auf englisch)
» https://www.arduino.cc/en/Reference/PortManipulation
»
» Wenn ich das richtig sehen, dann reicht es für Port D einfach auf die
» Register zuzugreifen:
» DDRD - The Port D Data Direction Register - read/write
» PORTD - The Port D Data Register - read/write
» PIND - The Port D Input Pins Register - read only
»
» DDRD = DDRD | B11111100; // setzt pins 2 bis 7 als output
» PORTD = B10101000; // setzt pins 7,5,3 auf HIGH
»
» Wenn dir die Doku nicht weiterhilft (weiß nicht wie gut du englisch
» sprichst) einfach nochmal melden. |
bastelix
05.01.2016, 23:43
@ hubert
|
Arduino |
» Hallo Bastelix,
»
» danke für deine Hilfe
» zugegeben, mein deutsch ist besser als mein englisch
» die ports hab ich nun verstanden, denke ich mal!
»
» ich bin nun mittlerweile vom Webserver abgekommen
» wegen des Speicherplatzes
»
» ich hab nun einen anderen Plan
»
» über vb.net möchte ich den Arduino ansteuern und einzelne Eingänge bzw.
» Ausgänge ansteuern u.abfragen
» soll aber über tcp sein
Ich bin eh kein Freund von Webservern auf Mikrocontrollern. HTTP ist sehr flexibel aber um das optimal nutzen zu können braucht man schon einiges an Rechenpower auf der Server- und Client-Seite. Damit ist HTTP super geeignet um verschiedenste Dienste miteinander sprechen zu lassen aber die Hardware sollte entsprechend dimensioniert sein um das auch leisten zu können.
Ich schätze mal die ganzen Webserver auf Arduinos und so wurden entwickelt damit der Einsteiger einfach loslegen kann. Hast du einen Webserver auf dem Arduino laufen hast du den passenden Client auf jedem PC/Tablett/Smartphone schon installiert. Dafür frisst das halt extrem viel Ressourcen auf deinem Arduino.
Direkt mit TCP kommst du mit wesentlich weniger Ressourcen aus, musst dir aber den Client selber coden (oder umständlich mit Telnet oder ähnlichem rumbasteln) und dir ggf. auch selber Gedanken über Fehlerbehandlung etc. machen.
Für dein eigenes Protokoll würde ich vorerst ein einfaches Text-Protokoll vorschlagen, ähnlich den AT-Befehlssätzen. |
hubert
06.01.2016, 13:25
@ bastelix
|
Arduino |
Hallo Bastelix,
ich habe bislang noch keine Erläuterung für die include-Befehle gefunden
was bewirkt z.B. serial.print(c)?
wie kann ich z.B. 192.168.1.177:80/a1
im Arduino empfangen und auswerten?
dabei geht es in meiner Frage um den Teil /a1 um z.B den Analogwandler 1 einzulesen
ich möchte hinter den Socket die benötigte Info anhängen können
» » Hallo Bastelix,
» »
» » danke für deine Hilfe
» » zugegeben, mein deutsch ist besser als mein englisch
» » die ports hab ich nun verstanden, denke ich mal!
» »
» » ich bin nun mittlerweile vom Webserver abgekommen
» » wegen des Speicherplatzes
» »
» » ich hab nun einen anderen Plan
» »
» » über vb.net möchte ich den Arduino ansteuern und einzelne Eingänge bzw.
» » Ausgänge ansteuern u.abfragen
» » soll aber über tcp sein
»
» Ich bin eh kein Freund von Webservern auf Mikrocontrollern. HTTP ist sehr
» flexibel aber um das optimal nutzen zu können braucht man schon einiges an
» Rechenpower auf der Server- und Client-Seite. Damit ist HTTP super geeignet
» um verschiedenste Dienste miteinander sprechen zu lassen aber die Hardware
» sollte entsprechend dimensioniert sein um das auch leisten zu können.
»
» Ich schätze mal die ganzen Webserver auf Arduinos und so wurden entwickelt
» damit der Einsteiger einfach loslegen kann. Hast du einen Webserver auf dem
» Arduino laufen hast du den passenden Client auf jedem PC/Tablett/Smartphone
» schon installiert. Dafür frisst das halt extrem viel Ressourcen auf deinem
» Arduino.
»
» Direkt mit TCP kommst du mit wesentlich weniger Ressourcen aus, musst dir
» aber den Client selber coden (oder umständlich mit Telnet oder ähnlichem
» rumbasteln) und dir ggf. auch selber Gedanken über Fehlerbehandlung etc.
» machen.
»
» Für dein eigenes Protokoll würde ich vorerst ein einfaches Text-Protokoll
» vorschlagen, ähnlich den AT-Befehlssätzen. |
bastelix
06.01.2016, 22:03
@ hubert
|
Arduino |
Hallo Hubert,
» ich habe bislang noch keine Erläuterung für die include-Befehle gefunden
Wenn du die Arduino-IDE verwendest (solltest du für den Anfang) brauchst du include nur, wenn du eine Bibliothek einbinden willst. Macht dir vorerst mal keine Gedanken darüber.
» was bewirkt z.B. serial.print(c)?
Serial ist die serielle Schnittstelle. Wenn du deinen Arduino mit dem PC verbunden hast und in der IDE das Lupen-Symbol (oben rechts) klickst, geht ein neues Fenster auf das die Ausgaben von Serial anzeigt.
Serial.println("test" ; würde dann "test" in dieses Fenster schreiben.
»
» wie kann ich z.B. 192.168.1.177:80/a1
/a1 ist schon HTTP, wenn du nur über TCP kommunizieren willst musst du das anders ausführen. Ich hab mal ein Beispiel-Sketch etwas umgestrickt damit du dir den Code anschauen und etwas experimentieren kannst. Da ich kein Ethernet-Shield habe kann ich das aber nicht wirklich testen, also keine Garantie! 
Wenn du das Programm auf deinen Arduino lädst und die Konsole öffnest (Lupe oben rechts) dann schreibt das Programm ein paar Infos raus und auch welche IP zugewiesen wurde und ob das mit DHCP geklappt hat.
Via TCP kannst du mit dem Arduino kommunizieren indem du dich auf Port 23 der angezeigten IP-Adresse verbindest und einfache Text-Nachrichten hinschickst und die Antwort ausliest. Wenn es Klappt müsste der Befehl "SET131n" die LED am Arduino anschalten, "SET130n" schaltet sie wieder aus. In VB.NET müsste das mit Net.Sockets.TcpClient klappen, allerdings ist .NET bei mir schon recht lange her und ich hab auch kein Windows um das mal auszuprobieren.
Bei Fragen zum Code bitte die Zeilennummer angeben, macht die Sache einfacher.
http://www.elektronik-kompendium.de/forum/upload/20160106220338.ino |
hubert
07.01.2016, 17:41
@ bastelix
|
Arduino |
Hallo Bastelix,
erst mal vielen herzlichen Dank
ich werde es dann testen
» Hallo Hubert,
»
» » ich habe bislang noch keine Erläuterung für die include-Befehle gefunden
» Wenn du die Arduino-IDE verwendest (solltest du für den Anfang) brauchst du
» include nur, wenn du eine Bibliothek einbinden willst. Macht dir vorerst
» mal keine Gedanken darüber.
»
» » was bewirkt z.B. serial.print(c)?
» Serial ist die serielle Schnittstelle. Wenn du deinen Arduino mit dem PC
» verbunden hast und in der IDE das Lupen-Symbol (oben rechts) klickst, geht
» ein neues Fenster auf das die Ausgaben von Serial anzeigt.
» Serial.println("test" ; würde dann "test" in dieses Fenster schreiben.
»
» »
» » wie kann ich z.B. 192.168.1.177:80/a1
» /a1 ist schon HTTP, wenn du nur über TCP kommunizieren willst musst du das
» anders ausführen. Ich hab mal ein Beispiel-Sketch etwas umgestrickt damit
» du dir den Code anschauen und etwas experimentieren kannst. Da ich kein
» Ethernet-Shield habe kann ich das aber nicht wirklich testen, also keine
» Garantie! 
»
» Wenn du das Programm auf deinen Arduino lädst und die Konsole öffnest (Lupe
» oben rechts) dann schreibt das Programm ein paar Infos raus und auch welche
» IP zugewiesen wurde und ob das mit DHCP geklappt hat.
»
» Via TCP kannst du mit dem Arduino kommunizieren indem du dich auf Port 23
» der angezeigten IP-Adresse verbindest und einfache Text-Nachrichten
» hinschickst und die Antwort ausliest. Wenn es Klappt müsste der Befehl
» "SET131n" die LED am Arduino anschalten, "SET130n" schaltet sie wieder aus.
» In VB.NET müsste das mit Net.Sockets.TcpClient klappen, allerdings ist .NET
» bei mir schon recht lange her und ich hab auch kein Windows um das mal
» auszuprobieren.
»
» Bei Fragen zum Code bitte die Zeilennummer angeben, macht die Sache
» einfacher.
»
» http://www.elektronik-kompendium.de/forum/upload/20160106220338.ino |