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
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
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
Mijn ENC28J60 test opstelling
Ad Blocking Gedetecteerd Vriendelijk verzoek om te overwegen Ad Blocking uit te zetten voor onze website.
We zijn afhankelijk van inkomen uit Advertenties om de website te kunnen draaien.
Je kunt ons ook op andere manieren ondersteunen (zie Ondersteun ons links bovenin).
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.
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.
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");
}
} |
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.
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
Justin
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:
Levert:
Als je alleen de “likes” wilt tellen:
levert:
Natuurlijk weet ik niet precies wel opzet je in gedachten hebt, maar hopelijk helpt je dit op weg.
hans
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.
Hans
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 ).
hans
Na even snel kijken: stomme fout aan mijn kant.
De link is nu aangepast en wijst naar het juiste bestand.
Excuses voor het ongemak!
hans
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.
Hans
Klein wereldje he?
Wat bedoel je met “waar heb jij ze onder geplaatst”? De download (hierboven) or in de Arduino IDE?
hans
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
Roy
Hallo Roy!
Voor zover ik begrijp is dat slechts een waarschuwing (zie ook deze Arduino Forum post).
Volgens de beschrijving aldaar:
Hopelijk helpt dit …
hans
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.
Roy
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;
Misschien dat de Deek shield even een kleine wachttijd nodig heeft voor de initialisatie?
b.v.
voor we “if (ethernet.begin” aanroepen?
(zie je een melding via de serial “Toegang to Ethernet controller is mislukt”?)
Dus zoiets:
hans
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.
Permutor
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.
hans
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.
Permutor
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).
hans
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… ;-)
Permutor
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:
Door:
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.
hans
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
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
Ik heb overigens deze ESP8266’s liggen …
hans
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
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
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
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
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
Permutor
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?
hans
Het eerste voorbeeld is juist met: #include “EtherShield.h” en #include “ETHER_28J60”.
Daarbij moet ik dus de prog_char aanpassen.
Permutor
Thanks!
Altijd goed om extra info toe te voegen aan het artikel, zeker naarmate dingen zich verder ontwikkelen.
Dank je wel!
hans
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
Jan Willem
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.
hans