• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Platformio - как разбить код на файлы?

PAV

Member
Други, уже весь инет перерыл, в общем и целом понял, как разбить код на файлы, но не получается, выдает ошибку при компиляции, умом понимаю, что где-то "запятую" пропустил, но не пойму где. Помогите, пожалуйста, разбить следующий код из примера на два файла main.cpp и server.cpp
убрать в server.cpp
void handleRoot();
void handleNotFound();


C++:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

const char* ssid = "........";
const char* password = "........";

ESP8266WebServer server(80);

const int led = 13;

void handleRoot() {
  digitalWrite(led, 1);
  server.send(200, "text/plain", "hello from esp8266!");
  digitalWrite(led, 0);
}

void handleNotFound(){
  digitalWrite(led, 1);
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET)?"GET":"POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i=0; i<server.args(); i++){
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
  digitalWrite(led, 0);
}

void setup(void){
  pinMode(led, OUTPUT);
  digitalWrite(led, 0);
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin("esp8266")) {
    Serial.println("MDNS responder started");
  }

  server.on("/", handleRoot);

  server.on("/inline", [](){
    server.send(200, "text/plain", "this works as well");
  });

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");
}

void loop(void){
  server.handleClient();
}
 

PAV

Member
Сделал так, что не правильно?
main.cpp
Код:
#include "cfg.h"

#ifndef STASSID
#define STASSID "your-ssid"
#define STAPSK  "your-password"
#endif

const char* ssid = STASSID;
const char* password = STAPSK;

//ESP8266WebServer server(80);

#include "server.h"

void setup() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }

  MDNS.begin("esp8266");

  server.on("/", handleRoot);
  server.onNotFound(handleNotFound);
  server.begin();
}

void loop() {
  server.handleClient();
  MDNS.update();
}


cfg.h
Код:
#pragma once
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
ESP8266WebServer server(80);
server.cpp
Код:
#include "server.h"




void handleRoot() {
  server.send(200, "text/plain", "hello from esp8266!");
}

void handleNotFound() {
  server.send(404, "text/plain", "File Not Found");
}
server.h
Код:
#pragma once



void handleRoot();
void handleNotFound();

Получаю ошибки:
Building in release mode
Compiling .pio\build\nodemcuv2\src\main.cpp.o
Compiling .pio\build\nodemcuv2\src\server.cpp.o
Compiling .pio\build\nodemcuv2\lib5aa\ESP8266WiFi\ESP8266WiFiMulti.cpp.o
Compiling .pio\build\nodemcuv2\lib5aa\ESP8266WiFi\ESP8266WiFiSTA-WPS.cpp.o
In file included from C:\users\global\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/ESP8266WiFi.h:40:0,
from src\cfg.h:3,
from src\server.cpp:1:
C:\users\global\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/WiFiServer.h:68:34: error: expected class-name before '{' token
class WiFiServer : public Server {
^
C:\users\global\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/WiFiServer.h:97:16: error: type 'Print' is not a base type for type 'WiFiServer'
using Print::write;
^
In file included from C:\users\global\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/ESP8266WiFi.h:40:0,
from src\cfg.h:3,
from src\main.cpp:1:
C:\users\global\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/WiFiServer.h:68:34: error: expected class-name before '{' token
class WiFiServer : public Server {
^
C:\users\global\.platformio\packages\framework-arduinoespressif8266\libraries\ESP8266WiFi\src/WiFiServer.h:97:16: error: type 'Print' is not a base type for type 'WiFiServer'
Compiling .pio\build\nodemcuv2\lib5aa\ESP8266WiFi\ESP8266WiFiSTA.cpp.o
using Print::write;
^
*** [.pio\build\nodemcuv2\src\server.cpp.o] Error 1
*** [.pio\build\nodemcuv2\src\main.cpp.o] Error 1
================================================================================================== [FAILED] Took 5.56 seconds ==================================================================================================
The terminal process "C:\Users\Global\.platformio\penv\Scripts\pio.exe 'run'" terminated with exit code: 1.
 
Сверху Снизу