Vergest den Beitrag nehmt einen EPS8266 oder Wemos D1 mini. Alles drauf billiger und läuft in der ArduinoIDE
Mit Arduino ins Netzwerk oder sogar ins Internet kein Problem.
In den Beisplielen muss lediglich die IP-Adresse an Euer Netzwerk angepasst werden.
Auch die MAC-Adresse wird über das Programm gesetzt (Das hat mich überrascht). Es muss darauf geachtet werden, das sie genau wie die IP nicht schon mal im Netztwerk existiert.
In den Examples unter Ethernet ist das Programm "Webserver" Es gibt den Wert der Analogschnittstellen in HTML aus.
Weiterhin in den Examples unter SD ein Programm, mit dem sich die SD-Karte (nicht im Lieferunfang) testen lässt.
Hier vorab ein Programm mit dem sich ein Led an Digital 8 ein und ausschalten lässt. Die Libary ist in dem Standarddownload von der Arduinoseite enthalten.
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 177);
EthernetServer server(80);
void setup()
{
Serial.begin(9600);
pinMode(8, OUTPUT);
Ethernet.begin(mac, ip);
server.begin();
}
void loop()
{
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
String buffer = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.print(c);
buffer+=c;
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
if (digitalRead(8)){
client.print(" LED is <font color='red'>OFF</font>");
}else{
client.print(" LED is <font color='green'>ON</font>");
}
client.println("<br />");
client.print("<FORM action=\"http://192.168.1.177\" >");
client.print("<P> <INPUT type=\"radio\" name=\"status\" value=\"0\">Off");
client.print("<P> <INPUT type=\"radio\" name=\"status\" value=\"1\">On");
client.print("<P> <INPUT type=\"submit\" value=\"Submit\"> </FORM>");
break;
}
if (c == '\n') {
currentLineIsBlank = true;
buffer="";
} else if (c == '\r') {
if(buffer.indexOf("GET /?status=0")>=0)
digitalWrite(8,HIGH);
if(buffer.indexOf("GET /?status=1")>=0)
digitalWrite(8,LOW);
}
else {
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop();
}
}
Das Funktioniert im lokalem Netztwerk. Um den Zugriff übers Internet zu ermöglichen muss der Port ( meistens) 80 auf die dem Ethershield zugeordnete IP-Adresse geroutet werden. Findet man bei einigen Routern unter Firewalleinstellungen oder virtuell Server.
Da die meisten von Euch ja die öffentliche IP-Adresse von Ihrem Provider dynamisch zugewiesen bekommen, muss hier auch noch Dyn Dns aktiviert werden.
Leider ist der amerikanische DynDns.org nicht mehr kostenlos.
Wenn ich eine Lösung gefunden habe teile ich das hier mit.
Ethershield 1.1 Yes it works.
Es wird noch ein anderes Ethershield angeboten für das es eine andere Libary gibt.
#include "etherShield.h"
#include "ETHER_28J60.h"
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;
ETHER_28J60 e;
int ledPin = 5;
void setup()
{
pinMode(ledPin, OUTPUT);
e.setup(mac, ip, port);
analogReference(INTERNAL);
Serial.begin(9600);
}
void loop()
{
float analog = analogRead(0);
float temp = (analog * 1.1/1024*100);
delay(10);
char celsius[4];
dtostrf(temp,4,1,(celsius));
if (e.serviceRequest())
{
e.print("<html><head><title>Temperatur TEST</title><meta http-equiv='Refresh' content='1'></head><body>");
e.print("<h2><center>Temperatur in Celsius: ");
e.print (celsius);
e.print("<br>");
e.print("<br>LED ein bei 26");
if (temp >= 26) {
digitalWrite(ledPin,HIGH);
e.print("<br><img src='http://ebay.jkrumm.de/lichtan.png'></img>");
}
else {
digitalWrite(ledPin,LOW);
e.print("<br><img src='http://ebay.jkrumm.de/lichtaus.png'></img>");
}
e.respond();
}
if (temp >= 26) {
digitalWrite(ledPin,HIGH);
}
else {
digitalWrite(ledPin,LOW);
}
delay(10);
}
Hier ein Sketch der einen LM35 auswertet, abhängig von der Temperatur ein Led ein und ausschaltet.