1 2 3 4 5 6 7 8 9 10 10/10 10,00оценок: 9

Arduino Mega. Контроллер теплицы. Хроники - 3.0

Тема в разделе "Умный дом", создана пользователем Анкор Плюс, 27.04.17.

Статус темы:
Закрыта.
  1. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Да дело не в проце, там написано много интересного в цитате, вы с неё выловили только указание про 328-й камень. Вот ещё нашёл: https://bbs.espressif.com/viewtopic.php?t=5318 Железо, как и софт - тоже бывает глючным, кстати, и дело не в рабочей частоте. Вы из секты защитников безгрешной ESP? :)]:aga:

    По поводу снижения скорости - не готов ответить на этот вопрос, т. к. и 115200 - черепашья скорость, да и не в скорости здесь дело, скорее всего. Надо рыть, тестировать на больших временных промежутках - как минимум.

    Имхо - сырая ещё ESP, просто сырая (ну и AT-прошивка тоже не без грехов). Про отсутствие кристалла и как следствие, возможные ошибки фреймов - уже вычитал, прочитал про то, что данные по +IPD не только у меня одного не все приходят. Лично столкнулся с тем, что можно не дождаться никакого ответа на AT+CIPSEND - да, виновата Atmega328 :)]:aga:

    Я просто пытаюсь обозреть проблему со всех сторон, так сказать. Очевидно, что в любом софте есть ошибки, но мне надо, чтобы эти ошибки были предсказуемы, а не вылетали через полтора часа работы. Не вопрос - я могу обложиться таймаутами по самое не балуйся, код и так уже раздут, чего уж там. Вопрос в другом - стоит ли штатная AT-прошивка таких мучений? Или так поставим вопрос - спасёт ли уход от штатной прошивки к своей, которую можно написать в стиле мастер-слейв, чтобы ESP вообще ничего не пихала в порт без спросу?

    Вот по этим вопросам сейчас и пытаюсь поиметь ясность, так сказать ;)
     
  2. andy117
    Регистрация:
    18.01.18
    Сообщения:
    34
    Благодарности:
    14

    andy117

    Участник

    andy117

    Участник

    Регистрация:
    18.01.18
    Сообщения:
    34
    Благодарности:
    14
    Вот небольшое обсуждение, хоть и старенькое
    http://www.esp8266.com/viewtopic.php?f=6&t=4171
    там чувак менял скорость обмена в разные стороны - все равно символы терялись даже в простом скетче.
    Ему переход на Arduino IDE для ESP помог.
    Правда код там простенький, тестовый, может и не показатель. Хотя раз уж в таком простом случае AT-прошивка глючит (ла?).

    P. S. Да и там не понятно глюк в обмене по уарту или в tcp-стеке
     
    Последнее редактирование: 05.03.18
  3. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Вот чёрт его знает. Не думаю, что в самом стеке, хотя... Я скорее склоняюсь к тому, что в AT-прошивке довольно много неоднозначностей.

    Вот сейчас - добавил в тот код, который по таймауту отваливался - обработку таймаута, чтобы вычитывать хотя бы то, что пришло: так мало того, что оно в том месте прочитало вместо 325 байт 284, так потом - после AT+CIPSENDBUF уже бесполезно ждать приглашения > - тупо не приходит.

    Вот такие пироги. Как на такой муке испечь нормальный конечный автомат - хз. Щас буду свой самопал заливать, пробовать на нём - а что делать, если уже идеи кончились?
     
  4. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Работает уже час, скоро должно заглючить :)]:aga: Решил - подожду, пока опять не заглючит, и тогда перейду на тестирование самописной прошивки для ESP.

    З. Ы. Как часы - стоило только написать на форум, и всё - реально опять ESP впало в какое-то неистовство :)
     
  5. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Вот и пруф, что что-то происходит именно с ESP, а не на моей стороне:

    Интересное выделил жирным. Видите, да? В первом случае всё отправилось, во втором - мне никто не сообщил даже промежуточную инфу "Received ... bytes" (хотя я её никак и не анализирую), не говоря уже о SEND OK или SEND FAIL. При этом - в предпоследней строчке вместо X, CLOSED, где X - должно быть ОБЯЗАТЕЛЬНО числом 0-3 - что мы видим? Правильно - кукиш мы там видим. Выдержка из официальной документации по AT-командам:

    Так что сомневаться не приходится - я жду от ESP данные согласно документации, а она - чудит, как хочет. Всё, отдохну маленько, и буду пробовать свою костыльную прошивку для ESP - хуже особо всё равно не будет, кмк.

    З. Ы. Кому интересны детали - в куске лога клиент №0 - это MQTT, клиент №1 - это отсыл на ThingSpeak, клиент №2 - это с вебморды запрос.
     
  6. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Запустил ESP на самопальной прошивке - буду смотреть, как оно. Пока 4 минуты, полёт нормальный, но это ещё ни о чём не говорит, конечно ;)
     
  7. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Прошивка работает стабильней, чем штатная, за полтора часа поймал только одну коллизию пересечения внешних и внутренних клиентов, буду разруливать. Ну и всяких мелочей до кучи ещё надо пофиксить - при рестарте ESP чтобы все клиенты освобождались и т. п. Надо ещё чуть повозиться, но уже, ттт, какой-то просвет виднеется ;)
     
  8. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Кстати, стало понятно, откуда коллизии в штатной AT-прошивке: полный дуплекс, мать его, и UART как средство общения с ESP - не самое лучшее архитектурное решение, пмсм. Лучше бы на SPI сделали - вот что им мешало?

    Понял, когда начал анализировать, почему на моей прошивке после отсыла AT+CIPSTART пришёл внешний коннект на тот же слот, который я запросил на соединение с ThingSpeak. Почесал репу, и понял - покааааа часть байтиков ползла - целой команды на приёмной стороне (ESP) ещё не было, поэтому она спокойно так себе принимала соединения извне. Со всеми вытекающими.

    Сделал просто: пока есть хоть один байт в приёмном буфере на команды от МК - не обновляем запросы на внешние соединения. Сейчас тестирую как раз этот вариант, т. к. коллизия очень редкая и так была - за полтора часа только один раз и попалась.

    Ещё появилось понимание, что с текущим фаршем ещё попляшем, т. к. настройки всякие через конфигуратор и т. п. - всё занимает время на обработку, и как всё это будет интенсивно вертеться - пока хз. Думается, лучшим вариантом будет тот, когда есть понятие, что настройки - это настройки, а рабочий режим - это рабочий режим ;)

    Верю, что уже близки к финишу с крайней версией прошивки для ESP ;) Очень верю, других вариантов нет :)]:aga:

    З. Ы. И да - иногда таки при приёме данных с ESP выпадает в таймаут (поставил 10 секунд), хотя я ТОЧНО знаю, что отправляю столько данных, сколько пришло с внешней стороны. Вот думайте что хотите, а это, имхо, ошибки фреймов из-за плавающей частоты - кварца там нет вроде внешнего, в ESP-то? Поэтому, опять же пмсм, всё, для чего можно применять ESP - это только короткие пакеты данных, т. е. даже входящие данные от ThingSpeak в несколько сотен байт могут стать иногда проблемой.

    З. З. Ы. Надо пробовать версии ESP посвежее, ту же 12E - возможно, там постабильней в таких тонкостях. Ещё раз повторюсь - ошибки фреймов возникают только на больших кусках данных, и то - ооочень редко. Но именно это и сносит крышу, т. к. полагаться на +IPD,0,ТУТ_ДЛИНА_ДАННЫХ - на эту самую ТУТ_ДЛИНА_ДАННЫХ полагаться низзя вообще, т. к. это - не 100% инфа. Буду посмотреть, возможно, придётся пробовать на скорости меньшей, чем 115200, хотя и не хотелось бы ;) Настройка скорости работы порта в ESP - предусмотрена в прошивке для ESP, а в прошивке контроллера теплицы - с рождения практически ;)

    Однако, раз мы пишем свою прошивку - всегда можно ввести доп. сущности, да даже свой протокол, не вопрос - но с этим - пока погодим малясь ;)
     
    Последнее редактирование: 06.03.18
  9. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Первый рубеж уже пройден: два часа безостановочной работы. Коллизии, конечно, есть, но теперь они особо не мешают работе - всё отсылается во все щели (ттт сто раз).

    До вечера ещё потестирую, и, если всё будет ок - на днях будет большая обнова: там по мелочам и в вебморде кой-чего поправил, и ещё в куче мест ;)
     
    Последнее редактирование: 06.03.18
  10. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    По времени работы пока, ттт, нет проблем - работает. Сейчас моделирую всякие нештатные ситуации - отключение роутера, отключение MQTT-брокера и т. п. - надо всё прогонять, чтобы понять, как будет себя вести контроллер в той или иной ситуации ;) Состояний всяких кучу, вся работа - асинхронная, и не дай бог где-то событие не придёт нужное - подписчик будет висеть до ишачьёй пасхи, ожидая, когда ему сообщат по результатам его запроса в транспорт.

    Уже поймал несколько таких неурядиц, надеюсь, в дальнейшем с вашей помощью выловим вообще все ;) Пока что сделал: сделал отключение роутера, сдела отключение MQTT-брокера, поймал невозможность коннекта к ThingSpeak (интернет лагал, видимо), проверил перезапись настроек Wi-Fi с вебморды (это тоже ключевое, т. к. при переконнекте ESP все клиенты должны правильно освобождаться).

    Но это ещё не финиш, конечно ;) Вот были бы у нас только исходящие соединения - я бы первый начал прыгать и хлопать в ладошки от счастья :)]:aga: А пока - тестирую ;)

    З. Ы. Будете смеяться, но обнаружил, что клиент MQTT. fx при выключении mosquitto тоже глючит - во-первых, не обнаруживает дисконнект. Во-вторых - при ручном дисконнекте и переконнекте - ловит первых два топика, а потом - всё, ничего не показывает. По ходу пьесы ищем ещё баги в чужом софте :)]:aga:
     
    Последнее редактирование: 07.03.18
  11. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Итак: рискнул я выложить обновление таки. Проверил работу с памятью - вроде нигде ничего не течёт, да и как мы меряем память: просто свободное пространство от стека до кучи, как там на самом деле - хз.

    Сразу вводные:

    1. Прошивка контроллера теперь работает в связке с ESP, на которую (ESP) закачана своя прошивка (лежит в папке ESP_AT на гитхабе);

    2. С любой другой прошивкой ESP контроллер работать не будет, от слова "совсем";

    3. Введение своей прошивки для ESP позволит нам исключить зоопарк с версиями AT-прошивок от китайцев;

    4. С нашей ESP-прошивкой к роутеру стало коннектиться чуть медленнее - терпение, оно обязательно законнектится.

    Теперь, что сделано:

    1. Полностью переписана работа с ESP и MQTT - всё вынесено в отдельные классы;

    2. Модуль работы с SIM800 затронут только в части оптимизации кода - не хочу я пока там ничего переписывать, ибо если переписывать - это чёртова кучу работы, поэтому пока - MQTT только через ESP, до лучших времён;

    3. В конфигураторе реализована возможность добавлять топики по расходу воды - у нас два датчика, соответственно, можно добавить пару топиков, для одного - датчик №0, для второго - датчик №1. Публикуется накопительный расход воды, т. к. публиковать мгновенный - пустая работа, никак не отражающая текущей ситуации, словом, мгновенный расход воды - это так, полюбоваться в конфигураторе и в вебморде, и чисто как справочка, что что-то там льётся (хотя и тут - лучше ориентироваться на накопительный ;));

    4. В вебморде поправлены мелкие недочёты;

    5. Редизайн работы с MQTT - теперь к каждому топику спереди автоматом добавляется ID клиента MQTT, т. е. если у вас указан клиент "TEPLICA" и вы добавили топик "temperature", то в брокер придёт топик "TEPLICA/temperature". Это позволяет без геморроя иметь на нескольких контроллерах топики с одинаковым именем - достаточно только назначить разные ID клиентов MQTT ;)

    Проведено большое тестирование на предмет работы всего колхоза одновременно - ттт, работает всё вместе.

    Из не очень приятного: оперативки у Mega2560 мало, катастрофически. Работа через ESP идёт асинхронная, соответственно, существует ситуация, когда несколько клиентов запросили записать данные в сеть, плюс - несколько входящих клиентов попросили отдать им данные. Поскольку работа с клиентами идёт поочерёдно - каждый такой клиент со своими данными (они в оперативке) будет помещён в очередь. Т. е. единомоментно в очереди может быть несколько клиентов, каждый из которых откусил байт по 200, а то и больше, от оперативы. Сами понимаете, что такие нюансы надо тестировать, ибо проблемы выявляются только на больших нагрузках, ессно.

    Необходимым свободным минимумом памяти считаю полтора килобайта, которых, по факту - уже не хватает, т. к. у меня правил всего 4, а если их будет 30? Т. е. приближаемся к ситуации, когда полный фарш - уже не лезет, что, конечно, печалит. Проводить оптимизацию, конечно, можно, но до определённого предела - всё требует места, и не всегда получается выкроить существенное кол-во байт, оптимизировав тот или иной функционал.

    Про ESP ещё: Инструкции по перепрошивке ESP лежат в папке ESP_AT, если что.

    Друзья! Огромная к вам просьба - перекачать, перенастроиться, и - тестировать, гоняя в хвост и гриву, кому что интересно: кому MQTT - гоняйте MQTT. Кому вебморда - запустите вебморду и смотрите. Кому SIM800 - обязательно надо попробовать, не сломал ли я чего в этом обновлении, и работает ли SIM800 так, как раньше.

    В общем, мне очень, нет, ОЧЕНЬ требуется помощь в тестировании новой версии - код всё равно не стал проще, хотя и переписан; с конечными автоматами я всю голову уже сломал, ибо граф состояний очень сложный - короче, что-то может пойти не так, и я буду признателен любому отчёту.

    Ещё раз обращаю внимание: для ESP - своя прошивка, надо её закачать, иначе - работать не будет.

    З. Ы. Кто желает поддержать мои старания (не навязываюсь, но считаю, что упомянуть не будет лишним) - в конфигураторе в окошке "О программе" есть реквизиты, буду рад любой поддержке ;)

    З. З. Ы. Пишите, очень жду отзывов по новой версии.
     
    Последнее редактирование: 09.03.18
  12. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Взялся за глобальную оптимизацию - слишком много хранится в оперативке того, что может там не храниться - надо маленько перетряхнуть это болото :)
     
  13. Tehnik53
    Регистрация:
    22.08.15
    Сообщения:
    142
    Благодарности:
    23

    Tehnik53

    Живу здесь

    Tehnik53

    Живу здесь

    Регистрация:
    22.08.15
    Сообщения:
    142
    Благодарности:
    23
    @DIYMan, То ли у меня руки кривые (хотя это факт), то ли небольшой баг.
    При закомментированной строке
    #define MQTT_REPORT_AS_JSON / раскомментировать, если надо публиковать топик-ответ на выполнение команды в объекте JSON
    не компилируется.
    Ошибка:
    exit status 1
    'dataOut' was not declared in this scope
    Снимок.JPG
     
  14. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Спс за багрепорт, поправлю и отпишусь.
     
  15. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    @Tehnik53, поправил, выкачивайте.
     
Статус темы:
Закрыта.