-         
Ergebnis 1 bis 3 von 3

Thema: Übersetzen von Nano+ESP8266 auf NodeMCU

  1. #1

    Übersetzen von Nano+ESP8266 auf NodeMCU

    Anzeige

    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();
    }

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    73
    Beiträge
    2.041
    ich weiss ja nicht wie viel erfahrung du mit arduino hast, scheint aber nicht sooo viiieeel zu sein. Kompiliere doch mal den code in der IDE für das nodeMCU - die fehlermeldungen müssten dir genügend antworten geben...
    So würde ich zumindest versuchen die antwort auf deine frage rauszufinden...
    gruß inka

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.519
    Blog-Einträge
    29
    Hallo Parasolid,

    ich würde mal bei R.Schick anfragen, ob das einfach umzuschreiben geht. Vielleicht erstellt er auch eine Version für nodeMCU. Ich kann mir aber vorstellen, dass er Gründe hatte, warum er einen NANO und ESP einsetzt. Ich habe kurz drüber geschaut und meine, dass das nicht so einfach ist. Also einfach im Sinn von ein paar Werte zu ändern und ein zwei Befehle und dann läufts auf einem nodeMCU. Das geht schon mit den Sensoren los, die man dort so anschließen kann, wenn man mal auf die Seite schaut. nodeMCU (ESP12-E) hat nicht so viele brauchbare Eingänge.
    Ich würde das so machen, wie es auf der Seite steht. Ein NANO und das andere kosten nicht so viel Geld, dass man tagelang (womöglich Wochen nach Fehlern suchen) Programmcodes ändern müsste.


    MfG

Ähnliche Themen

  1. nodeMCU ESP-12E und Arduino NANO
    Von Moppi im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 14
    Letzter Beitrag: 02.02.2020, 14:51
  2. NodeMCU - ESP8266 Starthilfe
    Von SuterB im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 15
    Letzter Beitrag: 13.01.2017, 11:58
  3. NodeMCU und ESP8266 – Einstieg in die Programmierung
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 1
    Letzter Beitrag: 13.01.2017, 08:37
  4. Um was geht es in diesem NodeMCU / ESP8266 Forum?
    Von Frank im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 0
    Letzter Beitrag: 12.01.2017, 13:48
  5. ESP8266/NodeMCU Kommunikationsprobleme
    Von thewulf00 im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 5
    Letzter Beitrag: 30.03.2016, 05:04

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •