Сергей
Подскажите, по esp32-mqtt. Я уже не знаю че и думать.... Пишу в топик true. В esp получаю: true0H`l= Пишу int 20 - получаю: 200H`l= Что вносит такие искажения? iobroker использую. Какие то в конце символы прилетают, которые искажают данные. Как это победить?
Dan
Я бы попробовал что-то типа string.replace("0H'I="," ");
Сергей
А покажите как пишете
да абсолютно стандартный код взял. void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) { if (strcmp(topic, MOVE_SECS) == 0) { moveSecs = 0; Serial.print("New RAW Position received MOVE_SECS: "); // " сообщение: " Serial.println(payload); Serial.println(payload[0]); moveSecs = atoi(payload); Serial.print("NewPosition received MOVE_SECS: "); // " сообщение: " Serial.println(moveSecs); } if (strcmp(topic, DIRECTION) == 0) { Serial.print("New RAW direction received: "); // " сообщение: " int directionInt = atoi(payload); Serial.println(direction); if(directionInt == 1) direction = true; else direction = false; servoStartMove(moveSecs, direction); } }
Сергей
выглядит в консоли так. Там значение должно быть 11. Оно парсит как 110. Это руинит логику программы :(
Max
Да не, читает нормально. Нуль-терминатора в конце пейлоада просто не хватает.
Max
Поэтому печать и фейлится
Сергей
как это можно победить? С какой стороны? сервера mqtt?
Max
С любой. Либо в источнике шлете на символ больше, либо в приемнике копируете пейлоад в массив и добавляете нуль в конце. Нуль - который '\0', если что. Или 0 как чиселку.
Andrey
Всем доброго времени суток! Почему не срабатывает прерывание на ESP32, когда к соотв. пину подключены несколько кнопок через делители? Если без делителя, то прерывания от одной кнопки ловятся. Если с несколькими кнопками и делителем, то нет. Но при этом, если считывать значения с порта, то там от 0 до 4095 вполне нормально значения ловятся. Схема (аналог, по сути) прилагается
Ашот
Потому что нет прерывания по аналоговому значению
Andrey
Потому что нет прерывания по аналоговому значению
грусть-печаль... я ещё понимаю, если бы не ловило в нижней части диапазона
Max
А чо бы по таймеру аналог не считывать и выставлять/снимать флаг нажатия?
Andrey
Просто, до реализации через таймер, 99,9% времени работы МК был в состоянии простоя. Теперь же... там постоянно молотит таймер.
Ашот
Так аппаратный таймер не занимает времени процессора
ttoni4
Всем привет! esp8684 spi пауза между транзакциями 16 микросекунд, можно ли уменьшить или убрать паузу? code: https://pastebin.com/R7ityXWz
Сергей
Доброе утро! А подскажите оптимальный БП для ESP32. В соотношении цена/качество. Можно ссылочкой на ozon ☺️
ok-home
Всем привет! esp8684 spi пауза между транзакциями 16 микросекунд, можно ли уменьшить или убрать паузу? code: https://pastebin.com/R7ityXWz
попробуй - spi_device_queue_trans(....) https://docs.espressif.com/projects/esp-idf/en/latest/esp32c2/api-reference/peripherals/spi_master.html#_CPPv422spi_device_queue_trans19spi_device_handle_tP17spi_transaction_t10TickType_t
ok-home
Пауза стала еще дольше, мб там поднастроить еще нужно что-то?
так ты не жди когда трансзакция закончится - шли пачками ( он ставит в свою внутреннюю очередь) ответы через spi_device_get_trans_resul. не факт что поможет но попробуй.
ttoni4
Мне вообще в идеале синхронизировать spi транзакции с таймером на частоте 250кГц
Евгений
Мне вообще в идеале синхронизировать spi транзакции с таймером на частоте 250кГц
Если ты будешь пачками сообщения выдавать они так и будут удаляться. А то и медленный режим на 5 минут включу, чтобы думал... потом писал
ok-home
Мне вообще в идеале синхронизировать spi транзакции с таймером на частоте 250кГц
одна транзакция в 4 мкс, с прерываниями по таймеру на c2? с включеным wifi ? - думаю что не реально
ok-home
если уйти почти в bare-metal. От прерывания до старта spi грубо 1.5-2 мкс ( это на c3 ) при этом spi без использования драйверов idf wifi или bt - могут влезть в любое время, они почти не блокируются ((
ttoni4
Готового решения нет? Мне чтобы велосипед не изобретать?
ok-home
Готового решения нет? Мне чтобы велосипед не изобретать?
я его не знаю, под себя на c3 писал - но там не было задач часто дергать spi, нужно было максимально быстро стартовать длинную трансзакцию, почти под завязку ( 64к )
Dayto🐳
Ребят,какой из этих отвечает за смену адреса на этом дисплее
Sergey
привет, кто знает как заткнуть бутлоадер при старте? при старте получаю вот такую простыню ESP-ROM:esp32c3-api1-20210207 Build:Feb 7 2021 rst:0x15 (USB_UART_CHIP_RESET),boot:0xc (SPI_FAST_FLASH_BOOT) Saved PC:0x4038469c SPIWP:0xee mode:DIO, clock div:1 load:0x3fcd5820,len:0x1204 load:0x403cc710,len:0x740 load:0x403ce710,len:0x2c68 entry 0x403cc710 BOOTLOADER_LOG_LEVEL установлен в 0. (ESP-IDF)
Денис
Ребят,какой из этих отвечает за смену адреса на этом дисплее
никто не знает😁. но чел, C9 - это конденсатор он никак не отвечает за адрес на дисплее
Sergey
да я просто отметил эту часть я думаю R5
Судя по всему, на этой плате* нет опции сменить адрес. Вот что нагуглил: https://forum.arduino.cc/t/change-i2c-address-oled/991780/2
Dayto🐳
Блин,ладно спасибо
Есть какое-то решение проблемы кроме пркупки других дисплеев?
Dayto🐳
Dayto🐳
Эта подойдёт?
Dayto🐳
Подключить на разные i2c порты?
Думаю один напрямую а второй через этот переоброзователь
Dayto🐳
Подключить на разные i2c порты?
Есть только один i2c порт
Sergey
Думаю один напрямую а второй через этот переоброзователь
И как ты им воспользуешься? Он для другого дисплея совсем
Dayto🐳
А что делать,надо 3 дтсплея подключить и порт i2c только один
Dayto🐳
Esp8266
Ашот
если по тупому - то через мультиплескор, 74hc4052
Ашот
выходы к scl/sda, а входы к дисплеям, т.к. это аналоговые ключи, то все работать будет, но только по очереди, одновременно писать не получится
Dayto🐳
Вижу на arduino uno два порта есть
Ашот
вы хотите одновременно слать данные во все 3 дисплея?
Ашот
не получится никак
Dayto🐳
Да
Но у третьего дисплея есть смена адресса
Ашот
вот что-то подобное, тут 8 каналов i2c получится
Ашот
в один и тот же момент времени никак не получится писать в разные устройства
Dayto🐳
Нажал на кнопку секунды на одном дисплее Нажал на вторую и секунды на втором
Ашот
так а зачем тогда одновременность? отрисовка дисплея максимум сотни милисекунд
Dmitry
Делаю управление выводом логов от разных блоков. использую esp_log_level_set. Передаю то, что от get получил. И изменений в выводе не видно. Есть мысли где копать?
Dmitry
получаешь текущий уровень его же и записываешь - должно что то поменяться ?
Так не должно поменяться. Меняется, если глобально на входе меняю для всего проекта, текущий 4
berrymorr
добрый день! а правда, что у ESP32 вотчдог, который по esp_task_wdt_reset() и esp_task_wdt_reset_user() сбрасывается, на нижнем уровне аппаратный? или это чисто программные игрушки на FreeRTOS? ESP-IDF 5.1.2, если важно
ok-home
Так не должно поменяться. Меняется, если глобально на входе меняю для всего проекта, текущий 4
а как нужно ? логировать на одном уровне потом в процессе поменять ?
Dmitry
а как нужно ? логировать на одном уровне потом в процессе поменять ?
блоков много, из дебаг разделен тэгами. И для нужного тэга можно сменить уровень, описано, что функцией в коде
ok-home
добрый день! а правда, что у ESP32 вотчдог, который по esp_task_wdt_reset() и esp_task_wdt_reset_user() сбрасывается, на нижнем уровне аппаратный? или это чисто программные игрушки на FreeRTOS? ESP-IDF 5.1.2, если важно
есть аппаратные, на каждое ядро, и вроде как task_wdt рулит через них. 19 Watchdog Timers (WDT) 19.1 Introduction The ESP32 has three watchdog timers: one in each of the two timer modules (called Main System Watchdog Timer, or MWDT) and one in the RTC module (which is called the RTC Watchdog Timer, or RWDT). These watchdog timers are intended to recover from an unforeseen fault, causing the application program to abandon its normal sequence. A watchdog timer has four stages. Each stage may take one out of three or four actions upon the expiry of a programmed period of time for this stage, unless the watchdog is fed or disabled. The actions are: interrupt, CPU reset, core reset and system reset. Only the RWDT can trigger the system reset, and is able to reset the entire chip and the main system including the RTC itself. A timeout value can be set for each stage individually. During flash boot, the RWDT and the first MWDT start automatically in order to detect and recover from booting problems.
Dmitry
начни с простого - отключить все у всех esp_log_level_set("*", ESP_LOG_NONE);
Не душит змея, ни явное указание, ни по звездочке. Придется глобальным конфигом
ok-home
странно - у меня спокойно закрывает вообще весь вывод в консоль
Dmitry
странно - у меня спокойно закрывает вообще весь вывод в консоль
Под esp-idf? Мне куски от ардуины попались, пока приходится под ней в платформио, в лоб с плюсов много переписывать. Но под катом она на idf, а конфиги могут еще где-то переписываться
Sergey
Кто нибудь использует интерфейс usb-jtag? Я правильно понимаю что гонять по нему бинарный протокол нифига не выйдет, разве что лезть самостоятельно под капот esp-idf и копаться в кишках?
Sergey
Кто нибудь использует интерфейс usb-jtag? Я правильно понимаю что гонять по нему бинарный протокол нифига не выйдет, разве что лезть самостоятельно под капот esp-idf и копаться в кишках?
Передавать бинарные данные это конечно без проблем, а вот как принимать - вопрос. По умолчанию где то в недрах крутится парсер который ждёт в конце сообщения /r/n
ok-home
Под esp-idf? Мне куски от ардуины попались, пока приходится под ней в платформио, в лоб с плюсов много переписывать. Но под катом она на idf, а конфиги могут еще где-то переписываться
насколько я понял ардуина переопределяет все макросы ESP_LOG скорее всего esp_log_level_set, в либах ардуины просто не будет работать ((. если нужны логи в твоих модулях - можно попробовать задефайнить USE_ESP_IDF_LOG. тогда будут работать макросы из idf https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/esp32-hal-log.h не проверял - с ардуиной не дружу ))