𝙰𝚗𝚊𝚜𝚝𝚊𝚜𝚒𝚊
Mike
Ну как и чем ты шьешь я не очень понимаю
из "среды" esphome, она по сути в yaml все настройи содержит и компилит на движке platformIO и заливает питоном: esphome bathroom-screen.yaml compile esphome bathroom-screen.yaml upload
Vladimir
А питаешь каким напряжением?
От USB портов ПК. На входе 4.92В.
Tonchik
В качестве регулятора напряжения на бордах стоит AMS1117-3.3.
в принципе самые популярные чипы и живущие от 5в всегда... но, судя по спецэффектам, либо обвес бракованный, либо они сами приказывают долго жить (один раз коротнул ты, подключив что-то к 3в3 или не повезло с партией/слишком поддельная)... у меня умирали только от 12v -> 3.3v
Tonchik
Вроде КЗ не было. К одной вообще ничего не подключал. Т.е. можно попробовать чипы перепаять?
теоретически - да... и посмотри спеки на обвес его. там два конденсатора нужны, мало ли они отвалились, практически - тут предпочитают новый модуль покупать
Воу
https://community.platformio.org/t/setup-esp32-wroom-32d-with-st7789v-and-tft-espi-library/31155/5
Артем
Привет, кто может подсказать, есть проект на есп, компилируется в ардуино иде, задача получать пакеты из кан шины с помощью либы twai и отправлять пакеты обратно. если идет поиск одного пакеты среди всего летящего, проблем нет, но если есть 2 условия if id==0x215 else if id==0x140 программа зависает и есп больше не реагирует на входящие пакеты...
Эдуард
ну за что же вы так все любите прерывания на уарте (( все уже сделано для вас, это idf, но насколько я понимаю это легко цепляется на ардуину https://github.com/espressif/esp-idf/blob/master/examples/peripherals/uart/uart_events/main/uart_events_example_main.c
Спасибо за инфу. Погляжу конечно. Сейчас просто не до этого. А вообще прерывание любим потому что это то что первое срабатывает во время приёма байта. И если мне нужна производительность, то я сам знаю что как применить. Главное нужные флаги сбросить перед выходом из функции прерывания.
Эдуард
а так получается мы из одного буфера очереди перекладываем в другой кольцевой буфер, а парсим в третьем. В общем превратив esp32 в калькулятор )))
Вадим
и этот кусок в цикле..
Артем
не понял
Vladimir
недопаяли, починил. получается
Визуально вроде пропаяно. Попробовать погреть ногу паяльником?
Tonchik
Визуально вроде пропаяно. Попробовать погреть ногу паяльником?
ну дык, терять нечего, и так чуть не сжег ESP ))
Vladimir
ну дык, терять нечего, и так чуть не сжег ESP ))
Ну так то они еще работают, даже на таком питании)
Вадим
вы к тому что либа говно? есть другие варианты?
причем тут либа? у вас я так понял проблема с двумя PIDами. вот обработка какого угодно количества PID'ов. гоняйте в цикле и все. что там может зависать я честно говоря навскидку и не придумаю.
ㅤ
вы к тому что либа говно? есть другие варианты?
Не стоит в своих косяках обвинять кого-то другого. Код покажи
Артем
да я просто не понял что прислали, кусок либы или что
Артем
сейчас пришлю что я делаю
Vladimir
Ну еще чуть чуть и оно сгорит
Капец мне хлам попался, припаял перемычку к ближайшему выводу GND. А на нем земли то и нет о_О. Пришлось еще одну паять. Теперь с питанием все Ок. Спасибо за подсказки!
Артем
if (ESP32Can.readFrame(readM)) { if (car_type == 1) { handle_PamXC70(); handle_SPEEDIHUXC70(); } } Вот инициализация методов
Артем
дальше идет обработка void handle_PamXC70() { if ((readM.identifier == 0x215) and (readM.data[4] == 0x39) or ((readM.data[4] == 0xB9) and (readM.identifier == 0x215))) { FrontPam.data[4] = readM.data[0]; FrontPam.data[5] = readM.data[5]; FrontPam.data[6] = readM.data[6]; FrontPam.data[7] = readM.data[7]; sendCan(FrontPam); SEC = 0; MIN = 0; delay(1); } }
Артем
void handle_SPEEDIHUXC70() { if ((readM.identifier == 0x145) and (readM.data[0] == 0xCC) and ((readM.data[5] != 0x00) or (readM.data[4] != 0x00))) { spdim = bytes_to_u16(readM.data[4], readM.data[5]); spdim = spdim / 96; IHUSpeed.data[2] = (spdim >> 8) & 0xFF; IHUSpeed.data[3] = spdim & 0xFF; sendCan(IHUSpeed); SEC = 0; MIN = 0; delay(1); } else if ((readM.identifier == 0x145) and (readM.data[0] == 0xCC) and (readM.data[5] == 0x00) and (readM.data[4] == 0x00) and (stop != true)) { IHUSpeed.data[2] = 0x00; IHUSpeed.data[3] = 0x00; sendCan(IHUSpeed); stop = true; SEC = 0; MIN = 0; delay(1); } }
Артем
Допом прикладываю конвертацию битов в u16 #define bytes_to_u16(MSB,LSB) (((unsigned int) ((unsigned char) MSB)) & 255)<<8 | (((unsigned char) LSB)&255)
Артем
ну и соответственно #include <ESP32-TWAI-CAN.hpp>
ㅤ
Когда добавляешь это, всё ломается
Ломается как? Оно падает на этой функции?
Артем
просто зависает и все, в консоль ничего не выводит, логику не исполняет, потом уходит в сон через заданный промежуток
Артем
цикл перестает идти
Артем
как будто
Артем
или как будто пропускает эти ифы
Артем
ошибок в verbose дебаг режиме нету
ㅤ
просто зависает и все, в консоль ничего не выводит, логику не исполняет, потом уходит в сон через заданный промежуток
Ну добавь промежуточные выводы в сериал чтоб понять где оно виснет. И вот IHUSpeed.data и readM.data имеют корректные размеры?
Артем
не знаю, но поидее да
ㅤ
На самом деле дело может быть вообще не в этой функции. Может ты черт знает где за буфер убежал и стек повредил. А аукнулось вот только при добавлении казалось бы функции в которой может и не быть ошибок
Артем
вывод зависает в конце хендлера
Артем
теоретически возможно... но понять бы где... дебаг то нормально не пашеь
ㅤ
теоретически возможно... но понять бы где... дебаг то нормально не пашеь
Ну для начала размеры буферов всех проверь. FrontPam.data[7] вот что этот не менее 8 байт например и так далее
Артем
Почему дебаг нормально не пашет?
ну из ардуино иде не запустить дебаг режим, не работает, проц wroom32
Артем
сам фрейм задается в twai либе
Артем
esp32can.write
Артем
просто обёртка для функции короче
Вадим
ну из ардуино иде не запустить дебаг режим, не работает, проц wroom32
именно в этих кусках кода навскидку все норм.. да, я бы убрал else и canSend вызывал бы не из функции чтения, но не это ломает.. у меня подозрение, что то, что вы принимаете за зависание кода на самом деле является зависание CAN-штины изза того, что вы отправляете неверные фреймы
Вадим
и да, я юзаю родную либу TWAI.. отказался от всех библиотек.. они кстати все являются обертками twai
Артем
и да, я юзаю родную либу TWAI.. отказался от всех библиотек.. они кстати все являются обертками twai
ну она мне не попалась в свое время, можно конечно переделать, но поможет ли
Артем
шина не зависает, машина упала бы в ошибку
Артем
да кстати, по уму не delay а vTaskDelay
я же в однгм ядре все делаю.. надо ли таск
ㅤ
да кстати, по уму не delay а vTaskDelay
А delay в ардуине и есть обертка над vtaskdelay
Вадим
ну она мне не попалась в свое время, можно конечно переделать, но поможет ли
я думаю, что не сам код у вас проблема, а логика кода.. может я и ошибаюсь, но чуйка..
ㅤ
ну она мне не попалась в свое время, можно конечно переделать, но поможет ли
так твоя "либа" и есть обертка над twai. Там ничего хитрого нет, это просто обертка над си на плюсах
Артем
Да там таймаут 1 мс по умолчанию стоит. Оно бы всё равно вывалилось наружу
вот как раз оно перестает слать дебажный пакет в консоль, что вышло из цикла, последний пакет остаётся в конце цикла speed
Вадим
А delay в ардуине и есть обертка над vtaskdelay
да, но у вас же ESP32 .. ))) зачем вам обертки?
ㅤ
Это сделано для унификации кода. Для этого фреймворки и придумали. Чтоб этот код одинаково работал хоть на есп32 хоть на рп2040
Вадим
все это лирика.. код на само мделе еще очень сырой для реальной работы с CAN. чисто для тестирования работы.. но я по-прежнему думаю, что проблема не в нем.
ㅤ
Да, ему бы в идеале дебагер подключить и смотреть что там происходит. Но в ардуине это недоступно, да
Alexey
Alexey
Подскажите а ESP-WROOM-32 и ESP32-WROOM-32 это одно и то же?
Alexey
Спасибо.
Вадим
а в платформио я не умею и как проект перенести не оч ясно
на самом деле несложно.. но я с 3-го раза осилил. потом удивлялся почему сразу не мог ))) но чтобы разобраться дебагер и не нужен... просто почаще в код навтыкай пронумерованные Serial.print и так ты доберешься до того места которое будет печатать последнее.. колхоз - но работает..
Alexey
А чего она прошивается только если кнопку boot удерживать? Можно без этого колхоза заливать?