Василий
типа вот тут прикольно, а вот тут надо бы поменять)
Dr Zlo
Еще в декабре проводили хакатон с этой целью, раздали штук 30 флипперов.
Василий
блин, прикольно
Василий
только я чота все время мимо этих хакатонов)
Dr Zlo
в Хидере объявил функции без необязательной переменной extern void putLogln(const String &results); extern void putLogln(); extern void putLogln(const Printable& x); extern void putLogln(unsigned char b, int base); extern void putLogln(const char *results); extern void putLog(const String &results); в .ino в самих функциях оставил void putLogln(const String &results, int msg_level_debug = 0){ ... } void putLogln(){ String str_tmp=""; putLogln(str_tmp); //putLogln(String("")); return; } void putLogln(const Printable& x, int msg_level_debug = 0) { putLogln((x)); //putLogln((String)String(x), msg_level_debug); return; } void putLogln(unsigned char b, int base, int msg_level_debug = 0){ // !!! отбрасываем систему счисления, потом нужно переделать с конвертацией putLogln(String(b) + String("/n")); return; } void putLogln(const char *results, int msg_level_debug = 0){ putLogln((String)String(results)); return; } void putLogln(const char * results, int msg_level_debug = 0){ putLogln((String)String(results)); return; } void putLog(const String &results, int msg_level_debug = 0){ ... } получаю ошибку при компиляции C:/avrprojects/GSM_alarm_garage_esp32/src/config.ino:508:19: error: call of overloaded 'putLogln(String&)' is ambiguous putLogln(str_tmp); ^ In file included from C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:122:0: src\config.h:174:14: note: candidate: void putLogln(const String&) extern void putLogln(const String &results); ^ C:/avrprojects/GSM_alarm_garage_esp32/src/config.ino:471:6: note: candidate: void putLogln(const String&, int) void putLogln(const String &results, int msg_level_debug = 0){ ^
Наоборот, вам нужно в хидере указать дефолтный параметр, а из реализаций его убрать. extern тут кстати не нужен
Dr Zlo
сейчас extern уберу и попробую.
Это не важно. Важно место указания дефолтного параметра.
Mike
Наоборот, вам нужно в хидере указать дефолтный параметр, а из реализаций его убрать. extern тут кстати не нужен
В хидер перенес дефолтный параметр, из реализации функций убрал и опять ошибка где компилятор не может определиться какую функцию выбрать, хотя я ему прямо сказал какой тип параметров будет - (char *): C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:243:39: error: call of overloaded 'putLogln(char*)' is ambiguous putLogln((char *)"BME280 indication"); ^ In file included from C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:122:0: src\config.h:174:8: note: candidate: void putLogln(const String&, int) void putLogln(const String &results, int msg_level_debug = 0); ^ src\config.h:178:8: note: candidate: void putLogln(const char*, int) void putLogln(const char *results, int msg_level_debug = 0); ^ C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:249:6: note: candidate: void putLogln(const String&) C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:254:6: note: candidate: void putLogln(const char*) putLogln("BME280 Temperature = " +String(sensor_data.bme280_temp,DEC) +String(" *C"));
Mike
что компилятору мешает выбрать функцию void putLogln(const char *results, int msg_level_debug = 0); когда ему говорят что тип входногопараметра массив строк putLogln((char *)"BME280 indication"); ?
Dr Zlo
char * может быть скастован как в const String& так и в const char*
Dr Zlo
Кстати, так как вы делает кастовать опасно, используйте static_cast.
Dr Zlo
Получите более явный репорт о проблеме, и ошибку вместо варнинга если ошибетесь в константности.
Dr Zlo
в чем опастность?
Например в том что сейчас вы не понимаете почему происходит ошибка. А еще если сделать: char* str = (char *)"Hello"; str[0] = 'A'; возникнет веселье
Dr Zlo
static_cast<const char*>("BME280 indication");
Mike
static_cast<const char*>("BME280 indication");
C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:243:58: error: call of overloaded 'putLogln(const char*)' is ambiguous putLogln(static_cast<const char *>("BME280 indication")); ^ In file included from C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:122:0: src\config.h:174:8: note: candidate: void putLogln(const String&, int) void putLogln(const String &results, int msg_level_debug = 0); ^ src\config.h:178:8: note: candidate: void putLogln(const char*, int) void putLogln(const char *results, int msg_level_debug = 0); ^
Dr Zlo
Mike
и к другим вызовам тоже ошибка появилась, даже вот к таким: C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:244:102: error: call of overloaded 'putLogln(StringSumHelper&)' is ambiguous putLogln((const String)String(" Temperature = ") +String(bme.readTemperature(),DEC) + String(" *C")); ^ In file included from C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:122:0: src\config.h:174:8: note: candidate: void putLogln(const String&, int) void putLogln(const String &results, int msg_level_debug = 0); ^ C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:249:6: note: candidate: void putLogln(const String&)
Mike
именно на такое поведения компилятора я и рассчитывал, но после добавления необяхательного параметра в функцию, начались выкрутасы с такими вот ошибками.
Dr Zlo
без int параметра
Dr Zlo
компилятор не может выбрать между putLogln(const String&) putLogln(const String&, int = 0)
Mike
компилятор не может выбрать между putLogln(const String&) putLogln(const String&, int = 0)
эти функции только в двух местах кода: config.h void putLogln(const String &results, int msg_level_debug = 0); config.ino void putLogln(const String &results){ ... } вроде так и было задуманоЮ в Хидере обхявление с необязательной переменной и без external, а в коде без необязательной переменной.
Mike
в config.ino функция должна выглядеть как void putLogln(const String &results, int msg_level_debug);
тогда параметр msg_level_debug будет обязательным, а нужно чтобы его можно было не паредавать и подставлялось дефолтное значение.
Dr Zlo
Так как в declaration вы указали что если значение не задано, то оно равно 0
Mike
в config.ino функция должна выглядеть как void putLogln(const String &results, int msg_level_debug);
сделал в хидере так: void putLogln(const String &results, int msg_level_debug); получил ошибку C:/avrprojects/GSM_alarm_garage_esp32/src/config.ino: In function 'void putLogln(const String&)': C:/avrprojects/GSM_alarm_garage_esp32/src/config.ino:475:25: error: 'msg_level_debug' was not declared in this scope if (msg_level_global>=msg_level_debug) return; // ничего РЅРµ логируем если уровень отладки РЅРёР¶Рµ СѓСЂРѕРІРЅСЏ сообщения ^ в config.ino:475 используется переменная msg_level_debug, но она не объявлена в самой функции: void putLogln(const String &results){
Dr Zlo
нет, не void putLogln(const String &results){
Dr Zlo
void putLogln(const String &results, int msg_level_debug){
Mike
void putLogln(const String &results, int msg_level_debug){
C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:244:102: error: no matching function for call to 'putLogln(StringSumHelper&)' putLogln((const String)String(" Temperature = ") +String(bme.readTemperature(),DEC) + String(" *C")); ^ C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:249:6: note: candidate: void putLogln(const String&, int) C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:249:6: note: candidate expects 2 arguments, 1 provided In file included from C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:122:0: src\config.h:175:8: note: candidate: void putLogln(int) void putLogln(int msg_level_debug); ^ src\config.h:175:8: note: no known conversion for argument 1 from 'StringSumHelper' to 'int' src\config.h:176:8: note: candidate: void putLogln(const Printable&, int) void putLogln(const Printable& x, int msg_level_debug); ^ src\config.h:176:8: note: candidate expects 2 arguments, 1 provided src\config.h:177:8: note: candidate: void putLogln(unsigned char, int, int) void putLogln(unsigned char b, int base, int msg_level_debug); ^ src\config.h:177:8: note: candidate expects 3 arguments, 1 provided src\config.h:178:8: note: candidate: void putLogln(const char*, int) void putLogln(const char *results, int msg_level_debug); ^ src\config.h:178:8: note: candidate expects 2 arguments, 1 provided C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:250:6: note: candidate: void putLogln() void setBME280Data(void){ ^ C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:250:6: note: candidate expects 0 arguments, 1 provided C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:251:6: note: candidate: void putLogln(const Printable&) // Раскладываем показания от BME280 в параметры для отправки
Mike
ошибка на отсутствие переменной ушла, теперь опять типы подобрать не может.
Daniil
Кто-нибудь замечал, что при подключении к вифи в общественных местах тебя типо редиректит на страницу регистрации. Как это делается? На есп как зафигачить, чтоб оно на мою вебморду редиректило?
Daniil
Понял, спасибо, погуглю)
CRM
Понял, спасибо, погуглю)
В комплекте с ядррм есть примеры
¿
Как научить тг бота еспшного отправлять сообщение с гиперссылкой?
Evgeniy
Други! Дайте плиз какой нибудь рабочий пример отправки данных с ЕСП по протоколу WebSocket на сервер, ну и приема данных на сервере😉😞
Evgeniy
в этом случае то все понятно, тут серверная часть в ЕСП, а мне надо от ЕСП передавать данные на сервер, например на Flask
Null
без разницы на чем сервер, главное что там websocket
Да как раз таки разница есть, точка конекта
Василий
websocket всеголишь транспорт.
Evgeniy
конечно разница существенная
Null
И да пример класический, клиент-сервер А нужен сервер-сервер
Василий
а что и куда засовывать будете - ваше право
Null
websocket всеголишь транспорт.
Вы видимо не только не сталкивались, но даже примеры не смотрели
Evgeniy
на ESP сервер не требуется, только отправка данных по WS
Василий
Вы видимо не только не сталкивались, но даже примеры не смотрели
уж я то сталкивался))) вы просто видно на уровне абстракции повыше)
Null
а что и куда засовывать будете - ваше право
Ну ок, давай поключись клиентом с сервера с хоста где то в мексике к моей есп которая в снг на локальном роутере
Null
Сокеты там самое главное подключится
Null
А уже данные там в обе стороны летают
Null
И подключение это 80% всех сложностей
Василий
естественно
Василий
искусственные сложности в угоду безопасности
Evgeniy
пример нужен, а не всхлипы капитана очевидность
Василий
уточню - "типа безопастности"
Василий
вебсокет примеров для мк валом
Null
Други! Дайте плиз какой нибудь рабочий пример отправки данных с ЕСП по протоколу WebSocket на сервер, ну и приема данных на сервере😉😞
Если честно с реализацией сервер-сервер не сталкивался и не слышал В теории возможно но на практике пинг и потери обычно на обычный пакетный протокол перекидывает
Василий
натянуть - вопрос 5 минут
Василий
вы ленивы)
Evgeniy
спать иди, не мешайся
Василий
спать иди, не мешайся
ох какой злой.... говорю быстрее бы нашел уже ответ в нете, чем людей зря тревожить, тем более посреди ночи... В чат пишут после недели гугления или лентяи)))
Null
Самая главная боль в есп это потери на связь Если нужен поток - кидайте utp Если нужно таки двухстороннее то увы не помогу В свое время на обычном транспортном остановился и мне хватает 3-4 пакета в секунду с головой что бы получать быстрый отклик с сервера
Null
спать иди, не мешайся
Вам вообще для каких целей?
Evgeniy
передача данных на сервер для последующего отображения
Evgeniy
с обратной связью
Null
передача данных на сервер для последующего отображения
Если не нужна обратная связь на esp то валите utp потоком Без ожидания отклика А если важен отклик то в каких пределах? Другими словами отклик важен человеко-субьективный или машинный?
Null
И как часто тогда обратная связь?
Null
Ща я кажись в абривиатуре косанул
Evgeniy
udp может?