Fehler: does not name a type

Hallo zusammen,

ich weiß dieser Fehler wurde schon oft besprochen
aber ich komme hier grade nicht weiter.

Ich habe diesen berühmten Fehler bekommen.
does not name a type

Nun wie gehe ich weiter vor?

Das ist einfach nur ein Codebeispiel den ich von einer Seite habe der für diese Hardware funktionieren sollte :frowning:
So dachte ich:

Tja falsch gedacht :frowning:

Grundsätzlich bin ich als Anwendungsentwickler dem Thema nicht ganz fremd aber ich finde es schon komisch das Variablen einfach da sind.

Sauber ist das irgendwie alles nicht.

Kann mir mal jemand verraten warum er das nicht findet?

#include <ESP8266WiFi.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <Arduino.h>

#define SEALEVELPRESSURE_HPA (1013.25)
const char* ssid = "AZ-DELIVERYrep";
const char* password = "18351387937912637681";
unsigned long delayTime;
float h, t, p;
char temperatureCString[6];
char humidityString[6];
char pressureString[7];Adafruit_BME280 bme;

WiFiServer server(80);
void setup() {  
  Serial.begin(115200);  
  delay(10); 
  Serial.println(F("BME280 test"));    
}
 // bool status;  
 bool status = bme.begin(0x76);    
// Connect to WiFi network  
Serial.println();  
Serial.println();  
Serial.print("Connecting to ");  
Serial.println(ssid);    
WiFi.mode(WIFI_STA);  
WiFi.begin(ssid, password);    

while (WiFi.status() != WL_CONNECTED) {    
  delay(500);    
  Serial.print(".");  
}  

Serial.println("");  
Serial.println("WiFi connected");    
// Start the server  
server.begin();  
Serial.println("Server started");  
// Print the IP address  
Serial.println(WiFi.localIP());
}
void getWeather() {
  h = bme.readHumidity();
  t = bme.readTemperature();
  p = bme.readPressure()/ 100.0;
  dtostrf(t, 5, 1, temperatureCString);
  dtostrf(h, 5, 1, humidityString);
  dtostrf(p, 6, 1, pressureString);
  delay(100); 
  }
  
void loop() {  // Check if a client has connected  WiFiClient 
  client = server.available();    
  if (client) {    Serial.println("New client");    
  // bolean to locate when the http request ends
  boolean blank_line = true;
  while (client.connected()) {
    if (client.available()) { 
      char c = client.read();    
      if (c == '\n' && blank_line) {    
        getWeather();    
        client.println("HTTP/1.1 200 OK");      
        client.println("Content-Type: text/html");     
        client.println("Connection: close");      
        client.println();      
        // your actual web page that displays temperature    
        client.println("<!DOCTYPE HTML>");     
        client.println("<html>");        
        client.println("<head><META HTTP-EQUIV=\"refresh\" CONTENT=\"15\"></head>");  
        client.println("<body><h1>BME280 Web Server</h1>");     
        client.println("<table border=\"2\" width=\"456\" cellpadding=\"10\"><tbody><tr><td>");    
        client.println("<h3>Temperatur = ");  
        client.println(temperatureCString);  
        client.println("&deg;C</h3><h3>Luftfeuchte = ");  
        client.println(humidityString); 
        client.println("%</h3>");    
        client.println("<h3>Luftdruck = ");  
        client.println(pressureString);    
        client.println("hPa");    
        client.println("</h3></td></tr></tbody></table></body></html>");   
        break;  
        }      
        if (c == '\n') {     
          // when starts reading a new line     
          blank_line = true;     
          }      
          else if (c != '\r') { 
            // when finds a character on the current line    
            blank_line = false;    
            } 
            } 
            } 
            // closing the client connection  
            delay(1);   
            client.stop();   
            Serial.println("Client disconnected.");  
            }} 
      }
    }
  }
}

Arduino: 1.8.13 (Windows 10), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200"

Und was hat deine Recherche zum Fehler ergeben, wenn er schon öfter hier behandelt wurde?

Zeige doch mal die komplette Fehlermeldung.

a) ganze Fehlermeldung lesen. Es steht normalerweise genau drinnen was den Kompiler stört.
Wenn du es nicht findest: kopieren und posten.

b) vergiss das Tutorial und nimm am ESP8266 einen Webserver auf Basis IDE Beispiel ESP8266Webserver | HelloServer

aslman:
Nun wie gehe ich weiter vor?

Sketch formatieren wäre eine erste Option.

Tataaa!

#include <ESP8266WiFi.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <Arduino.h>

#define SEALEVELPRESSURE_HPA (1013.25)
const char* ssid = "AZ-DELIVERYrep";
const char* password = "18351387937912637681";
unsigned long delayTime;
float h, t, p;
char temperatureCString[6];
char humidityString[6];
char pressureString[7]; Adafruit_BME280 bme;

WiFiServer server(80);
void setup() {
  Serial.begin(115200);
  delay(10);
  Serial.println(F("BME280 test"));
}
// bool status;
bool status = bme.begin(0x76);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
}

Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.println(WiFi.localIP());
}
void getWeather() {
  h = bme.readHumidity();
  t = bme.readTemperature();
  p = bme.readPressure() / 100.0;
  dtostrf(t, 5, 1, temperatureCString);
  dtostrf(h, 5, 1, humidityString);
  dtostrf(p, 6, 1, pressureString);
  delay(100);
}

void loop() {  // Check if a client has connected  WiFiClient
  client = server.available();
  if (client) {
    Serial.println("New client");
    // bolean to locate when the http request ends
    boolean blank_line = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (c == '\n' && blank_line) {
          getWeather();
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          // your actual web page that displays temperature
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("<head><META HTTP-EQUIV=\"refresh\" CONTENT=\"15\"></head>");
          client.println("<body><h1>BME280 Web Server</h1>");
          client.println("<table border=\"2\" width=\"456\" cellpadding=\"10\"><tbody><tr><td>");
          client.println("<h3>Temperatur = ");
          client.println(temperatureCString);
          client.println("&deg;C</h3><h3>Luftfeuchte = ");
          client.println(humidityString);
          client.println("%</h3>");
          client.println("<h3>Luftdruck = ");
          client.println(pressureString);
          client.println("hPa");
          client.println("</h3></td></tr></tbody></table></body></html>");
          break;
        }
        if (c == '\n') {
          // when starts reading a new line
          blank_line = true;
        }
        else if (c != '\r') {
          // when finds a character on the current line
          blank_line = false;
        }
      }
    }
    // closing the client connection
    delay(1);
    client.stop();
    Serial.println("Client disconnected.");
  }
}
}
}
}
}

hmm Automatisch Formatieren hat nix gebracht

joar das ist halt der punkt wenn man einfach mal schnell was ausprobieren will und davon ausgehst das händler ihre seiten pflegen :frowning:

Ich lese aus dem Fehler das er Serial nicht kennt.
In meinen Jugendlichen Leichtsinn ist das für mich eine Variable. Diese wird auch nirgends Deklariert.
was ich schon einmal sehr komisch finde

der Komplette Fehler:

Arduino: 1.8.13 (Windows 10), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200"

sketch_aug26a:26:1: error: 'Serial' does not name a type

 Serial.println();

 ^

sketch_aug26a:27:1: error: 'Serial' does not name a type

 Serial.println();

 ^

sketch_aug26a:28:1: error: 'Serial' does not name a type

 Serial.print("Connecting to ");

 ^

sketch_aug26a:29:1: error: 'Serial' does not name a type

 Serial.println(ssid);

 ^

sketch_aug26a:30:1: error: 'WiFi' does not name a type

 WiFi.mode(WIFI_STA);

 ^

sketch_aug26a:31:1: error: 'WiFi' does not name a type

 WiFi.begin(ssid, password);

 ^

sketch_aug26a:33:1: error: expected unqualified-id before 'while'

 while (WiFi.status() != WL_CONNECTED) {

 ^

sketch_aug26a:38:1: error: 'Serial' does not name a type

 Serial.println("");

 ^

sketch_aug26a:39:1: error: 'Serial' does not name a type

 Serial.println("WiFi connected");

 ^

sketch_aug26a:41:1: error: 'server' does not name a type

 server.begin();

 ^

sketch_aug26a:42:1: error: 'Serial' does not name a type

 Serial.println("Server started");

 ^

sketch_aug26a:44:1: error: 'Serial' does not name a type

 Serial.println(WiFi.localIP());

 ^

sketch_aug26a:45:1: error: expected declaration before '}' token

 }

 ^

Mehrere Bibliotheken wurden für "Adafruit_Sensor.h" gefunden

 Benutzt: C:\Program Files (x86)\Arduino\libraries\Adafruit_Sensor-master

 Nicht benutzt: C:\Users\mwinc\OneDrive\Documents\Arduino\libraries\Adafruit_Unified_Sensor

exit status 1

'Serial' does not name a type



Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

aslman:
hmm Automatisch Formatieren hat nix gebracht

Du solltest dir das Ergebnis auch anschauen! Dann würdest Du nämlich erkennen, das mit deinen geschweiften Klammern eine ganze Menge nicht stimmt. Sowas am Ende:

  }
}
}
}
}
}

Darf es nach dem automatischen Formatieren nicht geben. Da muss jede Klammer ordentlich eingerückt sein. Die Fehler liegen da aber weiter oben im Sketch. Deshalb kommt die automatische Formatierung nicht klar.

sorry

aber wenn ich Str + T Automatisch formatiere benutze und die klammern sind noch da

was soll mir denn diese Automatische Formatierung bringen wenn es sowas simples wie geschweifte klammern nicht erkennt?

Jede IDE am markt kann soetwas
und die Fehlermeldung sind für mich nicht ersichtlich

da steht ganz klar

ketch_aug26a:26:1: error: 'Serial' does not name a type
Serial.println();

und damit meint er das ein paar Klammern zuviel da sind?

das ist schon schwach

sorry ich habe mal gelernt das man Fehler von oben durcharbeitet
und abarbeitet.

  • naja Variablen sind einfach da
  • Fehlermeldungen sagen was anderes aus

was kommt da noch?

na das wird ja lustig

gibt es denn auch andere IDE's mit denen man vielleicht arbeiten kann?
weil das ist alles unstrukturiert

bei großen Projekten ist das alles nicht mehr benutzbar

Anstatt ein kostenloses Programm zu kritisieren, solltest du einfach mal die überflüssigen Klammern entfernen und schauen was danach passiert.

Wenn dir das schon aufgefallen ist, sollte das doch kein Problem sein.

aslman:
sorry

aber wenn ich Str + T Automatisch formatiere benutze und die klammern sind noch da

was soll mir denn diese Automatische Formatierung bringen wenn es sowas simples wie geschweifte klammern nicht erkennt?

Eine IDE ist nicht dazu da um dir das Denken abzunehmen. Die automatische Formatierung macht das was der Name sagt: sie formatierte den Sketch vernünftig. Sie ist keine Syntaxprüfung. Wenn man das Formatieren ( sinnvollerweise ) schon beim Eingeben macht, braucht man sie garnicht. Wenn die Klammern falsch gesetzt sind, kann die Formatierung nicht vernünftig funktionieren und daran kannst Du erkennen, dass etwas nicht stimmt. Denn woher soll die auto-Formatierung wissen, wie Du es gerne richtig hättest? Die ändert syntaktisch gar nichts.

Und die Fehlermeldungen kommen nicht von der IDE sondern vom Compiler. Auch der richtet sich natürlich u.a. nach den Klammern, so wie sie gesetzt sind. Und wenn dann Anweisungen ausserhalb einer Funktion erscheinen, die dort nicht hingehören, wird er sie anmeckern. Dann erwartet er da eben was anderes als da steht.

Der verlinkte Sketch (so schlecht ich ihn finde) kompiliert einwandfrei.
Deine Version aus dem Eröffnungspost ist fehlerhaft. Warum - kannst nur du sagen. Es entspricht nicht dem Original.

Die Klammern am Ende solltest als erfahrener Applikationsprogrammierer eindeutig erkennen, dass da was nicht stimmen kann.
Das würde dir auch jeder andere Lieblings-Editor zeigen.

Der Kompiler weist dich auf Fehler hin die auch relativ klar sind.
Du hast Serial.print Ausgaben außerhalb von setup und außerhalb von loop.
Das geht nicht.

void setup() { 
  Serial.begin(115200); 
  delay(10);
  Serial.println(F("BME280 test"));   
}   // <-- das wird ein Schmarren sein.
 // bool status; 
 bool status = bme.begin(0x76);   
// Connect to WiFi networ

alles klar?

TO:
und dann:
schalte ein paar Gänge zurück.
Arduino kommt mit ein paar Besonderheiten um den Einstieg in die Programmierung zu erleichtern.
Trotzdem sind da ein paar Sachen dabei die auch für erfahrene Anwendungsprogrammierer interessant sein dürfte.
Du nutzt die Arduino IDE für einen NodeMCU. Ist doch Cool. Die Arduino IDE kann das.

Die Variablen sind einfach da. Oh mein Gott. Ja mei, schau dir an wie viele Includes da in deinem Sketch sind, hast dir alle libs angeschaut was da alles mitkommt? Weist du welche Libs die Arduino IDE für dich automatisch einbindet, damit der Klamüser überhaupt compiliert?

Wenn dir das nicht gefällt, schreib doch dein eigenes Programm, dann ist 100%ig nur das drinnen was du reinschreibst.

Wenn dir die Arduino IDE nicht gefällt, schau dich nach etwas anderen um. WinAVR, AVR Studio, Eclipse, was auch immer du gewohnt bist, C++ Kompiler wirst auch finden.

Change it - leave it or love it.

aslman:
hmm Automatisch Formatieren hat nix gebracht

joar das ist halt der punkt wenn man einfach mal schnell was ausprobieren will und davon ausgehst das händler ihre seiten pflegen :frowning:

Ich lese aus dem Fehler das er Serial nicht kennt.

Eigentlich ist schon alles gesagt - aber da Du MEINEN Hinweis offensíchtlich nicht verstanden hast, hier in lang:

Wenn Du Deinen Sketch formatierts, und ich habe das tatsächlich mal nicht in meiner sonst üblichen Weise getan - regelmäßige Mitleser wissen was ich meine - dann wird irgendwann auffallen, das da etwas nicht passt.
Spätestens, wenn am Ende NUR schliessende Klammern OHNE EINRÜCKUNG stehen, sollte Dir klar sein, das da irgendwas
falsch ist.
Und nein, er kennt Serial sehr wohl, nur in dem Kontext nicht. Da ist nähmlich vorher schon Schluß
Wenn Du von unten nach oben zu jeder schliessenden Klammer das entsprechende Pendant - also die öffnende Klammer - suchst, wirst Du schnell feststellen, von wo bis wo Deine Funktionen innerhalb des Sektch eigentlich - für den Compiler ersichtlich - geht.

Und dann liegt eben auch das gesamte setup() ausserhalb des Gültigkeitsbereiches.

Ist halt "not a name type".

Und wenn Du schon dabei bist zu lernen, dann solltest Du auch das beherzigen, was Dir gesagt wird und nicht rigeros ignorieren!

Dieser Bericht wäre detaillierter, wenn die Option

"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.