Probleme mit NodeMCU-ESP32

Hallo zusammen,

Vorab: ich bin kompletter Neuling und entschuldige mich schonmal im vorraus für allerlei Falschaussagen.

Ich bin derzeit dabei ein Projekt nach folgender Vorlage zu realisieren:

Dabei kommen zum Einsatz auch die angeführten Elemente, speziell das NodeMCU-ESP32.

Mein Problem ist nun folgendes:

Nach Anleitung des Herstellers habe ich alles installiert und eingestellt und habe dann diesen Sketch eingefügt und versucht zu kompilieren. Dabei stieß ich dann auf Fehlermeldungen, die ich nicht wirklich beheben konnte.

Zu erst hatte ihm “#include <ESP8266WiFi.h>” Probleme gemacht. Die entsprechende library habe ich dann gefunden und manuell eingefügt. Das führte leider auch nur dazu, dass als nächstes “queue.h” nicht gefunden werden konnte. Nachdem ich den Pfad dann händisch noch eingetragen habe, fehlte ihm da die nächste Datei usw. usw. bis an irgend einem Punkt die gesuchte Datei überhaupt nicht mehr vorhanden war und ich demnach auch nicht nachtragen konnte.

Von einem Kollegen habe ich dann über eine andere Boardverwalter-URL im Boardverwalter die library “esp8266 by ESP8266 Community” gefunden und installiert. Als Board habe ich dann zu erst “Generic ESP8266 Module” verwendet. Der hatte allerdings Probleme mit dem definierten Pin. Daher dachte ich mir, dass es hier wohl nicht ganz stimmen kann. Das nächste erschien mir das “NodeMCU 1.0”, womit der Kompiler wunderbar durchgelaufen ist ohne zu meckern.

Als ich dann dachte, alles wäre gelöst: sprang mir dann beim hochladen folgende Fehlermeldung entgegen:

warning: espcomm_send_command: didn’t receive command response
warning: espcomm_send_command(FLASH_DOWNLOAD_BEGIN) failed
closing bootloader
flush start
setting serial port timeouts to 1 ms
setting serial port timeouts to 1000 ms
flush complete
error: espcomm_upload_mem failed

Und ab diesem Punk bin ich absolut raus. Ich habe alles gegoogelt, was ich meine richtig googeln zu können und habe dementsprechend auch alles ausprobiert, aber komme auf keine Lösung.

Wenn mir also hier jemand helfen kann, wäre ich sehr sehr dankbar :sweat_smile:

Wenn noch Informationen gebraucht werden, reiche ich diese umgehend nach.

Als erstes solltest Du Dir klar werden, welches Board Du hast. ESP8266 oder ESP32 und dann die entsprechende Boardunterstützung installieren.

Wenn Du dann noch Probleme hast, stelle Deinen Sketch und die Fehlermeldungen hier ein. Beides in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).

Gruß Tommy

Probleme mit NodeMCU-ESP32
#include <ESP8266WiFi.h>”
Den Widerspruch solltest du erkennen und auflösen.

combie:

Probleme mit NodeMCU-ESP32
#include <ESP8266WiFi.h>”
Den Widerspruch solltest du erkennen und auflösen.

Hallo,

Den Widerspruch habe ich erkannt und war daher auch recht verunsichert. Allerdings bin ich davon ausgegangen, dass der Sketch ja auch irgendwie zu seinen benutzten Komponenten passen sollte.

Wie dem auch sei, habe ich hier also ein NodeMCU-ESP32 Board und habe nun mal folgendes gemacht:

Als Board, wie in der Original Anleitung das “ESP32 Dev Module” gewählt und statt der Zeile

#include <ESP8266WiFi.h>”

folgende eingesetzt:

#include <C:…\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.1\libraries\WiFi\src\WiFiType.h>

Selbiges musste ich dann für WifiUDP machen und dann ging der Kompiler weiter.

Jetzt stehe ich aber vor dem nächsten Error:

“Wifi was not decalred in this scope”

Der sketch sieht im moment so aus:

#include <FastLED.h>
#include <C:\Users\Daniel\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.1\libraries\WiFi\src\WiFiType.h>
#include <C:\Users\Daniel\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.1\libraries\WiFi\src\WiFiUDP.h>
#include "D:\Documents\Arduino\reactive_common.h"

#define READ_PIN 0
#define BUTTON_PIN 1

#define NUMBER_OF_CLIENTS 3

const int checkDelay = 5000;
const int buttonDoubleTapDelay = 200;
const int numOpModes = 3;

unsigned long lastChecked;
unsigned long buttonChecked;
bool buttonClicked = false;
bool queueDouble = false;
bool clickTrigger;
bool doubleTapped;
WiFiUDP UDP;

struct led_command {
  uint8_t opmode;
  uint32_t data;
};

bool heartbeats[NUMBER_OF_CLIENTS];

static int opMode = 1;

void setup()
{
  pinMode(READ_PIN, INPUT);
  pinMode(BUTTON_PIN, INPUT );

  /* WiFi Part */
  Serial.begin(115200);
  Serial.println();
  Serial.print("Setting soft-AP ... ");
  WiFi.persistent(false);
  WiFi.mode(WIFI_AP);
  WiFi.softAP("sound_reactive", "123456789");
  Serial.print("Soft-AP IP address = ");
  Serial.println(WiFi.softAPIP());
  UDP.begin(7171); 
  resetHeartBeats();
  waitForConnections();
  lastChecked = millis();
  buttonChecked = 0;
}


void loop()
{
  uint32_t analogRaw;
  buttonCheck();
  if (millis() - lastChecked > checkDelay) {
    if (!checkHeartBeats()) {
      waitForConnections();
    }
    lastChecked = millis();
  }

  switch (opMode) {
    case 1:
      analogRaw = analogRead(READ_PIN);
      if (analogRaw <= 3)
        break;
      sendLedData(analogRaw, opMode);
      break;
    case 2:
      sendLedData(0, opMode);
      delay(10);
      break;
    case 3:
      sendLedData(0, opMode);
      delay(10);
      break;
  }
  delay(4);
}

void sendLedData(uint32_t data, uint8_t op_mode) 
{
 struct led_command send_data;
 send_data.opmode = op_mode; 
 send_data.data = data; 
 for (int i = 0; i < NUMBER_OF_CLIENTS; i++) 
 {
    IPAddress ip(192,168,4,2 + i);
    UDP.beginPacket(ip, 7001); 
    UDP.write((char*)&send_data,sizeof(struct led_command));
    UDP.endPacket();
 }
}

void waitForConnections() {
  while(true) {
      readHeartBeat();
      if (checkHeartBeats()) {
        return;
      }
      delay(checkDelay);
      resetHeartBeats();
  }
}

void resetHeartBeats() {
  for (int i = 0; i < NUMBER_OF_CLIENTS; i++) {
   heartbeats[i] = false;
  }
}

void readHeartBeat() {
  struct heartbeat_message hbm;
 while(true) {
  int packetSize = UDP.parsePacket();
  if (!packetSize) {
    break;
  }
  UDP.read((char *)&hbm, sizeof(struct heartbeat_message));
  if (hbm.client_id > NUMBER_OF_CLIENTS) {
    Serial.println("Error: invalid client_id received");
    continue;
  }
  heartbeats[hbm.client_id - 1] = true;
 }
}

bool checkHeartBeats() {
  for (int i = 0; i < NUMBER_OF_CLIENTS; i++) {
   if (!heartbeats[i]) {
    return false;
   }
  }
  resetHeartBeats();
  return true;
}


void buttonCheck()
{
  int but = digitalRead(BUTTON_PIN);
  if (but == 0) {
    if (millis() - buttonChecked < buttonDoubleTapDelay && buttonClicked == false ) {
      doubleClicked();
      doubleTapped = true;
    }
    clickTrigger = true;
    buttonClicked = true; 
    buttonChecked = millis();
  }

  else if (but == 1) {
    if (millis() - buttonChecked > buttonDoubleTapDelay && clickTrigger) {
      if (!doubleTapped) {
        clicked();
      }
      clickTrigger = false;
      doubleTapped = false;
    }
    buttonClicked = false;
  }
}

void clicked() {
  if (opMode == numOpModes)
    opMode = 1;
  else
    opMode++;
  Serial.printf("Setting opmode %d \n", opMode);
}

void doubleClicked() {

}

Die Fehlermeldung Folgend:

C:\Users\Daniel\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.1\libraries\WiFi\src\WiFiUDP.h:65:10: note:   initializing argument 1 of 'virtual size_t WiFiUDP::write(const uint8_t*, size_t)'

   size_t write(const uint8_t *buffer, size_t size);

          ^

Bibliothek FastLED in Version 3.2.6 im Ordner: D:\Documents\Arduino\libraries\FastLED  wird verwendet
exit status 1
'WiFi' was not declared in this scope

Die langen Pfade musst Du nicht nehmen, er findet die Libs schon.

Dir fehlt:

#include <WiFi.h>

Gruß Tommy

Darauf hätt ich auch selbst noch kommen können - ich hab die Gedanken grade überall, danke auf jeden Fall :slight_smile:

Leider ist das Glück auch hier nur von kurzer Dauer - allerdings, scheint es jetzt wohl an dem Code selbst zu liegen

C:\Users\Daniel\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.1\libraries\WiFi\src\WiFiUDP.h:65:10: note:   initializing argument 1 of 'virtual size_t WiFiUDP::write(const uint8_t*, size_t)'

   size_t write(const uint8_t *buffer, size_t size);

          ^

Mehrere Bibliotheken wurden für "WiFi.h" gefunden
 Benutzt: C:\Users\Daniel\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.1\libraries\WiFi
 Nicht benutzt: C:\Program Files (x86)\Arduino\libraries\WiFi
Bibliothek FastLED in Version 3.2.6 im Ordner: D:\Documents\Arduino\libraries\FastLED  wird verwendet
Bibliothek WiFi in Version 1.0 im Ordner: C:\Users\Daniel\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.1\libraries\WiFi  wird verwendet
exit status 1
invalid conversion from 'char*' to 'const uint8_t* {aka const unsigned char*}' [-fpermissive]

Ich hab von C++ leider nicht viel Ahnung, bin hier leider auch aufgeschmissen, bin für jeden Vorschlag auch hier dankbar :slight_smile:

Hallo,

ich habe da mal reingeschaut, mein Vorschalg: beschaff Dir dafür NodeMCU oder die D1 mini mit dem ESP8266.
Ansonsten:
#define BUTTON_PIN D1
Also als Beispiel
#define BUTTON_PIN 15
wenn der Bitton an GPIO15 angeschlossen werden soll.

Ich habe nicht gesucht, ob es ein ESP32 Board gibt, wo welche Pins auf die Dx Notation gemappt sind. Also D1 durch die GPIO-Nummer erstezn, wo Du den Button anschließen willst.
Dann in der Funktion
void sendLedData(uint32_t data, uint8_t op_mode)
in der zeile das (char*) durch (uint8_t*) ersetzen:
UDP.write((uint8_t*)&send_data,sizeof(struct led_command));

Der Compiler läuft dann zwar erstmal durch, welche Änderungen evtl. noch bei den SPI-Zuordnungen nötig sind (FastLED) kann ich aber jetzt nicht sagen und ob es letztlich überhaupt auf dem 32er ohne weitere Anpassungen läuft, auch nicht.

Gruß aus Berlin
Michael