Недопустимое использование нестатической функции-члена arduino IDE ESP32 Wifi [дубликат]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Недопустимое использование нестатической функции-члена arduino IDE ESP32 Wifi [дубликат]

Сообщение Anonymous »

Я пытаюсь преобразовать свою базовую библиотеку, которая обрабатывает мое 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Недопустимое использование нестатической функции-члена arduino IDE ESP32 Wifi
    Anonymous » » в форуме C++
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Использование нестатической функции-члена класса для обратного вызова
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Использование нестатической функции-члена класса для обратного вызова
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Неверное использование нестатической функции-члена «Virtual void utrellobaseresponder :: report (аргументы)» [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Код ошибки в Arduino IDE с ESP32-C3-DevKitM-1 [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»