Все-таки проблемы какие то с уведомлением в телеграмм наблюдается, возможно это на их сторонеlogvinov, 23 Февр. 25, 11:33
Бывает такое. Потом через полчасика - бзынь, поприходило....
Knyazskill
Бакалавр
Emva
65 1
Отв.2921 24 Февр. 25, 14:38
Здравствуйте! Может есть ссылки на правильные esp32 ? Желательно ВБ или озон .
wOOlf
Новичок
Ростов-на-Дону
2
Отв.2922 01 Марта 25, 16:31
Добрый день! Не пойму, что делать вот такая ошибка. Скетч использует 1377340 байт (105%) памяти устройства. Всего доступно 1310720 байт. Глобальные переменные используют 61020 байт (18%) динамической памяти, оставляя 266660 байт для локальных переменных. Максимум: 327680 байт. Скетч слишком большой; прочитайте секция текста превышает доступное пространство на плате
Compilation error: секция текста превышает доступное пространство на плате
Нашел в этой теме такие же проблемы были, но их совет не помогает или я что то не правильно делаю. Мо ж кто сжалится, поможет))
lkosojКуратор
Видное
540 575
Отв.2923 01 Марта 25, 20:07
Добрый день! Вот тут [сообщение #14091094] И где то ещё раньше было на форуме подробнее
wOOlf
Новичок
Ростов-на-Дону
2
Отв.2924 02 Марта 25, 16:29
Добрый день! Вот тут [сообщение #14091094] И где то ещё раньше было на форуме подробнееlkosoj, 01 Марта 25, 20:07
Спасибо!! Снес все и заново поставил по инструкции. Заработало!
dranek
Кандидат наук
Минск
412 365
Отв.2925 04 Марта 25, 15:48
Стабилизатор на ESP12E/F и PZEM-004T. Альфа версия, решил выложить, может у кого интересные идеи будут. Пока успешно управляет SSR-40DA аналогично STAB AVR, но вместо привязки к напряжению используется измерение мощности от PZEM и последовательное приближение к заданию. Я здесь не новатор, просто решил собрать всё в удобное устройство для Самовара. Таким образом без разницы какой мощности ТЭН подключен. В конфиге эта мощность есть, но не обязательна. Нужна для быстрейшего выполнения нового задания, если она будет слишком малой просто в первый раз выполнение задания будет дольше обычного. Стаб сам определяет номинал тэна как максимальное значение. Для этого можно в веб интерфейсе нажать кнопку Прогрузить ТЭН на 5 сек. В процессе будет запомнена мощность тэна. Как бонус есть свой счетчик электроэнергии. Имеет отключаемые: вебинтерфейс, дисплей I2C 128*64 + одна кнопка, uart связь с Самоваром, OTA. Требует ручного изготовления датчика zerocross [сообщение #12242568] . Подключать его по питанию на 3.3В, два резистора 220 кОм из соображений безопасности лучше взять хотя бы по 1/2Вт и положить их, чтоб снизить вероятность пробоя по 220 В, оптопару и транзистор можно взять другие, у меня pc817 и bc547. Код частично позаимствован чтоб не изобретать велосипедов. В планах: Научить фазовому регулированию симистором через оптопару и, возможно, SSR-40LA. MQTT управление. Из проблем: Самовар по uart иногда путается в ответах на свои запросы. Веб интерфейс сыроват, зато асинхронен. Кнопка только одна из-за дефицита ног: длительное нажатие изменяет задатчик мощности с нарастающей скоростью. Двойной клик изменяет направление. Тройной - включить/выключить разгон. На дисплее при этом появляются подсказки:"<",">","B". PZEM-004T подключается через повторитель логических уровней. В принципе можно и через резистивный делитель наверно, но у меня валялся повторитель. Питается pzem от 5В, esp от ams1117 3.3В. Ну и конденсаторы конечно там и там. Номера пинов расписаны в Stab_config.h. Два пина выделены на общее включение ТЭН-ов и разгон через твердотельное двойное реле и контакторы, считаю это необходимым на случай пробития симистора. Разгон ИМХО нужен чтоб делить спирали мощных ТЭНов. Можно использовать 2 набора: SSID и пароль для WI-FI, стабилизатор сначала пытается подключиться к тому, что сохранен в веб интерфейсе, в случае его отсутствия либо неуспеха - к тому, что в конфиге, если нет поднимает свою точку доступа. В первый раз прошить надо через переходник на usb, в последствии - OTA. Удобная плата с переходником и встроенным стабилизатором 3.3В PZEM-004T
IMG_20250228_123637. Автоматика Самовар. Вопросы по электр(он)ике. stab_v18_modules.zip
P.S. Из-за особенности схемы PZEM-004T контакты её измерения напряжения подключать не в цепь симистора, т.е. на неискаженное напряжение. Иначе сгорит.
lkosojКуратор
Видное
540 575
Отв.2926 04 Марта 25, 16:26 (через 39 мин)
Кнопка только одна из-за дефицита ногdranek, 04 Марта 25, 15:48
Можно подключить через аналоговый делитель несколько кнопок или даже энкодер.
Самовар по uart иногда путается в ответах на свои запросыdranek, 04 Марта 25, 15:48
А тут можно подробнее?
dranek
Кандидат наук
Минск
412 365
Отв.2927 04 Марта 25, 16:37 (через 11 мин)
Можно подключить через аналоговый делитель несколько кнопок или даже энкодер. Самовар по uart иногда путается в ответах на свои запросы dranek, Сегодня, 15:48lkosoj, 04 Марта 25, 16:26
в esp8266 такой А0, что лучше не надо.
А тут можно подробнее?lkosoj, 04 Марта 25, 16:26
С этим пытаюсь разобраться, ввел даже спец задержку перед отправкой ответа. Контролирую порт через третий hc-12 на PC. Если ставлю задержку то на запросы AT+.. от меня бывает мусор летит, причину не могу определить. Если задержка 0 мусора нет, но Самовар его где то находит, особенно 3 параметр (режим). Мусор состоит из отладочных кусков текста ранее бывших выдаче.
lkosojКуратор
Видное
540 575
Отв.2928 04 Марта 25, 17:41
в esp8266 такой А0, что лучше не надо.dranek, 04 Марта 25, 16:37
Тогда расширитель портов по I2C, займёт один дополнительный порт на прерывание (можно вообще без него) даст 8 или 16
Если переделать управление не по мощности, а по напряжению, можно использовать протокол kvic, мусор будет откидываться
dranek
Кандидат наук
Минск
412 365
Отв.2929 04 Марта 25, 18:37 (через 56 мин)
Тогда расширитель портов по I2C, займёт один дополнительный порт на прерывание (можно вообще без него) даст 8 или 16lkosoj, 04 Марта 25, 17:41
Красота в простоте. Управляется всё и 1 кнопкой, вполне сносно. И это скорей доп. возможность. Если уж очень надо можно перейти на ESP32-C6, там пинов хватит на энкодер, или даже для универсальности на devkit v1.
Если переделать управление не по мощности, а по напряжению, можно использовать протокол kvic, мусор будет откидыватьсяlkosoj, 04 Марта 25, 17:41
Замысел именно в регулировке конкретно по мощности, мы ведь её стабилизируем. Эмулируем человека, видим мощность - крутим ручку. Насчет протоколов у kvic, я хоть в отрочестве на МАСМ и пописывал уже блаженно это всё забыл. То что Самовар периодически получает некорректные ответы особой погоды не делает, снимаем галку в его настройках и всё. И потом это пока только альфа, может и решу как то.
Kuban
Доктор наук
Краснодар
540 399
Отв.2930 04 Марта 25, 19:36 (через 60 мин)
То что Самовар периодически получает некорректные ответы особой погоды не делает, снимаем галку в его настройках и всё.dranek, 04 Марта 25, 18:37
Имеется ввиду , в настройках Самовара, чекбокс "Проверять подключение регулятора"?
dranek
Кандидат наук
Минск
412 365
Отв.2931 04 Марта 25, 19:43 (через 7 мин)
Kuban, Да, он.
Kuban
Доктор наук
Краснодар
540 399
Отв.2932 04 Марта 25, 19:50 (через 7 мин)
Не есть хорошо. Даже более чем. На режиме "Предзахлеб" и "Брожение" Самовар, все равно, будет использовать некорректные ответы если они будут относиться к значению мощности. А на броженнии вообще может закипятить бродильник. Это не предположение. Это факт.
dranek
Кандидат наук
Минск
412 365
Отв.2933 04 Марта 25, 20:50
Насколько помню у меня на Stab AVR всегда эта галка была снята, потому что час работает, а потом аварийное отключение по потере подключения, без видимых причин. Возможно оно всегда не шибко правильно работало. Сейчас попробовал с любимой грелкой вместо ТЭНа, мусор появляется редко видел всего раз (может была и ликвидировалась утечка или неверная адресация памяти, навожу сейчас порядок в переменных), но Самовар путает ответы в режиме Работа. Вот разгон с отправкой без задержки 01. Автоматика Самовар. Вопросы по электр(он)ике. не путает, в логе всё правильно. Вот работа с отправкой без задержки 02. Автоматика Самовар. Вопросы по электр(он)ике. путает, а в логе всё правильно. Вот разгон с задержкой отправки 55 миллисекунд. 2boost. Автоматика Самовар. Вопросы по электр(он)ике. не путает, в логе всё правильно, иногда не дожидается. Вот работа сразу после этого. Видно, что ответы идут правильные, но Самовар путает. 2norm. Автоматика Самовар. Вопросы по электр(он)ике. Ранее подбирал задержку такую, что более менее работало, это как раз 55, теперь вот не особо. Правда тогда мусор в ответ на AT+SS? периодически отправлял. Надо разбираться.
extern uint16_t power; extern int16_t powerSetpoint; extern volatile bool boostMode; extern bool heatEnabled; // Глобальные переменные для управления задержкой ответа unsigned long responseDelay = 0; // Задержка ответа Самовару в миллисекундах unsigned long lastRequestTime = 0; // Время получения последнего запроса String pendingResponse = ""; // Ответ, который нужно отправить с задержкой extern int16_t PowerLevelT; // Шлем с задержкой отчеты Самовару void USART_SendReport(){ if (pendingResponse != "" && millis() - lastRequestTime >= responseDelay) { Serial.print(pendingResponse+" "); // Отправляем ответ //Serial.flush(); LD.printString_6x8(pendingResponse.c_str(), 0, 7); pendingResponse = ""; // Сбрасываем ожидающий ответ } } //Принимаем по UART запросы от Самовара void USART_GetRequests() { static String inoutString; static byte index = 0;
while (Serial.available() > 0) { // Используем аппаратный Serial char inChar = (char)Serial.read(); // Чтение очередного байта
if (!index) { if ((inChar == 'A') || (byte(inChar) == 0xD0)) { // Ждём первый символ посылки "A" или первый байт UTF-кириллицы inoutString = inChar; index = 1; } } else if (index++ < 13) { // Пока посылка не длиннее 13 символов, считаем её корректной if (inChar == 0x0D) { // Ждем последнего символа посылки <CR> index = 0;
// Разбираем строку if (inoutString == "АТ+VO?") { // Запрос текущей мощности pendingResponse = String((uint16_t)power);// + char(0x0D); // Формируем ответ lastRequestTime = millis(); // Запоминаем время получения запроса } else if (inoutString == "АТ+VS?") { // Запрос уставки текущей мощности pendingResponse = String((uint16_t)powerSetpoint);// + char(0x0D); // Формируем ответ lastRequestTime = millis(); // Запоминаем время получения запроса } else if (inoutString == "AT+SS?" || inoutString == "АТ+SS?") { // Запрос режима
if (boostMode) { pendingResponse = "1";// + char(0x0D); // Режим разгона } else if (!heatEnabled) { pendingResponse = "2";// + char(0x0D); // Режим стоп } else { pendingResponse = "0";// + char(0x0D); // Рабочий режим } lastRequestTime = millis(); // Запоминаем время получения запроса } else if (inoutString == "AT+ON=0" || inoutString == "АТ+ON=0") { // Запрос на выключение нагрева heatEnabled = false; digitalWrite(heatPin, LOW); boostMode = false; digitalWrite(boostPin, LOW); inoutString = ""; PowerLevel = 0; powerSetpoint =0; } else if (inoutString == "AT+ON=1" || inoutString == "АТ+ON=1") { // Запрос на включение режима "Разгон" if (!boostMode) { boostMode = true; digitalWrite(boostPin, HIGH); digitalWrite(heatPin, HIGH); heatEnabled = true; PowerLevelT = PowerLevel; PowerLevel = MaxPowerLevel; } inoutString = ""; } else if (inoutString.substring(0, == "АТ+VS=") { // Запрос на изменение уставки мощности uint16_t newPower = inoutString.substring(8).toInt(); if (newPower > 0) { digitalWrite(heatPin, HIGH); heatEnabled = true; digitalWrite(boostPin, LOW); boostMode = false; powerSetpoint =(uint16_t)newPower; } if (newPower == 0) { digitalWrite(heatPin, LOW); heatEnabled = false; powerSetpoint = 0; } inoutString = ""; } } else { // Еще не конец inoutString += inChar; // Добавляем символ в строку } } else { // Посылка слишком длинная, начинаем сначала index = 0; } } } #endif //ENABLE_USART_SAMOVARLOOP//Основной цикл void loop() { #ifdef ENABLE_OTA // Обработка ОТА MDNS.update(); ArduinoOTA.handle(); #endif #ifdef ENABLE_USART_SAMOVAR USART_GetRequests(); //Принимаем по UART запросы от Самовара USART_SendReport(); // Отправляем ответ Самовару по UART с необходимой задержкой #endif //ENABLE_USART_SAMOVAR #ifdef ENABLE_MQTT loopMQTT(); // Обработка MQTT #endif //ENABLE_MQTT ButtonsLoop(); // Обработка кнопок
static unsigned long timeout = millis(); //остальное раз в секунду if (millis() - timeout >= 1000) { #ifdef ENABLE_WEB_SERVER if (boostLoadActive) TEN_Boost(); // если надо прогружаем ТЭН //установка флага невозможности выполнить задачу по мощности insufficientVoltage = (powerSetpoint > maxPower && PowerLevel == MaxPowerLevel); #endif // ENABLE_WEB_SERVER PZEMLoop(); //Читаем параметры электросети triakLoop(); // Обработка симистора #ifdef ENABLE_OLED_DISPLAY updateOLEDDisplay(); //Выводим инфу на дисплей #endif timeout = millis(); //перезапуск секундного таймера } }Автоматика Самовар. Вопросы по электр(он)ике. З.Ы. Вспомнил, вот эти + char(0x0D); и были причиной мусора при отправке, заменил перед отправкой на + " / r" , мусор пропал.(пробелы чтоб форум отображал)
lkosojКуратор
Видное
540 575
Отв.2934 04 Марта 25, 22:09
Проблема та же, что и у Stab AVR. Он периодически не успевает ответить за заданное время Самовару, и Самовар начинает не верно отображать информацию. Со StabAvr разобраться практически не реально, всё в кучу свалено, проще переписать с нуля (что, похоже в этом регуляторе и сделано ) Можно поднять отдельный таск, который будет мониторить com порт и отвечать на запрос. Тогда проблем не должно быть.
dranek
Кандидат наук
Минск
412 365
Отв.2935 04 Марта 25, 22:10 (через 1 мин)
Вообще странный протокол. У команд префикс есть. У ответов нету. Зачем эта синхронность? Был бы префикс у ответа, не было б таких проблем, допустим AT-P1200/ r значит текщая мощность 1200Вт. И т.д. Ну и раз такая частота опроса, тоже неясно зачем кстати ?, можно фильтровать ответы от явно неправильных.
lkosojКуратор
Видное
540 575
Отв.2936 04 Марта 25, 22:31 (через 22 мин)
Протокол взят от Рмвк, там он работает нормально. Тут я пытался за счёт задержек на стороне Самовара решить проблему, но с переменным успехом. Можно пересмотреть протокол, добавив признак к ответу. Это должно повысить стабильность.
dranek
Кандидат наук
Минск
412 365
Отв.2937 04 Марта 25, 23:25 (через 54 мин)
Можно поднять отдельный таск, который будет мониторить com порт и отвечать наило запрос.lkosoj, 04 Марта 25, 22:09
здесь не как в esp32. Есть только прерывания и они нужны для обработки полуволн. И только одно ядро. Если я повешу обработку Serial на прерывание это потенциально будет мешать регулированию. Если буду только флаги в прерывании ставить - ничего не изменит. Может чего и не знаю, пока вижу так.
Можно пересмотреть протокол, добавив признак к ответу. Это должно повысить стабильность.lkosoj, 04 Марта 25, 22:31
Вот это имхо правильно, но не изменить, а дополнить, плюс еще и уйти в таких ответах от синхронности. Чтоб Самовар обрабатывал запросы с префиксом по мере получения, а без префикса по прежнему считал это ответом на последний запрос. Тогда можно будет и в прошивку Stab AVR изменения внести (моя функция это упрощенная от Stab AVR) и она наконец у всех правильно заработает. Но и старая прошивка работать тоже будет должна как прежде.
Добавлено через 13мин.:
В принципе можете эту же функцию парсинга чуть в ожидаемых посылках подправить и себе в Самовар встроить для приема асинхронных ответов.