Der Arduino ist eigentlich nichts anderes als ein Atmega µContoller (beim Uno ein Atmega328) dem man in ein kompatibles Stecksystem gebaut und mit einer komfortablen Programmierumgebung versehen hat.
Da Atmega nicht direkt an einer USB Schnittstelle funktioniert wurde dem Bord noch ein Atmega16u verpasst der die USB Schnittstelle händelt.

Im Atemga328  ist eine Bootsoftware installiert die die Software über die serielle Schnittstelle lädt.  Wer die Programmierumgebung nicht benötigt kann auch über die ISP Schnittstelle programmieren. Der Bootloader lässt sich auch entfernen dann hat man noch mehr Speicher zur Verfügung es ist dann aber kein Arduino mehr.

Installation des Bootloader...  in kürze.

 

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.
Ethernetshield für Arduino


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.

 

 

 

 

 

 

 

 

 

smr200

 

Luftfeuchtigkeit messen mit dem dem DHT11,

ist eigentlich ganz einfach da das ganze handling und timig von einer Libary ausgeführt wird. Die Libary benennt die Pins etwas anders. Der Pin 15 im Scetch ist tatsächlich A1 am Arduino.

anschluss

Der Anschluss ist ganz einfach.

Hier der fertige Scetch mit LCD und Ausgabe aufs Terminal. Ganz einfach da hier eine Libary (von Ladyada) verwendet wird.

Der Widerstand wird auf einigen Seiten auch mit kleineren Werten angeben. Bei mir funzt es nur mit 10kOhm.

 

#include "DHT.h" //von ladyada: https://github.com/adafruit/DHT-sensor-library
#define DHTPIN 15 // benutzter ARDUINO-Pin (Analog-Pin 1)

#include <LiquidCrystal.h>
LiquidCrystal lcd(9, 8,4,5,6,7); // diese Pins werden für das Display benötigt.

#define DHTTYPE DHT11 // DHT 11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
Serial.begin(9600);
Serial.println("DHT11-Test");

lcd.clear(); // LCD loeschen
lcd.begin(16, 2); // fuer LCD1602
dht.begin();
}

void loop() {
// Das Erfassen von Temperatur und Luftfeuchtigkeit benoetigt ca. 250 Millisekunden.
float h = dht.readHumidity();
float t = dht.readTemperature();

// Check, ob die Daten Zahlen sind, falls nicht (NaN: not a number), ist was falsch gelaufen!
if (isnan(t) || isnan(h))
{
Serial.println("Fehler beim Lesen vom DHT-Sensor");
}
else
{

Serial.print("Feuchtigkeit: ");
Serial.print(h);
Serial.print(" %\t ");
Serial.print("Temperatur: ");
Serial.print(t);
Serial.println(" Grad Celsius");

lcd.setCursor(0,0);
lcd.print("Feuchtigk.:");
lcd.print(h);
lcd.setCursor(0,1);
lcd.print("Temperatur:");
lcd.print(t);

}
}

 

Login Form