Pagina1 van 1

Web-Enable een Arduino met een Arduino ENC28J60 Ethernet shield …

Web-Enable een Arduino met een Arduino ENC28J60 Ethernet shield …
   30

Recentelijk vond ik een Arduino ENC28J60 Ethernet module op eBay voor slechts $18 (ongeveer 13€). In dit setje boden ze een Arduino ENC28J60 Ethernet shield/module gecombineerd met een Arduino USB Nano V3.0 aan. Nou dat is bijna voor niks zeg maar hè? Dus ik kon mezelf niet helpen en zonder veel van de module te weten kocht ik het setje. Het koste even wat moeite om het aan de gang te krijgen, maar nu werkt het uitstekend.

Met een Arduino prullen blijft leuk, vooral als je kijkt naar de verschillende electronica die je kunt vinden voor deze micro-controller (snuffel eens rond op eBay of Amazon!). Op zowel eBay, als Amazon, zul je zien dat er een aantal verschillende varianten van de Arduino ENC28J60 Ethernet bestaan. 

In dit artikel kijken we naar een goede Arduino Library voor de ENC28J60 en proberen we een “Hello World” voorbeeld.
De code zal (zeer waarschijnlijk) prima werken voor de verschillende ENC28J60 varianten. 




Arduino en de ENC28J60 Ethernet Controller

Het nummer “ENC28J60” staat voor het chip nummer, ontwikkeld door Microchip.  Het betreft een 28 pins chip waarin we een complete stand-alone Ethernet controller vinden voor gebruik met een 10BASE-T netwerk. De chip heeft een SPI interface zodat microcontrollers zoals de Arduino er makkelijk mee kunnen communiceren.

10BASE-T is dezelfde connector die jouw PC gebruikt, als je de PC met een draadje aan jouw netwekr hangt. Hierbij geeft de “10” aan dat de maximale snelheid 10 Mbit/sec is. Dat mag dan langzaam klinken (de meeste netwerken gebruiken 100 Mbit/sec of sneller). Bedenk echter dat je met de Arduino geen enorme ladingen aan data zult verwerken, en na een paar dagen spelen met deze module, kan ik met gerust hart zeggen dat het vlot is.

De juiste Ethernet Controller … 

De standaard Arduino Ethernet Shield gebruikt ook een alles-in-èèn Ethernet Controller, en de bijbehorende Library wordt meegeleverd met de Arduino IDE. De gebruikte controller hiervoor echter is een Wiznet W5100!

In dit artikel echter kijken we naar modules die op de MicroChip ENC28J60 gebaseerd zijn!
Deze modules zijn NIET hetzelfde en NIET compatible met de W5100 en we hebben hiervoor dus andere Libraries nodig.

  Voor het zelf maken van netwerk kabeltjes, lees het “Hoe maak ik zelf een netwerk-kabel” artikel.

10BASE-T RJ45 Connector

10BASE-T RJ45 Connector

Kies jouw ENC28J60 module

Als je op zoek gaat naar een ENC28J60 Ethernet module, dan zul je snel zien dat er legio varianten bestaan, welke in principe electronisch allemaal hetzelfde zijn. Allen het board en de pin locaties zullen anders zijn, uiteraard met specifieke toepassingen in gedachten. Onderstaande foto laat je slecht 2 van de vele varianten zien van de ENC28J60 Ethernet modules.

Ik vond mijn module op eBay voor slechts $18 en werd met een Arduino Nano geleverd (links in de foto – Nano niet afgebeeld), welke prima werkt met een Nano maar ook met een Arduino Uno en waarschijnlijk andere Arduino modellen. De connectors zijn natuurlijk gedacht voor een Nano.

De reden waarom ik dit model koos (totaal niet bewust van het feit dat dit dus niet hetzelfde is als de standaard Arduino Ethernet shield) waren: prijs, Arduino Nano inbegrepen en … super compact. Als je de module en een Arduino Nano combineert, dan is het geheel ongeveer 6.7 cm lang, 1.7 cm breed, en 1.7 cm hoog – waarbij het e.e.a. afhangt of je de pinnen aan de onderkant gebruik, of the connectors aan de bovenkant. In mijn test opstelling gebruik ik de pinnen aan de onderkant maar in het “eindproduct” kan ik de connectors aan de bovenkant gebruiken en de pinnen aan de onderkant afknippen.

Arduino ENC28J60 shield varianten

Arduino ENC28J60 shield varianten

Omdat ik eigenlijk niet veel uitgezocht had voor ik dit model koos, moest ik helaas ondervinden dat de verkoper maar bar weinig info had en dat dit dus niet de standaard Arduino Ethernet Shield is. Maar … na wat zoeken vond ik dan uiteindelijk een aantal Libraries die prima werken … nadat ik uitgevogeld had welke pinnen ik moest gebruiken.

In de volgende paragrafen bekijk ik drie van dit soort Libraries. Alle drie werken uitstekend!

UIPEthernet is voor projecten waar je een goed werken “print” functie nodig hebt of als het een drop-in vervanging moet zijn voor de standsard “Ethernet” library.
ETHER_28j60 is geweldig omdat het simpel en compact is, maar ook wel een beetje beperkt natuurlijk.
Ethercard lijkt geweldig voor de meer ervaren Arduino/Netwerk gebruikers, maar ik denk dat UIPEthernet het zeker kan evenaren.

Voor elk van de Libraries heb ik een “Hello World!” gemaakt, misschien niet altijd even optimaal, maar het maakt her mogelijk om de “Hello World” melding in jouw webbrowser te zien.

Voor we beginen: Libraries en gebruikte Pinnen

  Je hebt altijd stroom nodig, dus iedere module gebruikt GND en +3.3V of  +5V pin.
  Voor mijn eBay module moest ik +5V gebruiken (het heeft een voltage regulator), omdat de 3.3V pin gewoon niets deed.

Hieronder een tabel die werkt voor een Arduino Uno, Arduino Nano en mijn eBay Ethernet module, met de benodigde pinnen.
Zoals je zult zien, worden de standaard SPI pinnen (10, 11, 12 en 13) gebruikt. Uitzondering is Ethercard, welke pin 8 voor SS gebruikt (i.p.v. de standaard pin 10).

ENC28J60 Pinnen  en Libraries
Pin naam ETHER_28J60 Ethercard UIPEthernet Mijn eBay Module
 SS  10  8 (!)  10  10
 MOSI (SI)  11  11  11  11
 MISO (SO)  12  12  12  12
 SCK  13  13  13  13

De Ethernet Controller (ENC28J60) is een zogenaamd SPI device en gebruikt dus de SPI pinnen (10, 11, 12, 13) van jouw Arduino.

SS staat voor Slave Select, en wordt gebruikt om het aangesloten SPI apparaat aan of uit te zetten (de Ethernet module in dit geval).
MOSI staat voor Master Output Slave Input, in andere woorden: Arduino OUTPUT (data van de Arduino naar de Ethernet Controller).
MISO staat voor het tegenovergestelde, Master Input Slave Output, of te wel: Arduino INPUT (data van Ethernet Controller naar Arduino).
SCK is de klok voor SPI timing.

De meeste modules hebben de genoemde “Pin naam” op het printje staan. Mijn eBay module echter is gericht op de Nano en heeft alleen maar de Nano pin nummers en dus helemaal geen Ethernet Module pin-namen. Vandaar dus de extra kolom in de tabel voor mijn eBay Ethernet Module.

Illustratie van mijn eBay module, de “Nano Ethernet Shield” van “Deek-Robot“, laat zien wat ik bedoel.

Deek Robot Nano Ethernet Shield

Deek Robot Nano Ethernet Shield

Mijn ENC28J60 test opstelling

Mijn ENC28J60 test opstelling

Ander voorbeelden

In dit artikel, laat ik je “Hello World!” voorbeelden zien van de besproken libraries. Uiteindelijk werd “UIPEthernet” mijn favoriet, en heb ik een aantal voorbeelden hiervoor geschreven (ik vul de lijst aan zodra ze gepubliceerd zijn):

  Data ophalen (Data Pull) via het netwerk
  Data versturen (Data Push) via het netwerk

 

Arduino Library: ETHER_28J60 en EtherShield

Pas op: Onderhoud van deze bibliotheek is gestopt! 

De ontwikkelaar heeft aangegeven deze bibliotheek verder niet meer bij te houden. UIPEthernet is daarom een beter alternatief.

Dit was de eerste Library die ik vond en getest heb. Het werkt meteen, met name omdat het super simpel in gebruik is.

Al snel, toen ik wat complexere dingen wilde proberen, liep ik tegen de erg beperkte print functie van deze Library. Na wat rondsnuffelen op het Internet bleek dat de ontwikkelaar al lang niets meer veranderd had aan de Library en ik vermoed dat verder ontwikkeling geheel gestopt is, wat erg jammer is.

  Je hebt beide bibliotheken nodig!

Voordelen:

In onderstaande code zie je hoe eenvoudig ETHER_28J60 is … werkelijk, het kan niet eenvoudiger!

De library is ook erg compact, wat geheugen op de Arduino bespaart, iets wat we niet kunnen zeggen van de ander twee libraries.

Nadelen:

Een van de grootste nadelen is dat het geen zogenaamde drop-in vervanging is van de standaard Ethernet Library die bij de Arduino IDE geleverd wordt. Voorbeelden voor de standaard library kunnen dus niet eenvoudig omgezet worden.

Een ander, groter, probleem is de beperkte functionaliteit van de ingebouwde “print” functie waar je geen gebruik kunt maken van de Arduino String klasse.
Ik zal meteen toegeven dat dit ook deels is door mijn beperkte ervaringen met C-strings, zeker als bekende functies zoals  sprintf en  printf niet bestaan of maar deels werken (Arduino standaard library beperking).

Omdat verder ontwikkeling gestopt lijk, verwacht ook geen verbetering van deze “print” functie (tenzij iemand een fork maakt op Github).

Download:

ETHER_28J60 en Ether shield kun je downloaden van Github of natuurlijk van Tweaking4All.
Zoals altijd het advies om de actuele versie van Github te halen, maar in dit geval zal dat wel niets uitmaken.

Download - ETHER_28J60 and Ethershield 

Bestandsnaam:  ETHER-28J60-and-Ethershield.zip
Platform:  Undefined
Versie: 
Omvang:  24.1 kB
Datum:  2014-03-23
 Download Nu  Stuur me Koffie    


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// Een simpele web server die "Hello World" zegt

#include "etherShield.h"
#include "ETHER_28J60.h"

// Definieer MAC en IP adres - beiden dienen uniek te zijn in jouw netwerk
static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};  
static uint8_t ip[4] = {192, 168, 1, 15};
static uint16_t port = 80; // Gebruik poort 80 - standaard voor HTTP                                    

ETHER_28J60 ethernet;

void setup()
{
  ethernet.setup(mac, ip, port);
}

void loop()
{
  if (ethernet.serviceRequest())
  {
    ethernet.print("<H1>Hello World</H1>");
    ethernet.respond();
  }
  delay(100);
}

 

 

Arduino Library: EtherCard

Deze Library blijkt zeer gerespecteerd te zijn in de Arduino gemeenschap en met goede redenen. Het lijkt erop dat dit de meest uitgebreide implementatie is.

Onderstaande code mag er wat moeilijker uitzien maar dat is hoofdzakelijk vanwege de ingevoerde HTML.

  LET OP: Ethercard gebruikt pin 8 in plaats van pin 10!

Voordelen:

Deze library is goed wanneer het aankomt op complexe netwerk zaken zoals DHCP etc. Voor ervaren Arduino/Netwerk gebruikers zeker aan te raden.

Nadelen:

Ook hier weer het gedoe met de “print” functie om data te versturen, of beter gezegd: het ontbreken van een “print” functie.

Ik ben me bewust dat mijn gemopper omtrent de “print” functie een beperking van mijzelf is, maar ik vermoed dat er genoeg andere gebruikers zijn die tegen dezelfde beperking aanlopen. Hoe moeilijk moet het worden om een stukje tekst te versturen zonder buffers en arrays?

Ethercard is, net zoals UIPEthernet, niet echt compact en verbruikt dus best wat geheugen.

Download:

EtherCard vindt je ook op GitHub en op de Ethercard project pagina of natuurlijk op Tweaking4All.
Ook hier weer: kijk eerst op Github zodat je de meest recente versie hebt.

Download - Ethercard 

Bestandsnaam:  ethercard.zip
Platform:  Undefined
Versie: 
Omvang:  116.3 kB
Datum:  2017-02-25
 Download Nu  Stuur me Koffie    

Note: Update voor de nieuwere Arduino IDE (dank je Permutor!). Zie regel 10: “const” toegevoegd zodat we geen compiler error krijgen.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <EtherCard.h>

// Ethernet IP, default gateway en MAC adres
static byte myip[] = { 192,168,1,200 };
static byte gwip[] = { 192,168,1,1 };
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

byte Ethernet::buffer[500]; // tcp/ip send en receive buffer

const char page[] PROGMEM =
"HTTP/1.0 503 Service Unavailable\r\n"
"Content-Type: text/html\r\n"
"Retry-After: 600\r\n"
"\r\n"
"<html>"
  "<head><title>"
    "Hello World!"
  "</title></head>"
  "<body>"
    "<h3>Hello World! This is your Arduino speaking!</h3>"
  "</body>"
"</html>";

void setup(){
  Serial.begin(57600);
  Serial.println("\n[Hello World]");

  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
    Serial.println( "Toegang to Ethernet controller is mislukt");
  ether.staticSetup(myip, gwip);

  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);  
  ether.printIp("DNS: ", ether.dnsip);  
}

void loop(){
  // wacht op inkomend TCP packet, maar negeer de inhoud van het pakket
  if (ether.packetLoop(ether.packetReceive())) {
    memcpy_P(ether.tcpOffset(), page, sizeof page);
    ether.httpServerReply(sizeof page - 1);
  }
}

 

 

Arduino Library: UIPEthernet

Na wat dagen prullen met de eerste twee libraries, liep ik tegen UIPEthernet aan, wat op dit moment mijn favoriet is.

Onderstaande code mag er misschien complex uitzien, maar dat is mijn fout. Ik wilde “even snel” voorbeeld code voor een “Hello World!” voor jullie in elkaar gooien.

Voordelen:

Een van de belangrijkste voordelen is dat het geheel compatibel is met de standaard Ethernet Library die bij de Arduino IDE zit. Je kunt het dus als een drop-in vervanging gebruiken waarbij je alleen maar de twee include regels van de voorbeelden (“#include <Ethernet.h> ” and “#include <SPI.h> “) hoeft te vervangen met “#include <UIPEthernet.h>“.

Ook een groot voordeel is dat we hier een “print” functie hebben die WEL compleet is. Deze “print” functie werkt hetzelfde als de print functie die je gebruikt in “Serial” – mooi dus!

Ook de “pro” gebruiker zal niet teleurgesteld zijn omdat er legio geavanceerde functies beschikbaar zijn.

Nadelen:

Duidelijk groter dan ETHER_28J60.

Download:

UIPEthernet is ook op GitHub beschikbaar en je kunt het ook van Tweaking4All downloaden.
Kijk eerst op Github zodat je de meest actuele versie hebt.

Download - UIPEthernet 

Bestandsnaam:  arduino-uip.zip
Platform:  Undefined
Versie:  1.01
Omvang:  102 kB
Datum:  2014-03-23
 Download Nu  Stuur me Koffie    


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <UIPEthernet.h> // Voor Ethernet

// **** ETHERNET INSTELLINGEN ****
byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 };                                      
IPAddress ip(192, 168, 1, 179);                        
EthernetServer server(80);

void setup() {
  Serial.begin(9600);

  // start de Ethernet verbinding en de server:
  Ethernet.begin(mac, ip);
  server.begin();

  Serial.print("IP Adres: ");
  Serial.println(Ethernet.localIP());
}

void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();

  if (client)
  {  
    Serial.println("-> Nieuwe Verbinding");

    // een http request eindigt met een lege regel
    boolean currentLineIsBlank = true;

    while (client.connected())
    {
      if (client.available())
      {
        char c = client.read();

        // als je aan het einde van een regel bent (newline karakter ontvangen)
        // en de regel is leeg, dan zijn we aan het einde van een HTTP request gekomen,
        // en kunnen we een antwoord sturen
        if (c == '\n' && currentLineIsBlank)
        {
          client.println("<html><title>Hello World!</title><body><h3>Hello World!</h3></body>");
          break;
        }

        if (c == '\n') {
          // We beginnen met een nieuwe regel
          currentLineIsBlank = true;
        }
        else if (c != '\r')
        {
          // we ontvingen een karakter (niet einde regel)
          currentLineIsBlank = false;
        }
      }
    }

    // geef de browser tijd om de data te ontvangen
    delay(10);

    // sluit de verbinding:
    client.stop();
    Serial.println("   Einde verbinding\n");
  }
}

Ondersteun ons ...


Jouw ondersteuning wordt zeer gewaardeerd, en hoeft zelfs niets te kosten. Bijvoorbeeld door links naar ons te delen op social media, of andere websites.

Andere vormen kunnen ook gratis zijn (b.v. shoppen op Amazon).
Alle opbrengsten worden gebruikt voor web-hosting kosten, project hardware en software, koffie, etc.

Hartelijk dank voor wie al heeft bijgedragen!
Het is altijd geweldig om te zien hoe men mijn artikeltjes en applicaties weet te waarderen.

Merk op dat het klikken op affiliate links een kleine commissie voor ons kunnen genereren - dit wordt zeer gewaardeerd.

Reacties


Er zijn 30 reacties welke je hieronder kunt lezen.
Je kunt jouw eigen opmerkingen plaatsen m.b.v. dit formulier, of een reactie op een bestaande opmerking plaatsen door op de "Beantwoorden" knop te klikken.

  • 15 jun 2016 - 12:07 - Justin Reactie Link

    Goedenmiddag,
    is het mogelijk om hier ook een facebook like counter te kunnen maken?Ik heb namelijk bij mij stageplaats het idee bedacht om dit te maken alleen een ethernet shield vinden ze te veel kosten.
    met vriendelijke groet,
    Justin

    Beantwoorden

    Justin

    • 15 jun 2016 - 12:21 - hans - Auteur: Reactie Link

      Hi Justin,

      onmogelijk lijkt me dit niet, maar ik vrees dat de uitdaging ligt bij wat je bedoelt met en “Facebook Counter”.
      Het tellen van “likes” zal dan vast via een Facebook API moeten gedaan worden.

      Deze posts kunnen je op weg helpen;

      StackOverFlow – Getting the Facebook like/share count for a given URL
      Facebook API (niet 100% zeker hoe handig dit gaat zijn)

      Uiteindelijk bouw je een URL die de data op pikt van Facebook, met de Arduino kun je die ophalen, maar de terug komende data zul je wel even uit elkaar moeten halen in jouw eigen code.

      B.v. de volgende URL:

      https://api.facebook.com/method/fql.query?query=select%20total_count,like_count,comment_count,share_count,click_count%20from%20link_stat%20where%20url=%27//www.tweaking4all.com%27&format=json

      Levert:

      [{"total_count":43,"like_count":18,"comment_count":7,"share_count":18,"click_count":0}]

      Als je alleen de “likes” wilt tellen:

      https://api.facebook.com/method/fql.query?query=select%20like_count%20from%20link_stat%20where%20url=%27//www.tweaking4all.com%27&format=json

      levert:

      [{"like_count":18}]

      Natuurlijk weet ik niet precies wel opzet je in gedachten hebt, maar hopelijk helpt je dit op weg.

      Beantwoorden

      hans

  • 15 sep 2016 - 9:45 - Hans Reactie Link

    Beste,

    Je eerste voorbeeld gaat over het testen van Arduino Library: ETHER_28J60 en EtherShield.

    De download gaat echter om iets van Netgear met een paar vreemde bestanden er in. Ik heb ook geprobeerd het van Github te downloaden, deze is 4 maanden geleden geupdate, maar hier in is ook iets mis. de updater heeft zijn hele persoonlijke project er in geplaatst. Ik heb geprobeerd alleen de twee Librarys er uit te halen, zonder succes. Kan je mij op weg helpen? Ik wil hem gebruiken omdat hij vrij klein is.

    Beantwoorden

    Hans

    • 15 sep 2016 - 15:46 - hans - Auteur: Reactie Link

      Dank je wel Hans voor het opmerking van dit vreemde verschijnsel.

      Ik zal straks proberen uit te vogelen wat daar is misgegaan (ik zit op het moment op m’n werk … in the VS ).

      Beantwoorden

      hans

    • 15 sep 2016 - 16:01 - hans - Auteur: Reactie Link

      Na even snel kijken: stomme fout aan mijn kant.
      De link is nu aangepast en wijst naar het juiste bestand.

      Excuses voor het ongemak!

      Beantwoorden

      hans

      • 15 sep 2016 - 17:24 - Hans Reactie Link

        Hoi Hans,

        Mooi zo’n kleine wereld, jij in de VS en mij hier in Nederland helpen. Nu wel veel Hans op het scherm 

        Waar heb jij ze onder geplaatst om te testen? Ik heb Arduino 1.6 op mij raspberry staan.

        Beantwoorden

        Hans

      • 16 sep 2016 - 15:17 - hans - Auteur: Reactie Link

        Klein wereldje he? 

        Wat bedoel je met “waar heb jij ze onder geplaatst”? De download (hierboven) or in de Arduino IDE?

        Beantwoorden

        hans

  • 14 nov 2016 - 23:22 - Roy Reactie Link

    Beste Tweaking4all,

    Ik heb het UIPEthernet bibliotheek in gebruik genomen, maar telkens als ik jou voorbeeld code gebruik als test krijg ik de foutmelding :  invalid version found: 1.04
    Waar kan dit aan liggen. ik gebruik versie: 1.6.11 van arduino IDE.

    Alvast bedankt.
    Mvg,

    Roy

    Beantwoorden

    Roy

    • 15 nov 2016 - 14:59 - hans - Auteur: Reactie Link

      Hallo Roy!

      Voor zover ik begrijp is dat slechts een waarschuwing (zie ook deze Arduino Forum post).
      Volgens de beschrijving aldaar:

      Library UIPEthernet in de file library.properies regel 9.

      “version=1.04” moet veranderd worden naar “version=1.0.4” (dus een punt toevoegen tussen 0 en 4).

      Hopelijk helpt dit … 

      Beantwoorden

      hans

      • 16 nov 2016 - 0:29 - Roy Reactie Link

        Hallo Hans, Bedankt voor de Reply. Ik heb nu geen errors meer. en het lijkt alsof alles netjes upload naar de Nano. Nu komt mijn volgende vraag:
        Na de upload herstart hij zelf en ga ik er vanuit dat hij dan ook het netwerk moet starten, maar dit gebeurt niet(lampjes gaan niet branden van ethernet). mis ik nog iets?
        Ik heb de nano v3 met de deek-robot ethernet shield eronder. mag hij niet op usb gevoed worden ofzo?

        Alvast bedankt.

        Beantwoorden

        Roy

      • 16 nov 2016 - 15:16 - hans - Auteur: Reactie Link

        Hoi Roy,

        ik heb zelf geen Nano/Deek shield, dus ik kan het e.e.a. niet bevestigen voor die combinatie.
        Voor de ENC28J60 met een Arduino Uno geld dat het inderdaad meteen actief is. Het kan zijn dat je een initialisatie moet uitvoeren in “setup()”. Iets wat al gedaan wordt in de voorbeeld code;

        void setup(){
          Serial.begin(57600);
          Serial.println("\n[Hello World]");
          if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) 
            Serial.println( "Toegang to Ethernet controller is mislukt");
          ether.staticSetup(myip, gwip);
          ether.printIp("IP: ", ether.myip);
          ether.printIp("GW: ", ether.gwip);  
          ether.printIp("DNS: ", ether.dnsip);  
        }

        Misschien dat de Deek shield even een kleine wachttijd nodig heeft voor de initialisatie?

        b.v.

        Delay(1000);

        voor we “if (ethernet.begin” aanroepen?
        (zie je een melding via de serial “Toegang to Ethernet controller is mislukt”?)

        Dus zoiets:

        void setup(){
          Serial.begin(57600);
          Serial.println("\n[Hello World]");
          Delay(1000); // even wachten
          if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) 
            Serial.println( "Toegang to Ethernet controller is mislukt");
          ether.staticSetup(myip, gwip);
          ether.printIp("IP: ", ether.myip);
          ether.printIp("GW: ", ether.gwip);  
          ether.printIp("DNS: ", ether.dnsip);  
        }
        Beantwoorden

        hans

  • 24 feb 2017 - 21:46 - Permutor Reactie Link

    Fijn om ook eens een Nederlandstalige Arduino tweaker te zien.
    Bij de download van de UIPEthernet raad je twee bronnen aan: a) GitHub en b) Tweaking4All. 
    Op GitHub zie ik nu v1.0.9.
    Maar de download link bij Tweaking4All verwijst naar  “Name My TV Series…”. Dit is dan weer even jammer, want dat is duidelijk niet wat wij zoeken. Om het verwarrender te maken kloppen de groottes weer wel.

    Beantwoorden

    Permutor

    • 25 feb 2017 - 20:31 - hans - Auteur: Reactie Link

      Hoi Permutor!

      Als eerste hartelijk dank voor het compliment en het doorgeven van een kleine blunder aan mijn kant (ik heb het meteen opgelost!).
      De Github versie is uiteraard actueler … dus ik adviseer dan ook die versie te gebruiken. De oude versie laat ik nog even staan, omdat het artikel zich hier op richt, maar ik zal proberen deze te updaten in de toekomst.

      Beantwoorden

      hans

  • 25 feb 2017 - 17:05 - Permutor Reactie Link

    Ik heb jouw tweede code sample met de ‘ethercard’  library geprobeerd met IDE 1.81, maar ik krijg daarbij een compiler error.

    De oplossing is in regel 10 het woord ‘const ‘ te plaatsen voor de code ‘char page[] PROGMEM =’.

    Kennelijk ziet de compiler dat page[] nooit gewijzigd wordt en eist de compiler dat het dan als constante gedefinieerd wordt.

    Beantwoorden

    Permutor

    • 25 feb 2017 - 20:43 - hans - Auteur: Reactie Link

      Nog een keer hartelijk dank haha … mooi om te zien dat het artikel werkelijk bekeken wordt .
      Ik snap alleen niet waarom de compiler hier zo mee omgaat, maar ik heb de code aangepast en meteen ook maar de meest recent versie van EtherCard geplaatst). 

      Beantwoorden

      hans

      • 25 feb 2017 - 20:56 - Permutor Reactie Link

        Oh zeker wel Hans.
        In mijn onschuld, en gewoonte om te shoppen bij goedkope Chinese websites, heb ik namelijk wel ethernet shields, maar dan op basis van de ENC28J60, en niet de W5100. Daarom is jouw artikel zo interessant.
        Weet je overigens iets van de status van https://forum.mysensors.org/topic/536/problems-with-enc28j60-losing-connection-freezing-using-uipethernet-or-ethershield-read-this ? Hier wordt een stabiliteits issue beschreven met juist deze ENC28J60 chipset. De oplossing zou sowieso zijn gebruik te maken van W5100, maar je weet… als het goedkoper kan… ;-)

        Beantwoorden

        Permutor

        • 26 feb 2017 - 15:21 - hans - Auteur: Reactie Link

          Haha, zo kwam ik ook bij de ENC28J60 terecht … lekker goedkoop, maar misschien uiteindelijk toch minder handig.

          Voor wat de onbetrouwbaarheid betreft (en de ontwikkelaar van UIPEthernet is hier ook van op de hoogte), heb ik de volgende aanpak gebruikt (kijk ook eens naar het Ethernet Push artikel – helaas heb ik die oplossing nog niet meegnomen in de andere artikeltjes).

          Vervang:

              if (client.connect(server, 80)) 
              {

          Door:

              if (!client.connect(server, 80)) {
                Serial.println("-> Connection failure detected: Resetting ENC!"); // only use serial when debugging
                Enc28J60.init(mac);
              } else {
                client.stop();
              } 
              
              if (client.connect(server, 80)) 
              {

          Dus als er geen connectie lijkt te zijn: Init de ENC28J60.
          Niet de beste methode natuurlijk, maar bij mij lijkt dat het probleem op te lossen.

          Beantwoorden

          hans

          • 3 mrt 2017 - 8:42 - Permutor Reactie Link

            Hans, dank voor je reactie. En vooral ook voor je beschrijving van de workaround. Over de instabiliteit is best veel te doen omdat er kennelijk verkeerd geïmplementeerde aanpassingen in de libraries zitten, met name UIPEthernet. En die is juist handig omdat het een drop-in vervanger is van de Arduino standaard W5100 ethernet oplossing.
            Ik ben nu even bezig met het onderzoeken hoe email te versturen vanaf de Arduino. Via mijn provider’s mail lukt dat, zij het nog niet betrouwbaar. Ik wilde eigenlijk via GMail werken, maar die vereist een encrypted verbinding en dat is nu wat te hoog gegrepen. Ik heb gezien dat er via Temboo choreos te verkrijgen zijn. Echter Temboo duwt je naar een betaald account, en het Enterprise account is over-the-top. Wellicht heb jij hier nog suggesties. Zelf ben ik nu GroveStreams aan het onderzoeken.

            Permutor

          • 3 mrt 2017 - 15:32 - hans - Auteur: Reactie Link

            Ik moet zeggen dat de ontwikkelaar van UIPEthernet (Norbert als ik me niet vergis) het toch best goed gedaan heeft, en voorzover ik kan zien ontwikkelt hij nog steeds actief door. Ik weet eerlij gezegd niet of het een fout in de library is of een issue van de ENC28J60. Ik las destijds dat dit een bekend probleem is voor de ENC28J60, en ik heb een aantal keren met Norbert gekeken naar wat de correcte oplossing zou zijn. Een echte goede oplossing was er niet, behalve de work-around die ik zelf bedacht: geen verbinding te maken? Reset de Ethernet module.

            Maar … ik heb hier een paar ESP8266’s liggen en ik wil proberen daar wat tijd voor te maken. Erg goedkoop, WiFi ingebakken, en zou Arduino compatible te gebruiken moeten zijn.

            hans

          • 3 mrt 2017 - 15:32 - hans - Auteur: Reactie Link

            Ik heb overigens deze ESP8266’s liggen …

            hans

          • 3 mrt 2017 - 16:15 - hans - Auteur: Reactie Link

            Wat jouw mail situatie betreft; Ja encryptie is wat hoog gegrepen voor een Arduino.
            Ik zag wat lieden http://www.smtp2go.com/ gebruiken (zie ook dit onderwerp op de Arduino website).
            Uiteraard zou je als alternatief, in huis, een kleine SMTP mailserver kunnen draaien die vanuit jouw eigen netwerk niet versleutelde verbindingen accepteert en dan vervolgens de mail doorstuurt naar Gmail.

            hans

          • 5 mrt 2017 - 11:38 - Permutor Reactie Link

            Hans,

            Uit jouw reactie merk ik dat we grotendeels met dezelfde dingen bezig zijn. De ontwikkelaar van de library is inderdaad Norbert Truchsess uit Duitsland. Zijn gegevens staan gewoon in de library.properties file. Ik denk dat met de libraries goed te werken is, als je je maar bewust bent van dat stabiliteits dingetje en de workaround toepast zoals jij al hebt laten zien.

            Met GroveStreams ben ik inmiddels een stuk verder. Dat werkt erg goed. Een aanrader is deze tutorial: Getting Started Arduino Temp

            Ik moest wel iets aanpassen om de ENC28J60 te kunnen gebruiken. Hun voorbeeld sketch hangt namelijk direct bij het verbinden. En dat is omdat de startEthernet routine begint met client.stop() en dan hangt ‘ie. Door te forceren dat die dat de eerste keer juist niet mag doen is het opgelost. Ik denk dat ik dat nog bij hun aan support mag melden.

            Over de mail: zoals gesteld zijn steeds meer grote provider onafhankelijke aanbieders overgegaan naar verplichte encryptie. Maar het is mij wel gelukt via de SMTP server van mij eigen provider. Ik heb dus een oplossing. Maar ik ga dat SMTP2GO ook eens bekijken. Een eigen mailserver klinkt leuk, maar dat is nou net wat ik niet wil hebben en onderhouden…

            Dan noem je de ESP8266. Tja, daar wilde ik nu eigenlijk ook eens naar kijken. Er is zo ontzettend veel op dat gebied. Met ingebouwde WiFi en Arduino compatibiliteit is dat heel interessant. Overigens heeft mijn neef hier een PyCom achtergelaten. Daar zit WiFi, BlueTooth en LoRa in. Ik ben er helaas nog niet aan toegekomen.

            Hier is een aardig stukje dat compile error since IDE 1.5.8 het prog_char gedoe uitlegt. Alleen jammer dat het daarna verder gaat met PROGMEM geneuzel. Volgens Michael Margolis boek “Arduino Cookbook”, 2nd edition, paragraaf 17.5, worden alle constanten in het flash geheugen gezet om RAM te besparen. In dezelfde ruimte als het programma zelf dus. En dat is waar ‘prog_char’ voor gebruikt werd.

            Permutor

          • 5 mrt 2017 - 19:33 - hans - Auteur: Reactie Link

            Het lijkt erop dat we inderdaad met dezelfde dingen aan het spelen zijn .

            Wat email betreft; ja de vereiste encryptie tegenwoordig is wel flink onhandig – maar helaas brood nodig.
            Het SSL deel is waarschijnlijk net even te gortig voor de Arduino z’n reken- en geheugencapaciteit.
            Ik bedenk me net echter dat met slimme PHP code op een webserver, berichten verstuurd kunnen worden – Alleen maar email adres, onderwerp en email tekst via een form uploaden naar een PHP pagina waar dan PHP het hele email verhaal opbouwt en verstuurd. Om misbruik te voorkomen natuurlijk wel een “geheime” code meesturen ter verificatie.

            Ik wil ook erg graag met de ESP8266 aan de slag – maar helaas, werk en dagelijkse activiteiten zorgen ervoor dat ik maar weinig tijd heb om dat soort dingen te doen. Toch maar eens een sponsor gaan zoeken 

            hans

          • 5 mrt 2017 - 19:38 - hans - Auteur: Reactie Link

            Overigens vindt ik dit soort toepassingen heel erg leuk – de commerciële oplossingen zijn leuk en eenvoudig in gebruik, maar ik heb er een bloedhekel aan dat ik afhankelijk wordt van diensten die door derden geleverd moeten worden (zoals ook in het e-mail voorbeeld).

            Afgelopen week een mooi voorbeeld;

            1) Amazon ging plat voor een uurtje of 4 … Dus m’n Amazon Echo werkte niet meer, geen muziek, geen besturing van lampen met m’n stem commando’s etc.

            2) TP-Link ging de dag erna een middag onderuit … Dus weer kon ik niet mijn lampen met m’n stem bedienen.

            En op dit moment zijn deze diensten gratis, maar hoe lang gaat het duren voor dat dit ook weer een abonnement gaat worden? Dus ik blijf het liefste onafhankelijk en wil daarom ook graag zelf aan de slag met dit spul … 

            hans

  • 25 feb 2017 - 20:53 - Permutor Reactie Link

    Hi Hans,

    Jouw eerste code-sample heb ik nu ook aan de praat, maar er moet wel iets gewijzigd worden. De compiler klaagt over het gebruik van ‘prog_char’, om precies te zijn in de file included from H:\Documents\Project Arduino networking\ENC28J60 Tutorial\p01_HelloWorld\p01_HelloWorld.ino:3:0:

    C:\Users\…\Documents\Arduino\libraries\etherShield/etherShield.h:34:65: error: ‘prog_char’ does not name a type

        uint16_t ES_fill_tcp_data_p(uint8_t *buf,uint16_t pos, const prog_char *progmem_s);

    ==> Na onderzoek blijkt dat dit gewoon vervangen moet worden door ‘char’.

    Dit moet op 4 plaatsen gebeuren in de library:

    + etherShield.h

    + etherShield.cpp

    + ip_arp_udp_tcp.h

    + ip_arp_udp_tcp.cpp

    We hebben dus nog een keer te maken met wijzigingen in de IDE compiler

    Beantwoorden

    Permutor

    • 26 feb 2017 - 15:26 - hans - Auteur: Reactie Link

      Dat is vreemd, ik krijg die melding hier niet … 
      Bij mij complieert de library gewoon, zonder een enkele melding.
      Voor ik de verwarring compleet maak – welke Library gebruik je? UIPEthernet?

      Beantwoorden

      hans

      • 3 mrt 2017 - 8:45 - Permutor Reactie Link

        Het eerste voorbeeld is juist met:  #include “EtherShield.h”  en #include “ETHER_28J60”.

        Daarbij moet ik dus de prog_char aanpassen.

        Beantwoorden

        Permutor

        • 3 mrt 2017 - 15:28 - hans - Auteur: Reactie Link

          Thanks! 

          Altijd goed om extra info toe te voegen aan het artikel, zeker naarmate dingen zich verder ontwikkelen.
          Dank je wel!

          Beantwoorden

          hans

  • 2 mei 2017 - 21:01 - Jan Willem Reactie Link

    Hallo Hans,

    Ik heb de library’s  ether 28j60 enetherShield  gedounwload en kreeg ook diverse foutmeldingen

    ik gebruikte Arduino 1.6.7

    Met Arduino 1.5 ging alles goed en had geen foutmeldigen.

    Misschien een hint voor een ander

    Beantwoorden

    Jan Willem

    • 3 mei 2017 - 16:39 - hans - Auteur: Reactie Link

      Hallo Jan Willem!

      Dank je voor het plaatsen van de tip. Op de Engelstalige versie van deze pagina beschreef iemand hoe hij dat wirst op te lossen (link).

      Verwijder de Arduino IDE, en de libraries. Installeer de meest actuele Arduino IDE (ik geloof dat dit 1.8.1 op het moment is) en haal de meest actuele library van GitHub. Hopelijk lost dit het probleem op. 

      Beantwoorden

      hans



Jouw Opmerking ...

Plaats hier geen grote bestanden (zoals source codes, log files of config files). Gebruik hiervoor het Forum.

Delen:
*
*
Laat me per email weten als er nieuwe reacties zijn.
       Je kunt jouw RSS reader gebruiken om reacties te volgen.


Tweaking4All gebruikt de gratis Gravatar dienst voor Avatar weergave.