PlatformIO esp32-Beispiel compiliert nur mit funktionsprototyp

OP #6667438
Lesenswert?
• ▲
▼
Hallo zusammen,
ich wollte auch mal was mit'm ESP32 machen.
Also mal ganz blauäugig ein Webserver-Beispiel kopiert und Auf den ESP 
geflasht.
Vorab kam allerdings:
1
Building in release mode
2
Compiling .pio\build\az-delivery-devkit-v4\src\main.cpp.o
3
src\main.cpp: In function 'void setup()':
4
src\main.cpp:39:18: error: 'handle_root' was not declared in this scope
5
   server.on("/", handle_root);
6
                  ^
7
*** [.pio\build\az-delivery-devkit-v4\src\main.cpp.o] Error 1

macht ja prinzipiell auch Sinn, weil der Funktionsprototyp fehlt, 
welchen man i.A. in der Main.h definiert? Also habe ich
void handle_root();
unterhalb der Variablendeklaration eingefügt, compiliert und 
funktioniert.
Meine Frage:
Weshalb lief das Beispiel aus og Link beim Autor ohne *.h-Datei?
oder: warum brauch ich in der Arduino-IDE keine Prototypen definieren?
noch anders gefragt: kann ich PlatformIO so konfigurieren, dass es 
ähnlich agiert, sodass ich eben keine "h.datei" brauche? kann man das 
irgendwo einstellen?
1
VSCODE_Version:
2
Version: 1.55.2
3
OS: Windows_NT x64 10.0.19042
4

5
PlatformIO:
6
Core 5.1.1·Home 3.3.4
7

8
standardkonfiguration:
9
env:az-delivery-devkit-v4]
10
platform = espressif32
11
board = az-delivery-devkit-v4
12
framework = arduino
13
upload_port = COM5
14
monitor_speed = 115200

Link zum Beispiel und kurzer getesteter Code:

https://www.hackster.io/electropeak/create-a-web-server-w-esp32-tutorial-a9a392
1
#include <Arduino.h>
2
#include <WiFi.h>
3
#include <WebServer.h>
4

5

6
const char* ssid = "FRITZ!Box 7412";           
7
const char* password = "Geheim_1234_öüä"; 
8
WebServer server(80);  // Object of WebServer(HTTP port, 80 is defult)
9
// HTML & CSS contents which display on web server
10
String HTML = "<!DOCTYPE html>\
11
<html>\
12
<body>\
13
<h1>My First Web Server with ESP32 - Station Mode &#128522;</h1>\
14
</body>\
15
</html>";
16

17
///
18
void handle_root(); //<== von mir eingefügt
19
///
20

21
void setup()
22
{
23
  Serial.begin(115200);
24
  Serial.println();
25

26
  WiFi.begin(ssid, password);
27

28
  Serial.print("Connecting");
29
      while (WiFi.status() != WL_CONNECTED) {
30
        delay(500);
31
        Serial.print(".");
32
      }
33
  Serial.println();
34
  Serial.print("Connected, IP address: ");
35
  Serial.println(WiFi.localIP());
36
  Serial.print("Got IP: ");
37
  Serial.println(WiFi.localIP());  //Show ESP32 IP on serial
38
  server.on("/", handle_root);
39
  server.begin();
40
 
41
  Serial.println("HTTP server started");
42
  delay(100);
43
}
44
void loop() {
45
server.handleClient();
46
}
47

48
void handle_root() {
49
server.send(200, "text/html", HTML); // Handle root url (/)
50
}

Herzlichen Dank, falls jemand was dazu sagen kann
Äxl
Moderator Persönliche Seite #6667515
Lesenswert?
• ▲
▼
Axel R. schrieb:
> sodass ich eben keine "h.datei" brauche

Brauchst du doch auch nicht, wie du ja selbst gezeigt hast.

Aber bevor du irgendeinen Namen verwendest, musst du ihn natürlich 
deklariert haben, wie sonst soll der Compiler wissen, was du mit 
diesem Namen verbindest?

Definieren musst du ihn nicht unbedingt an der gleichen Stelle, aber 
du darfst es. Wenn du also deine Definition von handle_root() vorziehst, 
sodass sie vor der ersten Benutzung steht, dann hast du damit zugleich 
die nötige Deklaration erschlagen.

Mit PlatformIO oder irgendwelchen anderen Build-Systemen hat das 
allerdings nichts zu tun, das ist grundlegendes C++-Verhalten.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.