当我尝试将 WifiManager 库包含在我的启动和运行代码中时,我遇到了一些问题

问题描述 投票:0回答:2

这是我的头文件

#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <ESP8266mDNS.h>
#include <ArduinoOTA.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <SoftwareSerial.h> 
#include <dds238.h>

我使用 ESPAsyncWebServer.h 作为 jsonrequest 将数据发送到我的 IP。 我正在使用 WifiManger 来自动化 wifi 连接,因此我不需要对 wifi 凭证进行硬编码,但是为此我必须使用 ESP8266WebServer.h 和 WiFiManager.h。我被困在这个问题上一个多星期了。 我收到的错误:

In file included from src\main.cpp:31:
.pio\libdeps\esp12e\ESPAsyncWebServer-esphome\src/ESPAsyncWebServer.h:62:18: error: 'HTTP_GET' conflicts with a previous declaration
   62 |   HTTP_GET     = 0b00000001,
c++ arduino esp8266
2个回答
0
投票

您不必在草图中提供其他库使用的库的包含内容。 WiFiManager 库包含其依赖项,Arduino 构建系统将检测这些库。

删除

#include <ESP8266WebServer.h>
以避免与 ESP8266WebServer 库中的 HTTP_GET 枚举值冲突。


0
投票

当我尝试将 WifiManager 库包含在我的启动和运行代码中时,我遇到了一些问题

我在开发ESP8266时遇到了同样的问题,问题的关键是,

WiFiManager
ESPAsyncWebServer
有相同的
WebRequestMethod
宏,好消息是
ESPAsyncWebServer
定义了这样的
WEBSERVER_H
宏条件编译。

#ifndef WEBSERVER_H
typedef enum {
  HTTP_GET     = 0b00000001,
  HTTP_POST    = 0b00000010,
  HTTP_DELETE  = 0b00000100,
  HTTP_PUT     = 0b00001000,
  HTTP_PATCH   = 0b00010000,
  HTTP_HEAD    = 0b00100000,
  HTTP_OPTIONS = 0b01000000,
  HTTP_ANY     = 0b01111111,
} WebRequestMethod;
#endif

所以,你只需要在include

WEBSERVER_H
之前定义
ESPAsyncWebServer.h
,就不会出现冲突问题了。

#include <WiFiManager.h>
WiFiManager wifiManager;

#define WEBSERVER_H
#include <ESPAsyncWebServer.h>
© www.soinside.com 2019 - 2024. All rights reserved.