Ihor
у меня были проблемы с this в классе, например я хотел именно в классе реализовать методы onConnect, onDisconnect и зарегистрировать их например на фунции init, но коллбэк Wifi.onEvent([]()) не хочет видить там this и приходилось размазывать этот кусок по main.cpp, там регистрировать и дергать методы класса, хотелось бы скрыть под капот эту штуку а в main занятся более важными вещами
Ihor
а с namespace по идее такой проблемы не будет потому что экземпляр один и this нет
Ivansuper
Ух, опасно ты так сразу в лямбды пошел : )
Ihor
😅 а что там проблемы?)
Andrey
This - это ссылка на текущий экземпляр класса
Ihor
This - это ссылка на текущий экземпляр класса
да я понимаю, но этот коллбэк зареганый под капотом так чтоине принимает [this]
Ihor
да что говорить, вобше ничего не принимает, только с глобального окружение что зарегано за функцией setup
Ihor
а в namespace работает, и вопрос в том это фича или выстрел в ногу?
Andrey
да я понимаю, но этот коллбэк зареганый под капотом так чтоине принимает [this]
Если это лямбда - функция - прочитайте что указывается в квадратных скобках
Ihor
если обявить лямбду нормально typedef std::function<void()> сallback_t; то все ок, а обявление в WiFi.onEvent не такое мягко говоря)
Ivansuper
В квадратных скобках то, КАК ты хочешь передать
Andrey
ну то что я хочу передать внутрь
Нет, то что должно попасть в область видимости
Ihor
В квадратных скобках то, КАК ты хочешь передать
ну там не поможет [=this] или [&this], пробовал если вы об этом
Ivansuper
По скольку все это в конечном счете сводится к указателю на функцию, то возникают проблемы с this в случае инстансов классов/структур, ибо ты дожен подавать еще один указатель, который будет указывать на каком инстансе эту функцию вызывать
Ivansuper
Куда-то дальше тут задвигать не буду, ибо сам еще не проникся до конца данными механизмами
Ihor
вот, мы пришли к тому что всетаки тут лучше заюзать namespace?)
Ihor
и не игратся с this?
Ihor
который на проекте всеравно в одном экземпляре может быть
Ihor
так как wifi физически один
Ivansuper
вот, мы пришли к тому что всетаки тут лучше заюзать namespace?)
Лучше посидеть, подумать как надо, и делать так, как именно тебе надо
Ivansuper
Нет какого то идеально перфектного бест практис маст хева. Есть хорошее знание языка и паттернов проектирования. Сгибай их как тебе надо и решай задачи : )
Ihor
ну я хочу полностью инкапсулировный файл для работы с wifi, чтобы я не размазывал его реализацию в main.cpp
Ivansuper
ну я хочу полностью инкапсулировный файл для работы с wifi, чтобы я не размазывал его реализацию в main.cpp
А оно тебе надо? То, что не вызывается и не используется "не станет огого больше RAM занимать"
Ivansuper
Поэтому если что-то увидишь лишнее в автокомплите — не страшно
Ivansuper
Если будешь гоняться за сильной чистотой, то можешь только проблем нажить
Ihor
я про то что мне мешает этот код в main, там должен быть другой полезный код а не кишки одного из классов
Ivansuper
Понимаешь, твое стремление оправдано если ты работаешь в команде или пишешь библиотеку : )
Ivansuper
я про то что мне мешает этот код в main, там должен быть другой полезный код а не кишки одного из классов
Ну я уже говорил — объявляй и используй кишки не в хедере, а в самом срр файле
Ivansuper
В неймспейс ты можешь сложить только декларации
Ihor
да, но в классе у меня прлблемы с евентами и this, а в namespace вроде как все четко и всю реализацию я могу написать там, без помощи main.cpp
Ivansuper
А я тебя не заставляю в классе делать : )
Andrey
вот, мы пришли к тому что всетаки тут лучше заюзать namespace?)
Namespace то причём? Это просто способ разделить какие-то вещи в логические блоки
Ihor
в main.cpp просто wifi.init(), wifi.connect() и т.д
Ihor
в этом и вопрос мой, namespace фича или выстрел в ногу в этом случае
Ivansuper
Неймспейс ограничивает ИМЕННОЕ пространство, не имплементационное. Это важно понять : ) Т.е. ты говоришь, что есть пространство имен с такими то функциями, переменными и т.п., а конкретная их реализация это уже как ты хочешь
Andrey
Стеклянный член - если не понимаешь как пользоваться - можно разбить
Ivansuper
Потом везде где ты будешь это использовать, ты будешь культурно ограниченно видеть только через то, что объявил в неймспейсе. Так что вперед если тебя устраивает
Ihor
понял, спасибо всем!💪
Ivansuper
Еще из рубрики внезапных реклам
Ivansuper
Ну-ну
Ihor
подскажите какой-то радиоэлемент или их связка чтобы логическими значениями можно было переключать полярность DC 12v 6A? Менять + на - и наоборот
Василий
реле, или же H-мост
Ihor
реле, или же H-мост
то есть можно заюзать драйвер моторов, H-мост?
Василий
угу
Ihor
угу
спасибо!
Василий
я так много раз делал
Ihor
если у меня esp32 на 4мб флэша это значит что я могу занять 2мб прошиквкой и обновить её по OTA ?
Ihor
или для прошивки используется другая память?
Ivansuper
или для прошивки используется другая память?
Память делится на разделы, как жесткий диск в ПК. Для ОТА нужно 2 раздела
Yuriy
Неймспейс ограничивает ИМЕННОЕ пространство, не имплементационное. Это важно понять : ) Т.е. ты говоришь, что есть пространство имен с такими то функциями, переменными и т.п., а конкретная их реализация это уже как ты хочешь
Область видимости еще ограничивает, правильно? И как это имплементация должна быть в том же namespace быть при этом это ИМЕННОЕ пространство... не понятно какие свойства namespace раскрывает это замечание
Yuriy
Ну по факту да. Надо непосредственно указывать пространство, иначе не видно
Не видно - ограничивает область видимости переменной namespace в котором она задекларирована. Как еще бывает?
Yuriy
Можно кстати и не указывать непосредственно при использовании. Если по факту - это какой это квази класс получатся - нафиг не надо - если c++, в с остра необходимость - вообще жопа без этого , но и в с++ прикольно тоже использовать Вообще помоему самый вольный язык c - c++ такой суржик можно писать прям диво дивное - из всего по маленьку А #define проекта с arduino и двумя целями (32, 8266) - это ... ну его нахер, ничего не помогает, костыли на костылях страшно местами строчки поменять - PS Извините вырвалось
Yuriy
FileHelper.h class FileHelper { public: FileHelper(const char* name); void exists(); void remove(); size_t getSize(); }; Что мешает мне реализацию прям тут сделать? Нежелание иметь include - зависиимости - которая используется для этой реализации, он будет непосредственно и только в cpp . - это вроде логично - "интерфейс" чище, реализация отдельно. Но например конструктор бывает удобно в заголовке, чем каждый раз прыгать в сpp смотреть инициализацию. Кстати, как предпочитаете: SomeConstructor(int a, int b ): _a{a}, _{b}: {}; Читал что это вариант truЪ - но блин когда много этой инициализации, и еще порядок очень важен блин, это прям не нравится. SomeConstructor(int a, int b) { _a{a}; _b{b}; } SomeConstructor(int a, int b) { _a = a; _b = b; } ? А так -ничего и в заголовке .h и будет ок. Только forward declaration - будет не очень удобно, а если это глобальный класс и статические члены у него, вообще совсем не удобно, как его includ'ить потом - если в нем же место хранения? Мне кажется исходя из этого и так и так практикуется - на каждый чих -по два файла тоже не всегда удобно. Бывает же и один .h + много .cpp , и в .h - 100500 классов. Каждый пишет как хочет судя по всему
Aliaksei
Парни, а есть тут кто пишет на Lua?
Slava
www.youtube.com/watch?v=qIayIuqPAmU
Slava
100$ 😭
Slava
www.arduino.cc/pro/tutorials/portenta-h7
Slava
https://www.facebook.com/official.arduino/videos/portenta-h7-runs-doom/807357443073401/
Ivansuper
Но вообще да, дорогая блин. А поиграть хотелось взять
Dmitry
Сколько примерно кушает ESP32? (в активном режиме WiFi + BLE)
Egor
Wi-fi порядка 250-300 мА Блютус порядка 130 мА Это по памяти говорю
Dmitry
Wi-fi порядка 250-300 мА Блютус порядка 130 мА Это по памяти говорю
Спасибо! Это по питанию порядка 600мА запас нужен. Как бы не 800, как у есп8266
Dmitry
Что мешает посмотреть даташит? :)
Даташит на микруху или на модуль? :) по опыту, китайские модули esp12 вообще по разному кушают. Разброс в 200-300мА. На одинаковых прошивках
Василий
Ребята - подскажите как задать AT командой имя модуля ESP8266 - в режиме - Station ???
Василий
да, спасибо уже тоже это нашел - проверяю
Василий
почему то не хочет устанавливать имя AT+CWMODE? +CWMODE:1 OK AT+CWHOSTNAME="MyESP_123" ERROR
Василий
написано - Если режим станции не включен, то команда вернет: ERROR а он включен AT+CWMODE? +CWMODE:1
Василий
что ему не так ???
Василий
но почему то в описании приведен пример AT+CWMODE=3 - а это уже Station + SoftAP
Василий
попробовал AT+CWMODE=3 - таже история - модуль отвечает ERROR