sorry,
IK denk dat dit zeer vaak is gevraagd maar ik kan het niet vinden vandaar deze wrsch. domme vraag.
Simple gezegd: de "examples" voor ethernet werken niet.
Nadere uitleg: Ik heb een arduino UNO 3 gekocht met "ethernet shield".
Ik heb het ding correct aangesloten d.w.z kaartje op de UNO geprikt USB aansluiting naar de computer, RJ45 kabel naar de switch die in mijn lokale netwerk (192.168.100.xxx) zit.
Ethernet shield heeft geen sticker met MAC address dus ik neem het "fake"address van het example.
OS is Ubuntu 14.04 computer is AMD 6-core met 8Gb mem.
Examples voor UNO werken correct maar het "DhcpASddressPrinter" voorbeeld werkt niet. Ik zie dat het geladen wordt aan de ledjes en ik zie de RX en TX led oplichten maar na enige tijd komt in de monitor de mededeling "Failed to configure Ethernet using DHCP", dus kennelijk werkt de driver niet. Met wireshark zie ik ook geen traffic vanaf het MAc-adres.
Ten overvloede: Er zit geen micr-sd card in het slot.
Ik wil de combinatie gebruiken o.a. om mijn zgn "smart meter" uit te lezen en mijn zonnepanelen.
Hopelijk weet iemand hoe dit op te lossen. ALvast bedankt.
Joep
Hoewel je het niet expliciet zegt neem ik aan dat je het W5100-ethernetshield, die je direct op de Arduino prikt, gebruikt. DHCP is vaak een 'pain in the ass' met dit board , het is dan ook makkelijker om je board een vast IP-adres te geven.
Ikzelf gebruik dit board als server(tje) met de volgende opzet:
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 100, 199); // IP address, may need to change depending on network
EthernetServer server(80); // create a server at port 80
void setup()
{
Ethernet.begin(mac, ip); // initialize Ethernet device
server.begin(); // start to listen for clients
}
Je kunt in je router eventueel/misschien wel opgeven dat het IP-adres 192.168.100.199 dan een bekend adres is wat altijd aan dit mac-adres toegewezen moet worden.
Dit heeft als voordeel dat je vanaf elke computer in je lokale netwerk met een browser je arduino-server kunt bekijken door het vaste IP-adres in de url-balk te plaatsen.
Ik kan je aanraden om deze site Arduino Ethernet Shield Web Server Tutorial te bestuderen om met dit board te werken.
Als je een ander ethernetshield gebruikt, met andere chipset, dan kan ik je helaas niet helpen.
bedankt voor je snelle reply.
Ik gebruik inderdaad de W5100 dus dat is OK. Ik heb het ook al eens een keer geprobeerd met een IP adres uit mijn eigen range maar dat gaf ook geen soelaas. Ik ga het echter nog een keer proberen.
Je voorbeeld gaat uit van een eigen script (of "sketch"zoals dat bij Arduino wordt genoemd) en ik gebruikte het voorbeeld (zoals ik meldde).
Voor de volledigheid de router is een Linksys 2500 met DD-WRT software die in de 2,5G band werkt want de 5 G band werkt niet onder DD-WRT. Ik ga ook binnenkort een adere versie van Open SOurce router software proberen (Tomato) want die zou wel goed werken. Ik werk met linux sinds 1992, (begon met versie 0.99) en daarvoor met Unix experimenteel op een PDP-11 een machine waar waarschijnlijk de meeste nooit van gehoord hebben en daarna met IRIX (Silicon Graphics). WIndows heb ik nooit mee gewerkt, ken het niet en wil het ook niet kennen(!).
Ik laat weten of jouw oplossing werkt.
Alvast bedankt.
Joep
Even een kort vervolg: Ik heb de code van het example aangepast zo:
#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 };
IPAddress ip(192,168,100,25);
// 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(;;)
// ;
// }
Ethernet.begin(mac, ip); // initialize Ethernet device
// 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() {
}
#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 };
IPAddress ip(192,168,100,25);zo
// 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(;;)
// ;
// }
Ethernet.begin(mac, ip); // initialize Ethernet device
// 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() {
}
Dat werkt (i.e. hij zegt wat het IP-adres is) maar als ik ping vanaf mijn werkstation zegt hij:
From 192.168.100.32 icmp_seq=1 Destination Host Unreachable
Dus kennelijk ziet mijn netwerk het niet en het staat ook niet in de DHCP clients list van de router.
Enig idee waarom dit niet lukt?
Joep
Edited: added code tags
@jblom
Gelieve code tags te gerbuiken.
Ook graag een goede omschrijving van het proleem. Het lijkt wel of geen enkel example werkt.
Ik heb beide aangepast.
De moderator
Jantje
probeer eens een PING met Poort nummer
Het voorbeeld van jou werkt bij mij, er zit dus geen fout in.
De regel 'My IP address: 192.168.xxx.xxx' wordt door de sketch gegenereerd en zegt dus niets over het functioneren van het shield.
Als je naar het shield kunt pingen dan heeft je router het herkend en het door het shield gevraagde IP adress toegekend. Als dat bij jou niet gebeurt dan zijn er diverse mogelijkheden.
Misschien valt 192,168,100,25 buiten de range die je router toe wil kennen.
Misschien kun je je router vertellen dat hij mac-adres 00-AA-BB-CC-DE-02 altijd IP adres 192.168.00.25 moet geven.
Je kunt ook eens het voorbeeld van de client in je arduino laden en kijken of het shield dan wel werkt.
De voorbeelden van de site Arduino Ethernet Shield Web Server Tutorial werken wat dat betreft perfect.
Ik ken de Linksys 2500 niet en zelf gebruik ik ook geen DD-WRT firmware, dus daar kan ik weinig over zeggen. (Mijn router is een Fritzbox).
PDP-11 en Silicon-Graphics uit een grijs verleden zeggen mij wel iets.
Wat betreft Windows heb je groot gelijk, Windows is 'by design' voorzien van gaten en achterdeurtjes zodat sommige "veiligheids"-diensten , indien ze dat willen, je PC volledig over kunnen nemen zodra die aan het grote boze net hangt.
Ik gebruik al jaren Linux en WinXP gezamelijk in een dual-boot. Hoewel, sinds vorig jaar het updaten van WinXP is gestaakt, ik het nog maar zelden gebruik.
Probeer dit eens: Ethernet - Arduino Reference
janvier,
Bedankt voor je advies maar dat werkt ook niet. Ik krijg alleen de message"Failed to configure Ethernet using DHCP".
@jantje: Sorry ik begrijp niet wat je bedoelt met "tag". IK heb nergens gezien waar ik welk soort tag moet toevoegen behalve dat ik een ? heb ingevoegd. Bedoelde je dat?
Ik dacht dat het probleem helder was aangegeven. Letterlijk de examples voor Ethernet werken geen van allen. Het zou erop kunnen wijzen dat de kaart ("sorry shield") niet goed is maar daar ga ik voorlopig niet van uit. De hardware aangestuurde led's werken en de led's op de ethernet aansluiting werken ook. Ik ga er van uit dat er ergens een mismatch is. Dat kan op veel plaatsen. Ik ben geen netwerk expert maar ik begrijp dat je bij dit soor microprocessoren alle OSI lagen programmatisch moet opbouwen (maar ik weet niet wat de W5100 daat zelf al voor doet). Wellicht is er in de gemeenschap iemand die daar beter van op de hoogte is en wellicht een goede suggestie kan doen. Voorlopig kan ik hem niet inschakelen voor het doel waarvoor ik de arduino heb aangeschaft maar hopelijk aldoende leert men.
Het IP adres dat ik gebruik zit in de range van mijn DHCP/DNS server (dnsmasq).
Alvast bedankt.
Joep
jlblom:
De hardware aangestuurde led's werken en de led's op de ethernet aansluiting werken ook. Ik ga er van uit dat er ergens een mismatch is. Dat kan op veel plaatsen.
Heb je al gecontroleerd of je UTP kabel wel helemaal goed is ?
Als daar een draadje verkeerd zit of onderbroken is kan dat een reden zijn dat de ethernetshield niet kan connecten met de router
jlblom:
@jantje: Sorry ik begrijp niet wat je bedoelt met "tag". IK heb nergens gezien waar ik welk soort tag moet toevoegen behalve dat ik een ? heb ingevoegd. Bedoelde je dat?
Hoi Joep,
Lees de gebruiksaanwijzing (klik) eens door.
Er staat ook het een en ander in het Engels (via een te volgen link) uitgelegd, met name over die tags.
Over het te gebruiken IP adres:
Als ik een vast IP adres toewijs, dan laat ik die altijd buiten de DHCP pool vallen.
De router moet dat gewoon accepteren, en je krijgt ook geen conflicten omdat dat IP adres toevallig al ergens toegewezen zou kunnen zijn.
Een reden om een vast IP toe te wijzen, is wanneer je je toepassing van buitenaf wil kunnen benaderen.
Dan kun je een port forwarden, en daarvoor moet je wel het IP kennen.
Dat word lastig bij een door DHCP toegewezen adres, want die kan zomaar veranderen.
Dat geldt natuurlijk niet als je een eenmaal toegewezen en werkend adres vast aan een MAC adres knoopt in de router.
@cartoonist. BEdankt voor de suggestie maar het lijkt mij onwaarschijnlijk omdat ik dat kabeltje eerder heb gebruitk om een oude laptop "gebruiksklaar"te maken voor een goede vriend met als bonus dat ik hem nu aan de Ubuntu heb (voor een oude WIndows gebruiker een overwinning!).
@jantje. Ik zal de tips eens goed doorlezen (ja ik ben iemand die zelden RTFM doet!). Ik zal kijken of een adres buiten de pool werkt....
Heb het geprobeerd (mijn range is 20-69) en 192.168.100.80 het fixed IP adres. Helaas nog geen reactie op ping (heb DHCPAddressprinter gemodificeerd). Hij laat wel direct in de monitor zien dat hij dar adress heeft gekregen maar ping zegt nog steeds dat het adres onbereikbaar is.
Ik blijf zoeken!
Joep
Mocht je een "goed" MAC adres willen hebben, mijn ethernet shield had wel een sticker met een MAC op
mss iets dat je kan proberen is een andere router gebruiken, ALS je nog één hebt liggen natuurlijk