Я пытаюсь преобразовать свою базовую библиотеку, которая обрабатывает мое Wi-Fi-соединение в моем парке IoT EPS32, в библиотеку, использующую класс, чтобы иметь возможность использовать обратные вызовы и более структурированный обмен данными между несколькими библиотеками.При перемещении функции «Setup» в класс я получаю следующую ошибку:
Я отметил в коде строки 78 и 143.
In file included from C:\Users\X\AppData\Local\Arduino15\RemoteSketchbook\ArduinoCloud\X\ESP32_Waermepumpensteuerung\ESP32_Waermepumpensteuerung.ino:40:
C:\Users\X\AppData\Local\Arduino15\RemoteSketchbook\ArduinoCloud\X\ESP32_Waermepumpensteuerung\Wifi_Connection.h: In member function 'void WiFi_Handler::setup()':
C:\Users\X\AppData\Local\Arduino15\RemoteSketchbook\ArduinoCloud\X\ESP32_Waermepumpensteuerung\Wifi_Connection.h:78:16: error: invalid use of non-static member function 'void WiFi_Handler::WiFiEvent(arduino_event_id_t)'
78 | WiFi.onEvent(WiFiEvent);
| ^~~~~~~~~
C:\Users\X\AppData\Local\Arduino15\RemoteSketchbook\ArduinoCloud\X\ESP32_Waermepumpensteuerung\Wifi_Connection.h:143:8: note: declared here
143 | void WiFiEvent(WiFiEvent_t event) {
| ^~~~~~~~~
Multiple libraries were found for "WiFi.h"
Used: C:\Users\X\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\WiFi
Not used: C:\Users\X\Documents\Arduino\libraries\WiFiNINA
exit status 1
Compilation error: invalid use of non-static member function 'void WiFi_Handler::WiFiEvent(arduino_event_id_t)'
Это моя библиотека. Я постарался свести его только к необходимому:
//USes standard Wifi and WiFIUDP Lib
#include
#include
const char* ssid = "mySSID";
const char* password = "myPW";
boolean wifi_connected = false;
IPAddress MiniserverIP(192, 168, XXX, XXX);
IPAddress localIP(127, 0, 0, 1);
unsigned int MiniserverPort = XXXX;
unsigned int localPort = XXXX;
IPAddress GatewayIP(192, 168, XXX, XXX);
IPAddress SubnetMask(255, 255, 255, 0);
IPAddress DNS(192, 168, XXX, XXX);
const int UDP_TX_PACKET_MAX_SIZE = 48;
// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
// UDP Packet Flag
int UDP_Packet_received = 0;
boolean UDP_started = false;
WiFiUDP Udp;
unsigned long last_wifi_status_update;
class WiFi_Handler {
public:
// Typedef für die Callback-Funktion
typedef void (*CallbackFunction)(String&);
// Konstruktor
//WiFi_Handler();
// Setzt die Callback-Funktion
void setDebugOutputCallback(CallbackFunction debugOutputCallback) {
_debugOutputCallback = debugOutputCallback;
}
// Führt die Callback-Funktion aus
void sendDebugOutput(String& arg) {
if (_debugOutputCallback) {
_debugOutputCallback(arg);
}
}
// Function to send UDP packets
void sendUDP(String text) {
Udp.beginPacket(MiniserverIP, MiniserverPort);
Udp.print(text);
Udp.endPacket();
Serial.print("UDP send: ");
Serial.println(text);
}
void setup() {
setWifiConfig();
// delete old config
WiFi.disconnect(true);
delay(1000);
// Examples of different ways to register wifi events
//THIS IS LINE 78!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
WiFi.onEvent(WiFiEvent);
//scanAndConnectToStrongestNetwork();
WiFi.begin(ssid, password);
Serial.println();
Serial.println();
Serial.println("Wait for WiFi... ");
}
void loop() {
if (wifi_connected == false) {
delay(10000);
if (wifi_connected == false) {
Wifi_connect();
}
}
if (UDP_started == false & wifi_connected == true) {
Udp.begin(localPort);
Serial.println("UDP started");
UDP_started = true;
}
//send_status();
}
private:
CallbackFunction _debugOutputCallback; // Zeiger auf die Callback-Funktion
void send_status() {
if ((millis() - last_wifi_status_update) > 60000 or last_wifi_status_update > millis()) {
sendUDP("RSSI:" + String(WiFi.RSSI()));
Serial.println("RSSI: " + String(WiFi.RSSI()));
last_wifi_status_update = millis();
}
}
void setWifiConfig() {
if (host == "ESP32 Toroeffner") {
IPAddress temp_IP(192, 168, XXX, XXX);
localIP = temp_IP;
MiniserverPort = XXXX;
localPort = XXXX;
} else if (host == "ESP32_Waermepumpe") {
IPAddress temp_IP(192, 168, XXX, XXX);
localIP = temp_IP;
MiniserverPort = XXXX;
localPort = XXXX;
}
}
//This is Line 143!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
void WiFiEvent(WiFiEvent_t event) {
Serial.printf("[WiFi-event] event: %d\n", event);
switch (event) {
case ARDUINO_EVENT_WIFI_READY:
Serial.println("WiFi interface ready");
break;
case ARDUINO_EVENT_WIFI_SCAN_DONE:
Serial.println("Completed scan for access points");
break;
case ARDUINO_EVENT_WIFI_STA_START:
Serial.println("WiFi client started");
break;
case ARDUINO_EVENT_WIFI_STA_STOP:
Serial.println("WiFi clients stopped");
wifi_connected = false;
UDP_started = false;
break;
case ARDUINO_EVENT_WIFI_STA_CONNECTED:
Serial.println("Connected to access point");
//wifi_connected = true;
break;
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
Serial.println("Disconnected from WiFi access point");
wifi_connected = false;
UDP_started = false;
break;
case ARDUINO_EVENT_WIFI_STA_AUTHMODE_CHANGE:
Serial.println("Authentication mode of access point has changed");
wifi_connected = false;
UDP_started = false;
break;
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
Serial.print("Obtained IP address: ");
Serial.println(WiFi.localIP());
wifi_connected = true;
sendUDP(Version);
sendUDP("Wifi Connected");
break;
case ARDUINO_EVENT_WIFI_STA_LOST_IP:
Serial.println("Lost IP address and IP address is reset to 0");
wifi_connected = false;
UDP_started = false;
break;
case ARDUINO_EVENT_WPS_ER_SUCCESS:
Serial.println("WiFi Protected Setup (WPS): succeeded in enrollee mode");
break;
case ARDUINO_EVENT_WPS_ER_FAILED:
Serial.println("WiFi Protected Setup (WPS): failed in enrollee mode");
break;
case ARDUINO_EVENT_WPS_ER_TIMEOUT:
Serial.println("WiFi Protected Setup (WPS): timeout in enrollee mode");
break;
case ARDUINO_EVENT_WPS_ER_PIN:
Serial.println("WiFi Protected Setup (WPS): pin code in enrollee mode");
break;
case ARDUINO_EVENT_WIFI_AP_START:
Serial.println("WiFi access point started");
break;
case ARDUINO_EVENT_WIFI_AP_STOP:
Serial.println("WiFi access point stopped");
break;
case ARDUINO_EVENT_WIFI_AP_STACONNECTED:
Serial.println("Client connected");
break;
case ARDUINO_EVENT_WIFI_AP_STADISCONNECTED:
Serial.println("Client disconnected");
break;
case ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED:
Serial.println("Assigned IP address to client");
break;
case ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED:
Serial.println("Received probe request");
break;
case ARDUINO_EVENT_WIFI_AP_GOT_IP6:
Serial.println("AP IPv6 is preferred");
break;
case ARDUINO_EVENT_WIFI_STA_GOT_IP6:
Serial.println("STA IPv6 is preferred");
break;
case ARDUINO_EVENT_ETH_GOT_IP6:
Serial.println("Ethernet IPv6 is preferred");
break;
case ARDUINO_EVENT_ETH_START:
Serial.println("Ethernet started");
break;
case ARDUINO_EVENT_ETH_STOP:
Serial.println("Ethernet stopped");
break;
case ARDUINO_EVENT_ETH_CONNECTED:
Serial.println("Ethernet connected");
break;
case ARDUINO_EVENT_ETH_DISCONNECTED:
Serial.println("Ethernet disconnected");
break;
case ARDUINO_EVENT_ETH_GOT_IP:
Serial.println("Obtained IP address");
break;
default: break;
}
}
void Wifi_connect() {
Serial.println("start connecting to Wifi");
// delete old config
WiFi.disconnect(true);
delay(1000);
if (WiFi.config(localIP, GatewayIP, SubnetMask, DNS, DNS) == false) {
Serial.println("Configuration failed.");
}
//scanAndConnectToStrongestNetwork();
WiFi.begin(ssid, password);
Serial.println();
Serial.println();
Serial.println("Wait for WiFi... ");
}
};
String scanAndConnectToStrongestNetwork() {
int i_strongest = -1;
int32_t rssi_strongest = -100;
Serial.printf("Start scanning for SSID %s\r\n", ssid);
int n = WiFi.scanNetworks(); // WiFi.scanNetworks will return the number of networks found
Serial.println("Scan done.");
if (n == 0) {
Serial.println("No networks found!");
return ("");
} else {
Serial.printf("%d networks found:", n);
for (int i = 0; i rssi_strongest)) {
rssi_strongest = WiFi.RSSI(i);
i_strongest = i;
}
}
}
if (i_strongest < 0) {
Serial.printf("No network with SSID %s found!\r\n", ssid);
return ("");
}
Serial.printf("SSID match found at %d. Connecting...\r\n", i_strongest);
WiFi.begin(ssid, password, 0, WiFi.BSSID(i_strongest));
return (WiFi.BSSIDstr(i_strongest));
}
// Function to send UDP packets
void sendDebug(String text) {
IPAddress DesktopIP(192, 168, XXX, XXX);
Udp.beginPacket(DesktopIP, XXXX);
Udp.print(text);
Udp.endPacket();
Serial.print("Debug send: ");
Serial.println(text);
}
// Function to send UDP packets
void sendUDP(String text) {
Udp.beginPacket(MiniserverIP, MiniserverPort);
Udp.print(text);
Udp.endPacket();
Serial.print("UDP send: ");
Serial.println(text);
}
// Function to check for new UDP packets
int checkUDP(char* data) {
// if there's data available, read a packet
int packetSize = Udp.parsePacket();
if (packetSize) {
// read the packet into packetBufffer
Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
UDP_Packet_received = 1;
// for debug only
// write packetBuffer to serial
Serial.print("UDP Packet received, Packet Content: ");
Serial.println(packetBuffer);
for (int i = 0; i < sizeof(packetBuffer); i++) {
data = packetBuffer;
}
return 1;
}
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... esp32-wifi
Недопустимое использование нестатической функции-члена arduino IDE ESP32 Wifi [дубликат] ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Недопустимое использование нестатической функции-члена arduino IDE ESP32 Wifi
Anonymous » » в форуме C++ - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-