Netzwerksetup per Webinterface

Hallo zusammen,

hatte bei meinen Aufbauten oft die Anforderung per Ethernetshield eine Netzwerkanbindung zu realisieren.
Leider ist es schwierig solche Projekte "Endbnutzerfreundlich" umzusetzen, da bereits beim Netzwerksetup wieder der Quellcode benötigt wird.

Da ich als Grundlage Webduino nutze, habe ich dafür ein Webinterface geschrieben mit welchem das Netzwerksetup erledigt werden kann. Die Einstellungen werden permanent im EEPROM gespeichert.

Außerdem sind dort noch Infos wie RAM Auslastung und Uptime zu finden.

Zu finden ist das Netzwerk Webinterface bereits im Webduino GitHub Repository.

Eine kurze Anleitung habe ich hier zusammengestellt: http://www.edvler-blog.de/arduino_networksetup_webinterface_with_eeprom/

Hier noch ein Bild der aktuellen Version

Ein Nachteil ist, dass ein solches Webinterface natürlich viel FLASH Speicher benötigt und auch der SRAM stark beansprucht wird. Ich nutze daher grundsätzlich einen MEGA 2560 wenn ich das Webinterface nutze!

Grüße
EDVler

Web_EEPROM_Setup.jpg

Etwas was ich nicht ganz verstehe.
Du stellst über LAN die LAN-Parameter der Ethernetkarte ein. Wie bekommst Du Kontakt zum Arduino wenn dieser fürs LAN noch nicht richtig eingestellt ist.
Grüße Uwe

Vermutlich gibt es wie bei jedem anderen Gerät das man z.B. kauft eine default Einstellung. Die meisten Router verwenden z.B. 192.168.1.1, bei den AVM Fritzboxen ist das Default-Netz das 192.168.178.0/24.

Im Code gibt es eine default Section.
Dort kann man die Standard IP-Adresse, Subnet, Gateway etc. hinterlegen.

Findet der Arduino beim starten keine Config so zieht er die im Code definierten default Einstellungen.
Alternativ gibt es die Möglichkeit einen Reset Button anzuschließen. Wird dieser beim einschalten gedrückt, werden ebenfalls die default Einstellungen herangezogen.

Bei meinen "Geräten" habe ich einen Reset-Schalter angebracht und dort die default IP und das Subnet vermerkt mit Etikett.
So kann jeder nach einem Reset sich auf das Webinterface verbinden und dort seine IP Adresse hinterlegen.

Grüße
EDVler

Hi.
Can you modify it to works on arduino 1.6.5?
Many thanks

Hallo,

das ist ja richtig cool.

Kann man die Weboberfläche auch so umbauen, dass man andere Dinge einstellen kann und mit Bluetooth statt LAN?

Ich hab es zur Zeit bei mir so. Ich sende vom Smartphone aus über eine Terminalprogramm eingetippte Befehle über Bluetooth zu meinem Arduino. Die Daten wie zum Bsp. Weckuhrzeiten werden auch im EEprom gespeichert.

Kann man das auch mit einer Weboberfläche machen und über Bluetooth oder geht das überhaupt nicht?
Dann könnte ich meine eingestellten Weckzeiten
a) übersichtlicher anschauen und
b) bequemer ändern

Ich habe etwas ähnliches gemacht, nutze aber eine App auf dem Laptop und die USB/Serial-Verbindung zur Parametrierung. Damit kann ich zwar nicht aus der Ferne zugreifen, aber zum Einrichten vor Ort beim Kunden reicht es - auch ohne Quellcode.

Wird das serielle Interface für die eigentliche Anwendung benötigt, schalte ich den Arduino per Tastendruck (an einem Pin) nach dem Reset in den "config mode".

Noch einen Hinweis zur Netzwerk-Konfiguration: Inzwischen kann die Ethernet-Lib ja auch DHCP, d.h. man muss den nicht konfigurierten Arduino im Netz einfach mit einem IP-Scanner suchen und anhand seiner MAC-Adresse herausfinden. Hat der Arduino ein Display, kann man selbstverständlich dort die IP anzeigen und muss nicht suchen ... :slight_smile:

Mit einem GUI Programm kann man das auch so machen, dass die Art der Verbindung egal ist. Die Schnittstelle zwischen Oberfläche und Kommunikations-Ebene kann über eine Klasse erfolgen die nur virtuelle Methoden enthält. Diese überschreibt man dann in abgeleitenden Klassen die z.B. Ethernet oder eine serielle Schnittstelle implementieren. Dann kann man die Kommunikationsklasse austauschen ohne dass sich was größeres am GUI ändert.

Hallo ich versuche verzweifelt den Code am laufen zu bekommen.

Meine Standard Adresse wäre die 192.168.188.220
Jetzt hätte ich zum debuggen noch die IP zurück geben aber leider kommt da jedesmal eine andere raus

if (eeprom_config.use_dhcp != 1) {
IPAddress ip(eeprom_config.ip[0], eeprom_config.ip[1], eeprom_config.ip[2], eeprom_config.ip[3]);
IPAddress gateway (eeprom_config.gateway[0],eeprom_config.gateway[1],eeprom_config.gateway[2],eeprom_config.gateway[3]);
IPAddress subnet (eeprom_config.subnet[0], eeprom_config.subnet[1], eeprom_config.subnet[2], eeprom_config.subnet[3]);
IPAddress dns_server (eeprom_config.dns_server[0], eeprom_config.dns_server[1], eeprom_config.dns_server[2], eeprom_config.dns_server[3]);
Ethernet.begin(eeprom_config.mac, ip, dns_server, gateway, subnet);

//Debugging
pinMode(SS,OUTPUT);
Serial.print(eeprom_config.ip[0]),Serial.print("."),Serial.print(eeprom_config.ip[1]),Serial.print("."),Serial.print(eeprom_config.ip[2]),Serial.print("."),Serial.println(eeprom_config.ip[3]);
Serial.println(Ethernet.localIP());

}

Console
"
setup
192.168.188.220 //richtig
223.171.189.221 //Rückgabe der classe localIP()

"

Woran kann das liegen ?
Was ich alles benutze W5100 ,IDE 1.61, Fritzbox 7270

Gruß

Versuche doch erstmal dein W510 am Laufen zu bekommen, ehe du hier etwas versuchst.

Überprüfe, ob die Verbindung zur Fritzbox überhaupt funktioniert. Netzwerkkabel in Ordnung?

Des weiteren ist mir nicht klar, wieso deine Standard Netzwerkadresse 192.168.188.220 sein soll. Wo hast du die eingetragen, bitte immer vollständigen Code und in TAGS setzen!

pinMode(SS,OUTPUT);

scheint mir hier auch an der falsche Stelle zu sein! Das muss als erstes vor der SPI initialisierung erfolgen

Der andere code Teil läuft ja schon Prima.

Auch diverse Codebeispiele funktionieren...

Und Hier die Ausgabe an der Console

IP: 192.168.188.111
Subnet: 255.255.255.0
Gateway: 192.168.188.1
DNS Server: 192.168.188.1
MAC: DE:AD:BE:EF:FE:ED
Webserver Port: 80
USE DHCP: 0
DHCP renew every 60 minutes
Config Set: 1
CurrentIP 223.171.189.239

Der Ganze code ist viel zu lange ....:wink:

Der entscheidend teil liegt hier ->

void setupNetwork() {
read_EEPROM_Settings();

#ifdef DEBUG
print_EEPROM_Settings();
#endif

// byte mac[] = { eeprom_config.mac[0], eeprom_config.mac[1], eeprom_config.mac[2], eeprom_config.mac[3], eeprom_config.mac[4], eeprom_config.mac[5] };

if (eeprom_config.use_dhcp != 1) {
IPAddress ip(eeprom_config.ip[0], eeprom_config.ip[1], eeprom_config.ip[2], eeprom_config.ip[3]);
IPAddress gateway (eeprom_config.gateway[0],eeprom_config.gateway[1],eeprom_config.gateway[2],eeprom_config.gateway[3]);
IPAddress subnet (eeprom_config.subnet[0], eeprom_config.subnet[1], eeprom_config.subnet[2], eeprom_config.subnet[3]);
IPAddress dns_server (eeprom_config.dns_server[0], eeprom_config.dns_server[1], eeprom_config.dns_server[2], eeprom_config.dns_server[3]);
Ethernet.begin(eeprom_config.mac, ip, dns_server, gateway, subnet);
//Debugging
Serial.print("CurrentIP ");
Serial.println(Ethernet.localIP());

} else {
if (Ethernet.begin(eeprom_config.mac) == 0) {
Serial.print("Failed to configure Ethernet using DHCP");
}
Serial.println(Ethernet.localIP());
}
}
// END Network section #########################################################################################################################################

Pinmode gehört natürlich am anfang beim Setup .....
ich wollt nur was testen ...

Hier die config IP

void set_EEPROM_Default() {
eeprom_config.config_set=1; // dont change! It's used to check if the config is already set

eeprom_config.use_dhcp=0; // use DHCP per default
eeprom_config.dhcp_refresh_minutes=60; // refresh the DHCP every 60 minutes

// set the default MAC address. In this case its DE:AD:BE:EF:FE:ED
eeprom_config.mac[0]=0xDE;
eeprom_config.mac[1]=0xAD;
eeprom_config.mac[2]=0xBE;
eeprom_config.mac[3]=0xEF;
eeprom_config.mac[4]=0xFE;
eeprom_config.mac[5]=0xED;

// set the default IP address for the arduino. In this case its 192.168.0.111
eeprom_config.ip[0]=192;
eeprom_config.ip[1]=168;
eeprom_config.ip[2]=188;
eeprom_config.ip[3]=111;

// set the default GATEWAY. In this case its 192.168.0.254
eeprom_config.gateway[0]=192;
eeprom_config.gateway[1]=168;
eeprom_config.gateway[2]=188;
eeprom_config.gateway[3]=1;

// set the default SUBNET. In this case its 255.255.255.0
eeprom_config.subnet[0]=255;
eeprom_config.subnet[1]=255;
eeprom_config.subnet[2]=255;
eeprom_config.subnet[3]=0;

// set the default DNS SERVER. In this case its 192.168.0.254
eeprom_config.dns_server[0]=192;
eeprom_config.dns_server[1]=168;
eeprom_config.dns_server[2]=188;
eeprom_config.dns_server[3]=1;

// set the default Webserver Port. In this case its Port 80
eeprom_config.webserverPort=80;

#ifdef DEBUG
Serial.println("Config reset");
#endif
}

hola buenas tardes amigos no he podido ingresar a 192.168.0.111/setupNet.html ya he cofigurado todo ok la p y el rango donde tengo mi pc pero me si ingreso a la dir 192.168.0.111/seputNet me sale EPIC FAIL

HTTP 400 - BAD REQUEST

alguien me puede ayudar gracias