Lx671 389 Жалоба Опубликовано 3 апреля @VALKNUT Случайно не занимались передачей данных с компа (телефона) на esp в режиме сервера ESP?? Там получается ESP реагирует на то, что описано-разрешено: server.on("/led2on", handle_led2on); server.on("/led2off", handle_led2off); server.onNotFound(handle_NotFound); ..... Не нашел, как можно сюда переменную воткнуть...типа server.on("/led2on?data=1234", handle_led2on); ?? Ну или при NotFound узнать куда было обращение в сторону ESP? Поделиться сообщением Ссылка на сообщение
VALKNUT 3842 Жалоба Опубликовано 3 апреля 22 минут назад, Lx671 сказал(а): Не нашел, как можно сюда переменную воткнуть...типа server.on("/led2on?data=1234", handle_led2on); ?? Ну или при NotFound узнать куда было обращение в сторону ESP? Не совсем понял задачу. Вы подняли на ESP сервер (вебсервер), открыли его в браузере с компа/телефона и что-то (команду) хотите передать на сервер, так? Гляньте GyverPortal, там уже куча всего напридумано и вполне юзабельно. Поделиться сообщением Ссылка на сообщение
Lx671 389 Жалоба Опубликовано 4 апреля 10 часов назад, VALKNUT сказал(а): открыли его в браузере с компа/телефона и что-то (команду) хотите передать на сервер, так? Не команду (это везде примеров ...), а цифровую инфу (переменную). 10 часов назад, VALKNUT сказал(а): Гляньте GyverPortal, там уже куча всего напридумано и вполне юзабельно. Там везде описывается веб-морда через интернет, делают контейнеры на основании их библиотек, это у меня давно есть. И зависоны убрал. Например нужно установить время на ESP с телефона без участия интернета.)) Поделиться сообщением Ссылка на сообщение
Lx671 389 Жалоба Опубликовано 20 апреля @VALKNUT Привет. )) Случайно не занимались с энергонезависимой памятью на ESP8266? Здесь все "красиво" описано - https://alexgyver.ru/lessons/eeprom/?ysclid=m9o0680c1d940629888 Только достаточно нажать RESET на ESP и данные обнуляются. Фигня какая-то, примеры везде похожие и без перезагрузки... Работает пока питание не дернуть. Поделиться сообщением Ссылка на сообщение
VALKNUT 3842 Жалоба Опубликовано 20 апреля 28 минут назад, Lx671 сказал(а): Случайно не занимались с энергонезависимой памятью на ESP8266? Да, занимался и использую в некоторых проектах. Использую "LittleFS". Данные хранятся на флеш памяти, в текстовом файле. Туда пишется при изменении и считывается при запуске. Спойлер #include <LittleFS.h> struct Data { int myKey; float myTermostat, myHisteresis; bool noMSG, noOTA; }; float myTermostat, myHisteresis; bool noMSG, noOTA; void SetDEFmyData() { // если нет данных во флеш, записываем данные по умолчанию mydata.myKey = 1; mydata.myTermostat = 27.0; mydata.myHisteresis = 1.0; mydata.noMSG = 0; mydata.noOTA = 0; } void setup() { Serial.begin(115200); LittleFS.begin(); FDstat_t stat = data.read(); switch (stat) { case FD_FS_ERR: Serial.println(F("FS Error")); break; case FD_FILE_ERR: Serial.println(F("Error")); break; case FD_WRITE: Serial.println(F("Data Write")); break; case FD_ADD: Serial.println(F("Data Add")); break; case FD_READ: Serial.println(F("Data Read")); break; default: break; } if (mydata.myKey == 1) { myTermostat = mydata.myTermostat; myHisteresis = mydata.myHisteresis; String myStr; myStr += F("Данные найдены в памяти контроллера.\n"); myStr += F("Термостат: "); myStr += myTermostat; myStr += F("\nГистерезис: "); myStr += myHisteresis; bot.sendMessage(myStr); Serial.println(F("Данные найдены в памяти контроллера.")); myDataSerial(); } else { Serial.println(F("Установка в постоянную память данных по умолчанию")); SetDEFmyData(); Serial.println(F("Чтение записанных данных по умолчанию")); myDataSerial(); } data.update(); } void SetDEFmyData() { // меняем данные mydata.myKey = 1; mydata.myTermostat = 27.0; mydata.myHisteresis = 1.0; mydata.noMSG = 0; mydata.noOTA = 0; } void loop() { if (data.tick() == FD_WRITE) Serial.println(F("Data updated!")); if (noOTA == 0) ui.tick(); } 1 Lx671 отреагировали на это Поделиться сообщением Ссылка на сообщение
Lx671 389 Жалоба Опубликовано 20 апреля 2 часов назад, VALKNUT сказал(а): Использую "LittleFS". Этот плагин от куда ставили? И у вас в коде 2 раза прописана процедура SetDEFmyData, это ошибка ? Поделиться сообщением Ссылка на сообщение
VALKNUT 3842 Жалоба Опубликовано 20 апреля 43 минут назад, Lx671 сказал(а): это ошибка ? Да, это ошибка. Я для Вас выдергивал куски кода, задублировал по случайности.. 48 минут назад, Lx671 сказал(а): Этот плагин от куда ставили? Что-то уже и не вспомню, попробуйте найти в примерах.. этот плагин вроде как сам ставится, при установке поддержки ESP Поделиться сообщением Ссылка на сообщение
Lx671 389 Жалоба Опубликовано 22 апреля В 20.04.2025 - 21:45, VALKNUT сказал(а): Что-то уже и не вспомню, попробуйте найти в примерах.. Вот в примеры вы меня правильно направили)) У Гувера уже не 1-ый раз попадаю на неполное или кривое описание. Это 2-я web-морда, работает вместе с 1-ой(интернет), если не отключить. Получилось прямая передача данных с любого устройства Wi-Fi и запись расписания во флэш на ESP. Теперь оно самостоятельное. Чихирос нервно курит в туалете)) 1 VALKNUT отреагировали на это Поделиться сообщением Ссылка на сообщение
Lx671 389 Жалоба Опубликовано 11 мая @VALKNUT Привет. Вы как-то писали, что посылали сообщения в телегу с ESP. Там строка должна быть с протоколом https. Пока этот момент не нашел. Если вспомните, напишите. Это другой проект, с телегой удобнее... Поделиться сообщением Ссылка на сообщение
VALKNUT 3842 Жалоба Опубликовано 11 мая 13 минут назад, Lx671 сказал(а): @VALKNUT Привет. Вы как-то писали, что посылали сообщения в телегу с ESP. Там строка должна быть с протоколом https. Пока этот момент не нашел. Если вспомните, напишите. Это другой проект, с телегой удобнее... Я использую готовую библиотеку FastBot, Гиверовскую.. она не идеальна, но мои потребности закрывает полностью. Спойлер // общее демо библиотеки. Обязательно смотри остальные примеры и документацию на гитхаб! // где получить токен и ID https://kit.alexgyver.ru/tutorials/telegram-basic/ #define WIFI_SSID "login" #define WIFI_PASS "pass" #define BOT_TOKEN "2654326546:azjhAsfAsfkllgUsaOuiz_axfkj_AsfkjhB" #define CHAT_ID "123456789" #include <FastBot.h> FastBot bot(BOT_TOKEN); void setup() { connectWiFi(); // можно сменить токен //bot.setToken(BOT_TOKEN); // можно сменить размер буфера на (приём, отправку), по умолч. 512, 512 //bot.setBufferSizes(1024, 512); // установить ID чата, чтобы принимать сообщения только из него // узнать ID можно из ручного запроса в браузере bot.setChatID(CHAT_ID); // передай "" (пустую строку) чтобы отключить проверку // можно указать несколько ID через запятую //bot.setChatID("123456,7891011,12131415"); // подключаем функцию-обработчик bot.attach(newMsg); // отправить сообщение в указанный в setChatID bot.sendMessage("Hello, World!"); } // обработчик сообщений void newMsg(FB_msg& msg) { // выводим имя юзера и текст сообщения //Serial.print(msg.username); //Serial.print(", "); //Serial.println(msg.text); // выводим всю информацию о сообщении Serial.println(msg.toString()); } void loop() { bot.tick(); // тикаем в луп } void connectWiFi() { delay(2000); Serial.begin(115200); Serial.println(); WiFi.begin(WIFI_SSID, WIFI_PASS); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); if (millis() > 15000) ESP.restart(); } Serial.println("Connected"); } 1 Lx671 отреагировали на это Поделиться сообщением Ссылка на сообщение
Lx671 389 Жалоба Опубликовано 11 мая 8 часов назад, VALKNUT сказал(а): FastBot, Гиверовскую.. Это запустил. С чатом фигня какая-то... Не могу ID получить и на любое сообщение такую ерунду пишет. Это я с компа через браузер. Не сталкивались с таким? Поделиться сообщением Ссылка на сообщение
VALKNUT 3842 Жалоба Опубликовано 11 мая 2 часов назад, Lx671 сказал(а): Не сталкивались с таким? Надо получить свой ID, туда бот будет писать. У бота токен... Поделиться сообщением Ссылка на сообщение
VALKNUT 3842 Жалоба Опубликовано 23 июня Паять или не паять, вот в чем вопрос (с) Датчики DS18B20 сами по себе довольно точные, но.. Практика показала, что эти датчики подключенные через разъемы, рано или поздно начинают давать "пилу". То есть то правильно измеряют, то не правильно, а порой вообще не измеряют.. Вот график датчика на разъеме... Специально заскринил 12-ти часовые графики, для наглядности.. Есть пара устройств, где провода датчиков тупо припаяны к выводам платы.. На второй картинке нижний график (улица, батарея). Я к тому, что конечно удобно иметь разъем для замены датчика температуры "на ходу", но с практической точки зрения.. лучше открыть устройство и перепаять 3 провода, чем сомневаться в точности замера. Для примера: 3 датчика находятся в одном отсеке сампа НО! Датчик на разъеме выдает "ВОДА" 23.55°С и всё время его "колбасит".. А два других датчика припаяны и показывают одну температуру.. "ВОДА" 21.56°С и "ВОЗДУХ" 21.56°С.. /напомню, что три датчика находятся в одинаковых условиях/ А я столько красивых разъемчиков накупил.. Ну и мой излюбленный способ контроля.. телега-бот 02:13 - запуск охлаждения 10:28 - запрос состояния (вручную) /значения в десятых/сотых разные, это приемлемая погрешность/ 11:58 - уведомление об окончании охлаждения до заданной температуры 13:53 - запуск нагрева 13:55 - запрос состояния (вручную) Поделиться сообщением Ссылка на сообщение
Lx671 389 Жалоба Опубликовано 24 июня 19 часов назад, VALKNUT сказал(а): Практика показала, что эти датчики подключенные через разъемы, рано или поздно начинают давать "пилу" Просто не надо вставлять датчик в разъем. У меня они припаяны к проводам, а провода вставлены в "правильные" разъемы рядом с контроллером. 19 часов назад, VALKNUT сказал(а): А я столько красивых разъемчиков накупил.. Правильные - они не красивые)) Они с покрытием хотя-бы Ag и подпружининые, с аппаратуры. А бытовые типа RCA должны быть с Au и они здоровые - класс HI-end. Остальные - хрень. ________ К стати получилось скрестить с телегой режим server ap. В телеге команду на прописку eeprom даю и перезагрузку. А в сервере на сети от ESP могу заносить данные на web-морде без интернета, например коррекцию и номер термодатчика... У меня параметры сети и бота. Ну это может вам такую идею захочется. Я сразу "горячую замену" делал, когда с влагоизоляцией разбирался. Поделиться сообщением Ссылка на сообщение
VALKNUT 3842 Жалоба Опубликовано 24 июня 36 минут назад, Lx671 сказал(а): Ну это может вам такую идею захочется. Таких идей было много за всё время (начинал с Arduino Uno), но пришел к удобному для себя решению: - 1 датчик на 1 пин (датчика 2) = пофиг адрес = выпаял старый и впаял новый, если вдруг чего.. - EEPROM не использую, нечего писать в него, раньше активно использовал (на Uno и Mega) Разъемы "красивые", это про 3,5мм золоченые, как на наушники. Но пришел к выводу, что лучше пайки нет ничего. Объясню свою мысль: 2 или три раза мне понадобился разъем, чтоб заменить датчик, который "пилил" из-за разъема и ни разу не менял датчики там, где они были припаяны... Совпадение? - не думаю (с) Сейчас озадачился сделать вместо ступенчатого увеличения скорости куллера, плавный набор скорости. Сейчас у меня есть 5 скоростей, которые задействуются по алгоритму "чем больше разница заданной температуры и текущей, тем выше скорость". - Пока только мысль сделать это плавно, а не ступенчато. Поделиться сообщением Ссылка на сообщение
Lx671 389 Жалоба Опубликовано 24 июня 3 часов назад, VALKNUT сказал(а): EEPROM не использую, нечего писать в него, Ну я в том плане сделал, что можно народу загнать по дешевке)) Они свои данные введут и все... Кулер с шим плавно вы ж как свет можете... Только у него обмотка пищит тогда. Надо выпрямлять и под конкретный кулер подгонять. У меня эта функция есть, я за 1 сек разгоняю. Ну он даже ночью почти не слышен, я его на полную разгоняю. 3 часов назад, VALKNUT сказал(а): Разъемы "красивые", это про 3,5мм золоченые, как на наушники Иногда лучше спросить. Они подходят только на наушники. Отошли - поковырял)) У меня совсем не золотые, но надежные. Еще от com-портов идут и на разъем esp8266 идеально подходят старые шлейфы IDE(40 линий) и от флопов от старых компов. Поделиться сообщением Ссылка на сообщение
VALKNUT 3842 Жалоба Опубликовано 24 июня 2 минут назад, Lx671 сказал(а): что можно народу загнать по дешевке)) Они свои данные введут и все... У меня нет коммерческой "нотки" (жена не даст соврать ). Если берусь кому-то помогать, помогаю бесплатно.. или не берусь вовсе. 4 минут назад, Lx671 сказал(а): У меня совсем не золотые, но надежные. Еще от com-портов идут и на разъем esp8266 идеально подходят старые шлейфы IDE(40 линий) и от флопов от старых компов. Не мой метод.. увы.. и кембрики не использую уже лет 10.. только термоусадка. Шлейфы от хардом мне тоже не подходят, зрение покинуло чат и если что-то паяю, то в очках часовщика Поделиться сообщением Ссылка на сообщение
VALKNUT 3842 Жалоба Опубликовано 24 июня 6 часов назад, VALKNUT сказал(а): Пока только мысль сделать это плавно, а не ступенчато Получилось что-то такое.. еще не проверял.. дома проверю #define FanPin 10 // Пин куллера int fanPWM = 0; // Начальная скорость куллера float fThermostat, fT1, fDiff; // Температура: Заданная, Текущая, Разница int maxDiff = 3000; // Максимальная разница | 1000 = 1°C void GetDiff() { fanPWM = map((abs((fDiff * maxDiff)), 0), 0, maxDiff, 0, 255); // Конвертируем диапазон 0-3000 в 0-255 analogWrite(FanPin, fanPWM); // устанавливаем значение ШИМ пина } Поделиться сообщением Ссылка на сообщение
Lx671 389 Жалоба Опубликовано 24 июня 1 час назад, VALKNUT сказал(а): Получилось что-то такое. Ну это не плавно)) Это вычисляете разницу и резко перескакиваете на нее. Ну криво будет совсем. Начало вращения кулера будет не 1, а надо покрутить. И будет нарастание, еще кривее, чем у света, надо ломаный график строить. И при данном алгоритме, при превышении окруж среды, температура в акве все время будет болтаться выше MAX. Там получится, что при малой разнице (когда только началось превышение) кулер не будет успевать охлаждать, так, что придется начало делать так, чтобы уже охлаждал (уже крутить надо). И учитывать придется, что дискретный шаг датчика 0,06С. То есть от вашего заданного MAX, 1-я разница может отличаться от 0.01 до 0,05С. След ступень будет +0,06С... При большой разнице с окр средой, по данному алгоритму кулер не будет справляться в начале, соответственно получите превышение. Скорее всего при данном подходе придется анализировать t окр среды , t аквы кулер врубать по разнице при условии превышения MAX. Тогда при переходе через MAX кулер будет гасить правильно и плавно подбирать обороты, исходя из этой разницы. Поделиться сообщением Ссылка на сообщение
VALKNUT 3842 Жалоба Опубликовано 24 июня Гистерезис учитывается. Кроме того я управляю шимом самого куллера, а не напряжением питания. Питание на куллер будет подано, если реальная температура с учетом гистериса, перевалит заданную, а в этот момент разница реальной и установленной будет достаточной, для активного охлаждения и в итоге, немного не доходя до заданной, куллер уже будет шуршать на минималках. Собственно цель достигнута. - не надо вручную выставлять интенсивность.. Сам разберется. Поделиться сообщением Ссылка на сообщение
Lx671 389 Жалоба Опубликовано 28 июля Нашел время схему нарисовать)) https://rvideo-kaluga.ru/sho/ba0525a.jpg Термодатчики, часы и выходные цепи... Поделиться сообщением Ссылка на сообщение
Lx671 389 Жалоба Опубликовано 2 сентября @VALKNUT Привет. Вы случайно не смотрели трафик в интернет при ожидании сообщений из телеги? Там в коде получается, что обращение происходит при каждой прокрутке LOOP. По идее это бесполезно увеличивает трафик, а сервер телеги все равно с такой скоростью не отвечает. У меня до роутера доступа нет. Поделиться сообщением Ссылка на сообщение
VALKNUT 3842 Жалоба Опубликовано 4 сентября В 02.09.2025 - 10:46, Lx671 сказал(а): @VALKNUT Привет. Вы случайно не смотрели трафик в интернет при ожидании сообщений из телеги? Приветствую! Нет, не смотрел.. не вижу смысла, т.к. если и есть трафик то он ничтожен, кроме того, у меня в loop только запускаются таймеры на нужное количество миллисекунд и никогда ничего не висит такого, что "без тормозов" выполняется на постоянной основе. Тот же опрос сервера телеги на новые сообщения в канале, для последующей передачи команд контроллеру не выполняется чаще 1 раза в секунду. 1 Lx671 отреагировали на это Поделиться сообщением Ссылка на сообщение
Lx671 389 Жалоба Опубликовано 4 сентября 1 час назад, VALKNUT сказал(а): у меня в loop только запускаются таймеры А если запрос сервера происходит внутри процедуры таймера, то странно, что не виснит. Обмен с серваком имеет высший приоритет чем таймер и остальные команды в это время стоят. У меня в таймере только счетчики и флаги)) 1 час назад, VALKNUT сказал(а): не выполняется чаще 1 раза в секунду Ну и я с телегой прикидывал на такой промежуток. Со своим сайтом я через 20 сек обмениваюсь. Поделиться сообщением Ссылка на сообщение
VALKNUT 3842 Жалоба Опубликовано 4 сентября 36 минут назад, Lx671 сказал(а): Ну и я с телегой прикидывал на такой промежуток. Со своим сайтом я через 20 сек обмениваюсь. Я еще использую "выключатор"... =) Если кратко: Я планирую посылать команды через телегу на контроллер - включаю "крыжик", который разрешает таймер опроса сервера телеги и только тогда производится опрос 1 раз в секунду. Если "крыжик" снят, нет никаких запросов. Откровенно говоря, отправить команду на контроллер, через телегу не часто требуется, по этому контроллер не подвешивается "чтением крайних сообщений" и работает на "минималках". Этот же метод я использую и для вебинтерфейса обновления "по воздуху". Когда планирую обновить - включаю веб интерфейс, а так он у меня постоянно выключен. Поделиться сообщением Ссылка на сообщение
Lx671 389 Жалоба Опубликовано 4 сентября 1 час назад, VALKNUT сказал(а): Если "крыжик" снят, нет никаких запросов Но тогда вы его включить не сможете)) Или надо хоть редко спрашивать. 1 час назад, VALKNUT сказал(а): Этот же метод я использую и для вебинтерфейса обновления "по воздуху" Это вы имеете ввиду, одновременно с телегой вы включаете web-морду через обращение через ip-адрес с того-же телефона? В зоне вашего роутера... Поделиться сообщением Ссылка на сообщение
VALKNUT 3842 Жалоба Опубликовано 4 сентября 2 часов назад, Lx671 сказал(а): Но тогда вы его включить не сможете)) Или надо хоть редко спрашивать. Могу, в любой момент времени. Я использую Blynk, все остальные варианты взаимодействия (управления) с контроллером - вторичны. 2 часов назад, Lx671 сказал(а): Это вы имеете ввиду, одновременно с телегой вы включаете web-морду через обращение через ip-адрес с того-же телефона? В зоне вашего роутера... Мне не обязательно быть в одной сети с контроллером, у меня запущен сервер Блинк, у которого свой порт и свой IP в моей сети, а на роутере настроен проброс порта. Т.к. IP у меня белый, то подключаюсь через приложение Блинк к своему серверу Блинк. Я вроде это ранее уже оговаривал, нет? Поделиться сообщением Ссылка на сообщение
Lx671 389 Жалоба Опубликовано 4 сентября 3 часов назад, VALKNUT сказал(а): то подключаюсь через приложение Блинк к своему серверу Блинк. Я вроде это ранее уже оговаривал, нет? Конкретно, что сервер "блинк" не писал. А на чем он реализован? В плане железа. Мне чисто интересно)) С аквами у меня возможности те же, но по другому. Телегу можно подключить, но и так "жирно"... Поделиться сообщением Ссылка на сообщение
VALKNUT 3842 Жалоба Опубликовано 5 сентября 14 часов назад, Lx671 сказал(а): А на чем он реализован? В плане железа. Это приложение Java. Работает как под Win, так и под Nix. Сейчас на виртуалке (Oracle VirtualBox), под Debian12. Неприхотлив.. работал какое-то время на "Orange Pi Zero" (512Mb). Сейчас на Xeon E3-1245, но Blynk там просто как доп сервис, у сервера иные функции. 1 Lx671 отреагировали на это Поделиться сообщением Ссылка на сообщение