beelogger

LAN-Adapter – WIZnet W5100

Die Verwendung des LAN-Adapters ist im Wesentlichen für die Systeme mit Bienenzähler oder für den beelogger-Funk (Master) vorgesehen. Auch der Ur-beelogger ‘beelogger-Standard’ ist für den LAN-Adapter konzipiert. Um eine drahtgebundene Verbindung vom beelogger zum Webserver herzustellen kann der Netzwerkadapter verwendet werden. Mit Hilfe eines WLAN-Routers ist auch die Anbindung an WLAN möglich.
Der beelogger-Universal mit/ohne Bienenzähler, der beelogger-mit µC STM32… und der beelogger-SMD unterstützt die WLAN-Anbindung direkt unter Verwendung eines ESP8266-Moduls.

Es gibt zwei gebräuchliche Chips für LAN-Adapter für den Arduino:

  • W5100
  • ENC28J60

Im Internet sind viele Beiträge über die Unterschiede dieser beiden Adapter zu finden, worauf hier aber nicht näher eingegangen wird. Da der WIZnet W5100 über eine Arduino-Standard-Library bereits integriert, gut dokumentiert und nur unwesentlich teurer als der  ENC28J60 ist, bezieht sich der Programmcode für den beelogger auf Adapter mit diesem Chip.

Bezug

Den W5100 gibt es als Shield beispielsweise für den Arduino Uno oder als Board. Das Ethernet-Board ist relativ klein und kann somit gut verbaut werden.

Das WIZnet W5100-Board ist kompatibel mit beelogger-Universal .
 Bild Bezugsquelle Preis ab Suchbegriffe* Bemerkungen
 beelogger W5100 Adapter eBay 5,80€ Arduino Ethernet LAN Network W5100 WIZnet

Board,

beelogger-Universal:
5V-Version

beelogger-EasyPlug:
3,3V und 5V Version

 beelogger W5100 Shield eBay 5,90€ Arduino Ethernet LAN Network W5100 WizNet Shield Shield für Arduino Uno

*Einkaufstipps

Beschaltung

Sofern kein kompatibles Shield zum Aufstecken verwendet wird, sind folgende Verbindungen vorzunehmen.

Arduino Uno, Nano, usw. W5100
3,3V / 5V (abhängig vom Board) VCC
GND GND
RESET RESET
D10 / SS CS / SS /NSS
D11 / MOSI MOSI
D12 / MISO MISO
D13 / SCK SCK

Libraries

<SPI.h> – in der Arduino-Software bereits integriert
<Ethernet.h> – in der Arduino-Software bereits integriert

Test-Programmcode

beelogger W5100 TestDer Test-Programmcode setzt voraus, dass der Webserver erfolgreich aufgesetzt und vom LAN-Adapter physikalisch zu erreichen ist. Bei Erfolg wird alle 10 Sekunden ein Datensatz an den Webserver gesendet und in der Datei ‘beelogger.csv’ gespeichert. Nach jedem Versand werden die Werte der Variablen um 1 erhöht.

Der Programmcode arbeitet mit einer Checksumme zur Fehlerkorrektur, womit auf dem Webserver die Integrität der empfangenen Daten geprüft und der Arduino bei einem Fehler dazu veranlasst wird, die Daten erneut zu senden. Bei korrupten Daten, die vom Webserver empfangen werden oder bei Verbindungsproblemen, sind vier Wiederholungen eingestellt.

Im Programmcode kann zudem eingestellt werden, ob der Ethernet-Adapter seine Konfiguration über DHCP bezieht oder ob die eingestellten Werte der eigenen Konfiguration verwendet werden. Hierzu ist eine der beiden Optionen auszukommentieren. Als Standard ist der Bezug der Konfiguration über DHCP aktiviert. Durch die Auskommentierung der DHCP-Funktion und Aktivierung der eigenen Konfiguration, werden über 3kB Speicherplatz auf dem Arduino eingespart!

Zur Programmierung darf der Ethernetadapter nicht mit dem Arduino verbunden sein.

Konfiguration über DHCP:

if (Ethernet.begin(mac) == 0) Serial.println("Fehler bei der Konfiguration des Ethernet-Adapters ueber DHCP");

Konfiguration über eingestellte Werte der allgemeinen Konfiguration:

Ethernet.begin(mac, ip, dnServer, gateway);
/*
 * (C) 2015 Thorsten Gurzan - beelogger.de
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

// beelogger.de - Arduino Datenlogger für Imker
// Erläuterungen dieses Programmcodes unter https://beelogger.de

#include <SPI.h>
#include <Ethernet.h> 

// ************** start Konfiguration *****************

// Hier muss eine eigene IP-Adresse, Gateway und DNS eingetragen werden, 
// wenn die Netzwerkkonfiguration nicht über DHCP bezogen wird
// Sofern nicht mehrere Ethernet-Apdater gleichzeitig verwendet werden, 
// braucht die MAC-Adresse nicht geändert werden
// Bitte darauf achten, dass die Adressen im Netzwerk nicht doppelt vergeben sind
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,10);
IPAddress gateway(192,168,0,1);
IPAddress dnServer(192,168,0,1);

// Domainname zum Webserver mit beelogger-Skript
const char serverName[] PROGMEM = "community.beelogger.de"; //"meineDomain.de";

// GET mit Verzeichnis auf dem Webserver und PHP-Skript für den jeweiligen beelogger
// Mit Anzahl_Sensoren_Gewicht
// 0/1 - Bsp: "GET /USERX/beelogger1/beelogger_log.php?"

const char beelogger_pfad[] PROGMEM = {"GET /USERX/beeloggerY/beelogger_log.php?"};   // "USERX" und "beeloggerY" ersetzen


// Passwort vom Webserver-Skript
const char Passwort[] PROGMEM = "Log";  // hier dein beelogger-log - Passwort


// ************** ende Konfiguration  *****************
 
EthernetClient client;

// Test-Messdaten (regulär kommen die Messdaten von den Sensoren)
float TempIn = 25.00;
float TempOut = 35.00;
float FeuchteIn = 40.00;
float FeuchteOut = 60.00;
float Licht = 5000.00;
float Gewicht = 25.00;
long BienenIn = 200;
long BienenOut = 500;

long Check;

void setup() {
  Serial.begin(9600);
  delay(5000);
 
  pinMode(4,OUTPUT);    // Pin 4 wird für die Deaktivierung der SD-Karte genutzt, 
  digitalWrite(4,HIGH); // falls ein entsprechendes Ethernet-Shield mit SD-Adapter verwendet wird 

  // Für Verwendung der Konfiguration über DHCP
  if (Ethernet.begin(mac) == 0) Serial.println("Fehler bei der Konfiguration des Ethernet-Adapters ueber DHCP");

  // Für Verwendung die eigenen Konfiguration
  // Ethernet.begin(mac, ip, dnServer, gateway);      
       
  delay(1000);
}


void loop() {
  char parameter[80];
  
  Check = round(TempIn + TempOut + FeuchteIn + FeuchteOut + Licht + Gewicht + BienenIn + BienenOut);

  Serial.println(F("Verbinde zum Server ..."));

  for (byte i = 0; i < 5; i++) {  // Anzahl der Wiederholungen bei Verbindungsproblemen
    // oder korrupten Daten, die vom Webserver empfangen werden

    strcpy_P(parameter, serverName); // Server
    Serial.println(parameter);
    Serial.flush();

    if (client.connect(parameter, 80)) {
      strcpy_P(parameter, beelogger_pfad); // der GET in einen Stück bis zum '?'
      client.print(parameter);
      Serial.println(parameter);
      Serial.println(" ");
      Serial.flush();

      client.print ("&TempIn="); 
      client.print (TempIn);
 
      client.print ("&TempOut=");
      client.print (TempOut);
 
      client.print ("&FeuchteIn=");
      client.print (FeuchteIn); 
 
      client.print ("&FeuchteOut=");
      client.print (FeuchteOut); 
 
      client.print ("&Licht=");
      client.print (Licht);
 
      client.print ("&Gewicht=");
      client.print (Gewicht);
 
      client.print ("&BienenIn=");
      client.print (BienenIn); 
 
      client.print ("&BienenOut=");
      client.print (BienenOut);
 
      client.print ("&Check=");
      client.print (Check);
 
      client.print ("&Passwort=");
      client.print (Passwort);
 
      client.println (" HTTP/1.1");
      client.print("Host:");
      strcpy_P(parameter, serverName); // Server
      client.println(parameter);
      client.println("Connection: close");
      client.println(); 
 
      delay(1000);
 
      Serial.println(F("Verbindung erfolgreich")); 
 
    } else Serial.println(F("Verbindung fehlgeschlagen"));
 
    unsigned long start = millis();
    char c;
    while ((millis() - start < 2000) and (client.connected() )) {
      c = client.read(); 
      //Serial.print(c); //Debugausgabe
      if (c=='*') {
        i=10;
        Serial.println(F("Upload erfolgreich")); 
      }
    }; 
 
    client.stop(); 
    client.flush(); 

    delay(1000); 
 
    Serial.println(F("Verbindung beendet"));
    Serial.println(); 
  }
  // Test-Messdaten um 1 erhöhen
  TempIn++;
  TempOut++;
  FeuchteIn++;
  FeuchteOut++;
  Licht++;
  Gewicht++;
  BienenIn++;
  BienenOut++; 
 
  delay(8000); 
}

 

Bei beelogger-Funk – Master Systemen für diesen Test den nRF24L01 nicht bestücken.

Ausgabe des seriellen Monitors (9600 baud):

Setze statische IP ...

Verbinde zum Server ...
community.beelogger.de
GET /USERX/beelogger1/beelogger_log.php?
Verbindung erfolgreich
Upload erfolgreich
Verbindung beendet

Verbinde zum Server ...
community.beelogger.de
GET /USERX/beelogger1/beelogger_log.php?
Verbindung erfolgreich
Upload erfolgreich
Verbindung beendet

Programmcode downloaden:

Download

Der Programmcode für den Messbetrieb mit dem Arduino Datenlogger mit Stockwaage für Imker ist unter Programmcode zu finden.