Метценгерштейн 0 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба Уже не первая тема от меня с текущим проектом, но надо продолжать. Модуль ESP32, надо сделать обработку эвентов при коннектах и подключениях. Вот что дает в качестве примера производитель нам. /* * This sketch shows the WiFi event usage * */ /* * WiFi Events SYSTEM_EVENT_WIFI_READY < ESP32 WiFi ready SYSTEM_EVENT_SCAN_DONE < ESP32 finish scanning AP SYSTEM_EVENT_STA_START < ESP32 station start SYSTEM_EVENT_STA_STOP < ESP32 station stop SYSTEM_EVENT_STA_CONNECTED < ESP32 station connected to AP SYSTEM_EVENT_STA_DISCONNECTED < ESP32 station disconnected from AP SYSTEM_EVENT_STA_AUTHMODE_CHANGE < the auth mode of AP connected by ESP32 station changed SYSTEM_EVENT_STA_GOT_IP < ESP32 station got IP from connected AP SYSTEM_EVENT_STA_LOST_IP < ESP32 station lost IP and the IP is reset to 0 SYSTEM_EVENT_STA_WPS_ER_SUCCESS < ESP32 station wps succeeds in enrollee mode SYSTEM_EVENT_STA_WPS_ER_FAILED < ESP32 station wps fails in enrollee mode SYSTEM_EVENT_STA_WPS_ER_TIMEOUT < ESP32 station wps timeout in enrollee mode SYSTEM_EVENT_STA_WPS_ER_PIN < ESP32 station wps pin code in enrollee mode SYSTEM_EVENT_AP_START < ESP32 soft-AP start SYSTEM_EVENT_AP_STOP < ESP32 soft-AP stop SYSTEM_EVENT_AP_STACONNECTED < a station connected to ESP32 soft-AP SYSTEM_EVENT_AP_STADISCONNECTED < a station disconnected from ESP32 soft-AP SYSTEM_EVENT_AP_PROBEREQRECVED < Receive probe request packet in soft-AP interface SYSTEM_EVENT_GOT_IP6 < ESP32 station or ap or ethernet interface v6IP addr is preferred SYSTEM_EVENT_ETH_START < ESP32 ethernet start SYSTEM_EVENT_ETH_STOP < ESP32 ethernet stop SYSTEM_EVENT_ETH_CONNECTED < ESP32 ethernet phy link up SYSTEM_EVENT_ETH_DISCONNECTED < ESP32 ethernet phy link down SYSTEM_EVENT_ETH_GOT_IP < ESP32 ethernet got IP from connected AP SYSTEM_EVENT_MAX */ #include <WiFi.h> const char* ssid = "your-ssid"; const char* password = "your-password"; void WiFiEvent(WiFiEvent_t event) { Serial.printf("[WiFi-event] event: %d\n", event); switch (event) { case SYSTEM_EVENT_STA_GOT_IP: Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); break; case SYSTEM_EVENT_STA_DISCONNECTED: Serial.println("WiFi lost connection"); break; } } void WiFiGotIP(WiFiEvent_t event, WiFiEventInfo_t info) { Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(IPAddress(info.got_ip.ip_info.ip.addr)); } void setup() { Serial.begin(115200); // delete old config WiFi.disconnect(true); delay(1000); // Examples of diffrent ways to register wifi events WiFi.onEvent(WiFiEvent); WiFi.onEvent(WiFiGotIP, WiFiEvent_t::SYSTEM_EVENT_STA_GOT_IP); WiFiEventId_t eventID = WiFi.onEvent([](WiFiEvent_t event, WiFiEventInfo_t info){ Serial.print("WiFi lost connection. Reason: "); Serial.println(info.disconnected.reason); }, WiFiEvent_t::SYSTEM_EVENT_STA_DISCONNECTED); // Remove WiFi event Serial.print("WiFi Event ID: "); Serial.println(eventID); // WiFi.removeEvent(eventID); WiFi.begin(ssid, password); Serial.println(); Serial.println(); Serial.println("Wait for WiFi... "); } void loop() { delay(1000); } Есть ф-я void WiFiEvent(WiFiEvent_t event) и передаем ее при инициализации: WiFi.onEvent(WiFiEvent); WiFi- это класс, что в хидере. Я в своем проекте делаю почти тоже самое, только класс wifi- отнаследован от WiFi. wifi.onEvent(WiFiEvent); и компилятор выдает ошибку: ...t.cpp:48:27: error: invalid use of non-static member function wifi.onEvent(WiFiEvent); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба 7 минут назад, Метценгерштейн сказал: WiFi.onEvent(WiFiEvent); WiFi- это класс, что в хидере. Если WiFi - класс, то к нему нельзя использовать оператор '.' Оператор '.' используется для экземпляров класса. RTFM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба WiFi- это объект класса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба Пора пересилить себя и прочитать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба Да, это уже не первая ваша тема, и во всех темах вы приводите кучу мусора, не относящегося к делу, и не приводите ничего, что бы к делу относилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 5 апреля, 2020 Опубликовано 5 апреля, 2020 (изменено) · Жалоба 2 hours ago, Метценгерштейн said: класс wifi - отнаследован от WiFi. wifi.onEvent(WiFiEvent); Так все же что такое у вас wifi : - имя класса - имя объекта некоторого (какого-то вашего самописного, унаследованного от WiFi) класса ? Если имя класса - то такой синтаксис неправильный, и на него, скорее всего, ругается компилятор. Метод класса должен вызываться от имени объекта, а не от имени класса. То же самое и с WiFi - определитесь окончательно, класс это или объект класса. А то всех запутали. То у вас WiFi - это класс, то объект. Просто будьте точны в терминологии. Изменено 5 апреля, 2020 пользователем Darth Vader Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба 38 minutes ago, Darth Vader said: Метод класса должен вызываться от имени объекта, а не от имени класса. Статический метод может так вызываться. имя_класса.статический_метод(...) Книги - великая вешь, если умеешь читать (это для ТС) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба 15 minutes ago, x893 said: имя_класса.статический_метод(...) Подскажите пожалуйста, в какой книжке это описано? https://godbolt.org/z/PyKfGc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба 19 minutes ago, x893 said: Статический метод может так вызываться. имя_класса.статический_метод(...) Книги книгами, а ссылку на Language Reference Manual можете дать? Вроде как для вызова статических методов нужен scope resolution operator, т.е.: ClassName::static_method() А вашу книгу, похоже, нужно выбросить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба Ошибся, конечно имя_клсса::стат_метод() Через . в C# Книжки рано выбрасывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба 59 minutes ago, Darth Vader said: определитесь окончательно Ну вроде б очевидно, что вместе с чтением постов надо смотреть в хрустальный шар и гуглить по ключевым словам. Код из первого сообщения похож на официальный пример: https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFi/examples/WiFiClientEvents/WiFiClientEvents.ino Можно предположить, что он работает. Какой магией при подключении wifi.h подтягивается соотв. кусок BSP - я не знаю. Изучение ESP в планах есть, но всё никак руки не дойдут... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Captain777 0 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба Добрый день. Вопрос немного не в тему, но везде в описаниях написано, что ESP32 содержит на борту CAN. Но не в одном мануале я не обнаружил даже следов. Что это, массовый русскоязычный копи-паст? Или я не внимательно смотрю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 6 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба Да вроде бы есть у неё CAN, впрочем я не проверял. https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/can.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба 6 hours ago, x893 said: Пора пересилить себя и прочитать Пожалуйста, из этой книги, приведите мне абзац, где есть ответ на мой вопрос- почему ошибка. Иначе- это просто с понтом дела пост был. Что по факту и есть. 5 hours ago, one_eight_seven said: Да, это уже не первая ваша тема, и во всех темах вы приводите кучу мусора, не относящегося к делу, и не приводите ничего, что бы к делу относилось. Проект сложный. Сложный не в коде, а в подходе к написанию. Линукс, отладки нет никакой, еще и с компиляцией проблемы. Потому и вопросы такие. И во всех своих темах я даю много информации по мере поступления вопросов. Всё сразу сказать невозможно. 5 hours ago, Darth Vader said: То же самое и с WiFi - определитесь окончательно, класс это или объект класса. А то всех запутали. То у вас WiFi - это класс, то объект. Просто будьте точны в терминологии. Согласен. Путаницу внес. Имеем вот что- пример от производителя: WiFi.onEvent(WiFiEvent); WiFi.begin(ssid, password); где WiFi - это .... в файле WiFi.h описан класс WiFiClass и в .cpp сразу сделан его объект WiFiClass WiFi; в файле WiFi.h extern WiFiClass WiFi; поэтому в примере данном, обращение WiFi.onEvent(WiFiEvent); к объекту класса вполне валидное. Но так у меня тоже не работает. Если я делаю такое же обращение - передаю адрес ф-ии как параметр. У меня же определен свой объект этого класса. WiFiClass wifi; (всё маленькими wifi) И работает wifi и подключение и прочее. Вызываются методы класса Например, wifi.begin(i_ssid, i_password); Всё компилится, все работает. С объектом класса нет проблем. Начал развивать проект, и не могу передать wifi.onEvent(WiFiEvent); ошибка Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Captain777 0 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба 41 минуту назад, SSerge сказал: Да вроде бы есть у неё CAN, впрочем я не проверял. https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/can.html Да, это уже тоже нашел.... Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться