automatisch ip krijgen DHCP

Arduino shields
Berichten: 43
Geregistreerd: 10 Nov 2012, 09:30
Woonplaats: Kan gebied

automatisch ip krijgen DHCP

Berichtdoor dylantje » 16 Jul 2017, 19:34

Noop Hier :-)

Kan ik met een ethernetshield een setting krijgen die er voor zorgt dat mijn Ethernethield via DHCP automatisch internet krijgt.
En dan onafhankelijk van lan ip en subnet.

Nu krijg ik mijn shield aan de gang met:
Code: Alles selecteren
Ethernet.begin(mac, ip, dnsserver, gateway, subnet);

Als ik in een ander lan kom moet ik telkens alles omzetten....
Maar ik zou dus graag iets met
Code: Alles selecteren
Ethernet.begin(ip,dhcp, dnsserver);
hebben.

Indien mogelijk wel een vast ip.
Dus onafhankelijk van de range subnet enz bijv. maar wel altijd de 125
voorbeeld:
192.168.1.125
192.168.2.125
etc etc.
dnsserver, gebruik ik altijd 8.8.8.8 dus die is misschien wel handig om eea te synchroniseren...

Hopelijk kan iemand verder helpen..?
Stukje voorbeeld, of een how to, of een link ..

alles ben ik blij mee..
Thanks!!

Advertisement

Gebruikers-avatar
Berichten: 210
Geregistreerd: 03 Sep 2013, 10:03
Woonplaats: Katwijk ZH

Re: automatisch ip krijgen DHCP

Berichtdoor baco1978 » 17 Jul 2017, 11:56

Het lijkt er op dat, dat niet mogelijk is om tussentijds het IP adres aan te passen.

Je kan wel tijdens het opstarten een knop ingedrukt houden, waardoor je er voor zorgt dat de arduino in DHCP mode opstart
en vervolgens het ip adres wat die daarna krijgt, opslaat in de eprom of naar SD kaart schrijft (maar net waarje al gebruik van maakt.

Daarna reset je je arduino weer waarna deze de opgeslagen ip adres deels gebruikt.

hopelijk kan je hier wat mee
Met vriendelijke groet Arjan

Berichten: 43
Geregistreerd: 10 Nov 2012, 09:30
Woonplaats: Kan gebied

Re: automatisch ip krijgen DHCP

Berichtdoor dylantje » 17 Jul 2017, 23:09

baco1978 schreef:Het lijkt er op dat, dat niet mogelijk is om tussentijds het IP adres aan te passen.

Je kan wel tijdens het opstarten een knop ingedrukt houden, waardoor je er voor zorgt dat de arduino in DHCP mode opstart
en vervolgens het ip adres wat die daarna krijgt, opslaat in de eprom of naar SD kaart schrijft (maar net waarje al gebruik van maakt.

Daarna reset je je arduino weer waarna deze de opgeslagen ip adres deels gebruikt.

hopelijk kan je hier wat mee


Kun je me die uitleggen??
Een knop ingedrukt houden terwijl ik de sketch ip mac enz enz vast heb staan


lijkt me wel een oplossing..
alleen hoe
Dit is beter dan niets....
Of alles anders instellen..

Gebruikers-avatar
Berichten: 116
Geregistreerd: 23 Dec 2011, 00:11
Woonplaats: Enschede

Re: automatisch ip krijgen DHCP

Berichtdoor bigred » 17 Jul 2017, 23:26

DHCP is niet bedoeld om een vast adres te claimen, de server bepaald jou adres.
Wat je wel kan doen is in je router instellen welk adres je zou willen hebben (op basis van je mac adres) maar dat moet dan op elk netwerk.

Deze staat gewoon in de voorbeelden van het ethernet shield:
Hij print je nieuw verkregen adres naar de serial monitor.

Code: Alles selecteren
/*
  DHCP-based IP printer
 
 This sketch uses the DHCP extensions to the Ethernet library
 to get an IP address via DHCP and print the address obtained.
 using an Arduino Wiznet Ethernet shield.
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 
 created 12 April 2011
 modified 9 Apr 2012
 by Tom Igoe
 
 */

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
  // this check is only needed on the Leonardo:
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for(;;)
      ;
  }
  // print your local IP address:
  Serial.print("My IP address: ");
  for (byte thisByte = 0; thisByte < 4; thisByte++) {
    // print the value of each byte of the IP address:
    Serial.print(Ethernet.localIP()[thisByte], DEC);
    Serial.print(".");
  }
  Serial.println();
}

void loop() {

}


Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: automatisch ip krijgen DHCP

Berichtdoor Koepel » 17 Jul 2017, 23:31

@dylantje, als je verschilende dingen wilt voor Ethernet.begin(), en je zou dat met een knop willen doen, dan kun je bijvoorbeeld een knop aan pin 2 naar GND en daar nog een weerstand bij van 10k naar 5V.
Dus als de knop niet is ingedrukt, dan is pin 2 HIGH.

Code: Alles selecteren
void setup()
{
  ...
  // test the special knop.
  if( digitalRead( 2) == LOW)
  {
    // de knop is ingedrukt tijdens het opstarten
    Ethernet.begin( ...
  }
  else
  {
    // de knop is niet ingedrukt tijdens het opstarten
    Ethernet.begin( ...
  }
}


Maar eerlijk gezegd begrijp ik je vraag niet eens.
Ofwel je gebruikt een IP nummer, ofwel je gebruikt DHCP zoals @bigred schrijft.
Met DHCP gebruik je alleen het mac nummer als parameter.
Code: Alles selecteren
Ethernet.begin(mac);  // DHCP mode

De verschillende mogelijkheden van Ethernet.begin() zie je in: https://github.com/arduino-libraries/Ethernet/blob/master/src/Ethernet.h

Berichten: 43
Geregistreerd: 10 Nov 2012, 09:30
Woonplaats: Kan gebied

Re: automatisch ip krijgen DHCP

Berichtdoor dylantje » 18 Jul 2017, 09:38

mmm wat ik nu nog moet doen is toch een ide openen om zijn ip te vinden.
Maar het zou mooi zijn al je bijvoorbeeld altijd 192.168.x.125 zou hebben.
hoef je alleen te kijken welke range het thuisnetwerk heeft, stel 2.[ die zie je op je wifi]
En dan hoef je alleen 192.168.2.125 in te typen om zijn webgui te zien.
bij een ander die 3 heeft, 129.168.3.125

mmm'
Als ik eerlijk snap ik de voorbeelden op de github niet.
Moet ik alleen in de skecth:
Code: Alles selecteren
Ethernet.begin(mac);  // DHCP mode

zetten?
of moet ik meer mee doen?

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: automatisch ip krijgen DHCP

Berichtdoor Koepel » 18 Jul 2017, 16:22

Nu begrijp ik het ;)

Ik kan een paar dingen verzinnen, en misschien weten anderen er nog meer.

static IP in de router
Je kunt bij een router een device een static IP geven. Je laat de Arduino in DHCP mode en als de router het 'mac' address herkent, dan geeft de router het een static IP. Dus kan hoef je alleen maar alle routers van alle netwerken in te stellen.
Code: Alles selecteren
Ethernet.begin( mac);   // DHCP mode

Ik heb maar één thuisnetwerk, maar ik geeft hier vaak de voorkeur aan. Ik heb nog meer apparaten die alleen DHCP hebben en die ik op een vast IP nummer wil hebben. Dus er zit toch al een lijstje met static IPs in de router.

discovery service
In linux bestaat er een package "Avahi" https://en.wikipedia.org/wiki/Avahi_(software), dat stuurt achter elkaar packets het netwerk op met de naam waarmee het apparaat gevonden kan worden.
Dit is de meest gangbare manier voor normale apparaten, maar ik weet niet of dat in de Arduino mogelijk is.

connect-disconnect-connect
Je zou DHCP kunnen gebruiken om het derde getal te vinden. Dan Ethernet afsluiten, dan weer opstarten met het nieuwe IP. Er is helaas geen Ethernet.end(). Ik heb de source bekeken https://github.com/arduino/Arduino/tree/master/libraries/Ethernet/src en volgens mij is het geen probleem om twee keer Ethernet.begin(...) aan te roepen.
Code: Alles selecteren
Ethernet.begin( mac);   // DHCP mode
Ethernet.localIP(), je krijgt bijvoorbeeld 192.168.13.100
Wijzig laatste nummer naar  125
ip = 192.168.13.125
Ethernet.begin( mac, ip);   // static IP mode

Gebruikers-avatar
Berichten: 116
Geregistreerd: 23 Dec 2011, 00:11
Woonplaats: Enschede

Re: automatisch ip krijgen DHCP

Berichtdoor bigred » 19 Jul 2017, 11:54

Nu ga je er standaard vanuit dat 125 altijd in het subnet zit van de router en dat deze nog niet eerder is uitgegeven door de dhcp server.
Vooral in grotere omgevingen kan dit goed fout gaan want niet elk netwerk heeft 125 adressen in zijn dhcp pool, en 125 kan prima uitgegeven zijn op moment dat jij binnen komt.

Zelf knoeien aan adressen die ook door dhcp uitgegeven kunnen worden is naar mijn idee dan ook geen stabiele oplossing.
Als je echt geen ide wilt starten aan het begin kun je je ip ook printen op een lcd scherm (eventueel in combinatie met andere functies de eerste 5 seconden).

Code: Alles selecteren
void printip(){
  lcd.setCursor(0, 0);
  lcd.print("http://");
  lcd.setCursor(0, 1);
  for (byte thisByte = 0; thisByte < 4; thisByte++) {
  lcd.print(Ethernet.localIP()[thisByte], DEC);
  if (thisByte < 3) lcd.print(".");
  }
}

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: automatisch ip krijgen DHCP

Berichtdoor Koepel » 19 Jul 2017, 12:50

@bigred, o, ja, dat is een goed punt. Daar had ik nog niet aan gedacht.
Trouwens, ik herhaalde wat jij al eerder schreef over een vast IP geven in de router. Pas later begreep ik jouw antoord :oops:

Ik denk dat het mogelijk is om met het gewone Ethernet Shield een discovery service te doen. Bijvoorbeeld dit: https://github.com/TrippyLighting/EthernetBonjour. Ik heb het nooit geprobeerd, het lijkt nog niet zo eenvoudig te zijn.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: automatisch ip krijgen DHCP

Berichtdoor nicoverduin » 19 Jul 2017, 13:18

Ik denk dat de TS er beter aan doet om gewoon een ip te krijgen van het netwerk en daarmee aan het werk te gaan.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Volgende

Terug naar Shields

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten