Go Down

Topic: Netzwerksetup per Webinterface (Read 1 time) previous topic - next topic

edvler

Mar 29, 2013, 01:00 pm Last Edit: Apr 13, 2013, 04:42 pm by edvler Reason: 1
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

uwefed

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

mkl0815

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.

edvler

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

tao13

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

Doc_Arduino

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


Tschau
Doc Arduino '\0'

qualidat

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

Serenifly

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.

jok3r89

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ß

sschultewolter

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
Arduino Yun und Due abzugeben, bei Interesse PN.

jok3r89

#10
Jul 09, 2015, 01:41 pm Last Edit: Jul 09, 2015, 01:44 pm by jok3r89
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 ....;-)

Der entscheidend teil liegt hier ->

Quote
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
Quote
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
}


Go Up