Hallo zusammen,

ich habe mit Arduino schon Erfahrung, aber noch nie in Richtung Netzwerk, sprich WLAN.

Ich möchte mir einen Bienenstockwaage bauen. Als Vorlage dient ein tolles Projekt auf beelogger.de.
Hier kommt ein Arduino Nano mit ESP 8266-01 zum Einsatz. Ich würde jetzt stattdessen gerne ein NodeMCU einsetzen. Könnt ihr mir sagen, wie ich den Programmtext abändern muss? An welchen Stellen muss ich hier überall ansetzen? Reicht es die ganzen Pins richtig zuzuordnen oder wäre hier deutlich mehr zu tun. Dann würde ich vielleicht doch erst mal auf Nano+ESP zurückgreifen um mich in die Materie erst mal richtig einzuarbeiten.

Hier ist das Originalprogramm des Sketches mit dem ich einsteigen möchte zum downloaden: https://beelogger.de/?download=195458

Oder direkt als Code hier:
Code:
/*
   (C) 2020 R.Schick

   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 http://beelogger.de
// Version 20.01.2020


// Name des WLAN-Zugangspunkts
const char  Access_Point[] PROGMEM = "WLan_Name_SSID";

// Passwort des Zugangspunktes
const char AP_Passwort[] PROGMEM =   "WLan_Passwort";

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

// GET mit Verzeichnis  Webserver-Skript und das PHP Skript für den jeweiligen beelogger
// Bsp: "GET /mein_ordner/beelogger6/beelogger_log.php?"
// Achtung: Stringlänge muss zur Variable "parameter" in send_data_via_wlan() passen
// Anzahl Byte:                       10        20        30        40        50
const char pfad[] PROGMEM = "GET /meinordner/beeloggerx/beelogger_log.php?";

// Passwort vom Webserver-Skript
const char Passwort[] PROGMEM =  "Log"; // Log = Default


//----------------------------------------------------------------
// Konfiguration beelogger
//----------------------------------------------------------------
#define HX711_SCK     A0    // HX711 S-Clock
#define Modul_CS      10    // Ethernet abschalten
#define Power_Pin      4    // Power On

//----------------------------------------------------------------

#define Seriell_Baudrate 9600

//----------------------------------------------------------------
// Konfiguration ESP-8266-01 WLAN Modul
//----------------------------------------------------------------
byte ESP_RX = 8;
byte ESP_TX = 9;
#define ESP_Baudrate 9600

#define ESP_RESET A2

#include <ESP_beelogger.h>
C_WLAN_ESP01 my_esp;

const char Str_Http[]  PROGMEM = " HTTP/1.1\r\n";
const char Str_Con[]   PROGMEM = "Connection: close\r\n\r\n";
//----------------------------------------------------------------


// 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 = 50000.00;
long Gewicht = 25000;
float Batteriespannung = 3.70;
float Solarspannung = 1.70;

bool OK = true;



void setup() {
  char parameter[80], data[64];
  int Service = 0;

  digitalWrite (HX711_SCK, HIGH); //HX711 aus
  pinMode(HX711_SCK, OUTPUT);

  digitalWrite(Modul_CS, HIGH);   // Modul Ethernet usw. aus
  pinMode(Modul_CS, OUTPUT);

  digitalWrite(Power_Pin, HIGH);  // Power an
  pinMode(Power_Pin, OUTPUT);

  digitalWrite(ESP_RESET, HIGH);  // ESP8266 an
  pinMode(ESP_RESET, OUTPUT);

  Serial.begin(Seriell_Baudrate);

  Serial.println(F("ESP 8266-01 Test Sketch 08.04.2020"));
  Serial.flush();
  delay(1000);

  Serial.println(F("Abfrage Modul ... "));
  if (my_esp.init(ESP_Baudrate)) {
    Serial.println("i.O.");
    my_esp.mode();      // Station Mode permanent
    Serial.println();
    Serial.println(F("ESP Firmware:"));
    my_esp.firmware();  // firmware abfragen
    Serial.println(my_esp.buffer);
    Serial.println();
    Serial.println(F("WLAN Information:"));
    my_esp.signal(0);

    strcpy_P(parameter, Access_Point);
    my_esp.signal(parameter);           // hole Signalstärke
    strcpy(parameter, my_esp.buffer);
    char cc = ',';
    char *pos = strchr(parameter, cc); // Suche ','
    if (pos) {
      Service = atoi(pos + 1);
    }
    if ((Service > -10)) {
      Serial.print(F("Signalstärke unklar: "));
    }
    if ((Service < -90)) {
      Serial.print(F("Signal schwach: "));
    }
    if (Service) {
      Serial.print(F("Signalstaerke: "));
    }
    Serial.print(Service);
    Serial.println(F(" dB"));
    Serial.println();
    Serial.flush();

    delay(500);
    my_esp.send("AT+CWMODE_DEF=1");
    delay(1000);
  }
  else {
    OK = false;
    Serial.println(F("Modul konnte nicht abgefragt werden"));
    Serial.println(my_esp.buffer);
    Serial.println();
    ESP_Abschaltung();
  }

  if (OK) {
    strcpy_P(parameter, Access_Point);
    Serial.print(F("Verbinde zum WLAN: "));
    Serial.print(parameter);
    Serial.println(" ... ");
    strcpy_P(data, AP_Passwort);

    if (my_esp.join(parameter, data)) {
      Serial.println(F("WLAN Verbindung OK"));
      Serial.println();
      Serial.println();
    }
    else {
      OK = false;
      Serial.println(F("Verbindungsfehler!"));
      Serial.println();
      ESP_Abschaltung();
    }
  }

  if (OK) {
    Serial.println(F("Verbinde mit Server ... "));
    strcpy_P(parameter, serverName);
    Serial.print(parameter);
    if (my_esp.Connect(parameter)) {
      Serial.println(F("  ... connect: OK"));
      Serial.println();
    }
    else {
      OK = false;
      Serial.println(F(" connect fehlgeschlagen"));
      Serial.println();
      Serial.println(my_esp.buffer);
      Serial.println();
      ESP_Abschaltung();
    }
  }
#if 0
  if (OK) {
    unsigned long t;
    char c = 'x';
    Serial.println(F("Test beginnen j/n ?"));
    Serial.println(F("Eingabe von 'j' und bestätigen mit 'Enter' startet den"));
    Serial.println(F("Transfer der Testdaten"));
    Serial.println();
    t = millis();
    do {
      if (Serial.available() > 0) {
        c = Serial.read();
        Serial.print(c);
        Serial.println();
        break;
      }
    } while ((millis() - t) < 10000);  // 10 sec Zeit

    if (c == 'j') {
      OK = true;
    }
    else {
      ESP_Abschaltung();
      OK = false;
    }
  }
#endif

}


void loop() {
  char KonvertChar[15];
  char data[80];
  char parameter[64];

  if (OK) {

    long Check = round(TempIn + TempOut + FeuchteIn + FeuchteOut + Licht + Gewicht + Solarspannung + Batteriespannung);

    if (my_esp.prep_send(300)) { // fiktive Länge, senden wird mit 0x00 gestartet
      Serial.println(F("Uebertrage Daten zum Webserver ..."));
      Serial.flush();

      //"GET " + url + php + "?" + Daten + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
      // Wichtig: der String darf von der url bis Ende der Daten keine Leerzeichen enthalten

      strcpy_P(parameter, pfad);
      Serial.println(parameter);
      Serial.flush();
      my_esp.send(parameter);

      // erstelle Daten
      my_esp.send("Passwort=");
      strcpy_P(parameter, Passwort);
      my_esp.send(parameter);
      my_esp.send("&TempIn=");
      dtostrf(TempIn, 4, 2, KonvertChar);
      my_esp.send(KonvertChar);
      my_esp.send("&TempOut=");
      dtostrf(TempOut, 4, 2, KonvertChar);
      my_esp.send(KonvertChar);
      my_esp.send("&FeuchteIn=");
      dtostrf(FeuchteIn, 4, 2, KonvertChar);
      my_esp.send(KonvertChar);
      my_esp.send("&FeuchteOut=");
      dtostrf(FeuchteOut, 4, 2, KonvertChar);
      my_esp.send(KonvertChar);
      my_esp.send("&Licht=");
      dtostrf(Licht, 4, 2, KonvertChar);
      my_esp.send(KonvertChar);
      my_esp.send("&Gewicht=");
      dtostrf(Gewicht, 1, 0, KonvertChar);
      my_esp.send(KonvertChar);

      my_esp.send("&VBatt=");
      dtostrf(Batteriespannung, 4, 2, KonvertChar);
      my_esp.send(KonvertChar);
      my_esp.send("&VSolar=");
      dtostrf(Solarspannung, 4, 2, KonvertChar);

      my_esp.send(KonvertChar);
      my_esp.send("&Check=");
      dtostrf(Check, 6, 2, KonvertChar);
      my_esp.send(KonvertChar);
      // ende Daten
      //
      strcpy_P(parameter, Str_Http);
      my_esp.send( parameter);
      my_esp.send("Host: ");
      strcpy_P(parameter, serverName);
      my_esp.send( parameter);
      my_esp.send("\r\n");
      strcpy_P(parameter, Str_Con);
      my_esp.send( parameter);
      my_esp.send(0x00); // Startkommando senden

      OK = false;
      if (my_esp.sendCommand(0, 500, "SEND OK")) {
        //Serial.println(F("SEND OK"));
      }
      if (my_esp.sendCommand(0, 2000, "200 OK")) {
        //Serial.println(F("HTTP OK"));
        if (my_esp.sendCommand(0, 5000, "ok *")) {
          Serial.println(F("Quittung OK"));
          OK = true;

          // Empfangsbuffer auswerten
          // Format Quittung aus beelogger-log.php
          // echo "5ok*" = 5 Minuten
          // echo "25ok*" = 25 Minuten
          // echo "150ok*" = 150 Minuten -> 2,5 Stunden
          int n = atoi(my_esp.buffer); // Konvertiere str in int
          Serial.println();

          if (n > 0) {
            Serial.print("Intervallvorgabe vom Server:  ");
            Serial.print(n);
            Serial.println(" Minuten ");
          }
          else {
            Serial.print("Kein Intervall vom Server vorgegeben. ");
            Serial.println(my_esp.buffer);
            Serial.println();
            Serial.println(n);
          }
        }
        else {
          Serial.println(F("Quittung Fehler!"));
          Serial.println(my_esp.buffer);
          OK = false;
        }
      }
      if (my_esp.quit()) {
        Serial.println(F("Restart OK"));
      }
      else {
        OK = false;
      }
      Serial.flush();
      delay(2000);
      if (my_esp.init(ESP_Baudrate)) {  // baud rate
        Serial.println("...");
        strcpy_P(parameter, Access_Point);
        strcpy_P(data, AP_Passwort);
        if (my_esp.join(parameter, data)) {
          Serial.println("..");
          strcpy_P(parameter, serverName);
          if (my_esp.Connect(parameter))
            Serial.println(".");
          OK = true;
        }
      }
    } // prep_send
    if (OK) {
      // Test-Messdaten um 1 erhöhen
      TempIn++;
      TempOut++;
      TempOut++;
      FeuchteIn++;
      FeuchteOut++;
      FeuchteOut++;
      Licht++;
      Gewicht++;
      Batteriespannung++;
      Solarspannung++;
      if ((int)TempIn % 3) {
        TempOut = TempOut - 3;
        FeuchteIn = FeuchteIn - 2;
      }
      // Abschaltung nach 5 Datenübertragungen
      Serial.println(TempIn);
      if (TempIn >= 30.0) {
        Serial.println(F("Test erfolgreich beendet"));
        OK = false;
        ESP_Abschaltung();
      }
    }
    else {
      Serial.println(F("Fehler im Test!"));
      ESP_Abschaltung();
    }
  } // if OK
}

void ESP_Abschaltung() {
  Serial.println(F("Verbindungen werden getrennt"));
  Serial.println();
  my_esp.disConnect();
  my_esp.quit();
  delay(100);
  my_esp.end();
  Serial.end();
}