
Ik heb een ENC28J60 ethernetkaart aangesloten op een Arduino Uno. Vervolgens heb ik enkele libraries geprobeerd om de kaart aan te sturen, dat lukt wel, maar niet alle libraries werken goed.
In het Arduino programma zit al een ethernet library met voorbeelden erbij, maar die kreeg ik niet werkend.
Mijn bedoeling is om data met een "push" methode naar een webserver te sturen. Een heel mooi voorbeeld staat op: http://www.tweaking4all.nl/hardware/arduino/arduino-ethernet-data-push/ deze methode werkt wel, maar mijn ENC28J60 kaart stopte na 3 of 4x met het sturen van data :-(
De ethercard library werkt wel! De library voor ethercard met voorbeelden is hier te downloaden: https://github.com/jcw/ethercard (aan de rechterzijde van de bladzijde op "Download ZIP" klikken).
Deze library gebruikt een iets afwijkende nummering voor de aansluitingen:
Arduino Uno pennen voor ethernet card: 8 = CS, 11 = SI, 12 = SO, 13 = SCK. En verder aansluiten: GND en 3,3V naar VCC.
Ik ben begonnen met dit script (het voorbeeld script webClient):
// Demo using DHCP and DNS to perform a web client request.
// 2011-06-08 <Dit e-mailadres wordt beveiligd tegen spambots. JavaScript dient ingeschakeld te zijn om het te bekijken. > http://opensource.org/licenses/mit-license.php
#include <EtherCard.h>
// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
byte Ethernet::buffer[700];
static uint32_t timer;
const char website[] PROGMEM = "www.google.com";
// called when the client request is complete
static void my_callback (byte status, word off, word len) {
Serial.println(">>>");
Ethernet::buffer[off+300] = 0;
Serial.print((const char*) Ethernet::buffer + off);
Serial.println("...");
}
void setup () {
Serial.begin(57600);
Serial.println(F("\n[webClient]"));
if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
Serial.println(F("Failed to access Ethernet controller"));
if (!ether.dhcpSetup())
Serial.println(F("DHCP failed"));
ether.printIp("IP: ", ether.myip);
ether.printIp("GW: ", ether.gwip);
ether.printIp("DNS: ", ether.dnsip);
if (!ether.dnsLookup(website))
Serial.println("DNS failed");
ether.printIp("SRV: ", ether.hisip);
}
void loop () {
ether.packetLoop(ether.packetReceive());
if (millis() > timer) {
timer = millis() + 5000;
Serial.println();
Serial.print("<<< REQ ");
ether.browseUrl(PSTR("/foo/"), "bar", website, my_callback);
}
}
Om data te versturen naar je eigen website, pas je de volgende regels aan:
const char website[] PROGMEM = "www.google.com";www.google.com wijzig je in je eigen domeinnaam of IP adres. Als hier een fout in zit, dan krijg je een DNS foutmelding in het status scherm van de Arduino.
Met de volgende regel kun je vervolgens één of meerdere variabelen naar je website sturen:
ether.browseUrl(PSTR("/foo/"), "bar", website, my_callback);Wijzigen in bijvoorbeeld:
ether.browseUrl(PSTR("/data/index.php?sensor=temperatuur&waarde="), "21", website, my_callback);
Als het werkt, dan wordt je website aangeroepen met de volgende link:
www.mijn_website.nl/data/index.php?sensor=temperatuur&waarde=21
Vervolgens kun je met $_GET['sensor'] en $_GET['waarde'] de 2 waarden uitlezen en bijvoorbeeld opslaan in een database.