Kiryano12 9 Опубликовано 13 апреля Поделиться Опубликовано 13 апреля В 13.04.2025 в 20:21, yalymka сказал: Думаешь кто-то вменяемый будет прошивать оригинальный прибор 32 прошивкой ? Показать Оригинальный прибор работают со всеми версиями программ, по крайней мере я запускал и 13 и 22 и 32 и 35 , ПРИБОР АВТОМОТИЧЕСКИ обновляется под ту программу , в которой было последнее подключение, тому доказательство кратковременная задержка с секунды 3-5. так что запускай любую программу, и все. На то он и оригинал Ссылка на комментарий Поделиться на другие сайты Поделиться
Roman St 43 Опубликовано 13 апреля Поделиться Опубликовано 13 апреля В 13.04.2025 в 18:47, Valery63 сказал: обзывать устройство можешь как хочешь, но подключаться оно не будет Показать Вообщем провел эксперимент. С произвольным именем конфигуратор не видит устройство... но и четко серийник не обязательно. Есть там какой-то алгоритм))) часто вместо произвольного имени определяется как 0000A Chupacabra 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Max22 30 Опубликовано 14 апреля Поделиться Опубликовано 14 апреля В 13.04.2025 в 18:02, Roman St сказал: Просто быстро сдались))) Измените имя папки с установлиным pcm и пересоздайте ярлык. Потом установите другой. Показать Вот о чём и речь что он автоматом перешивается ,НАТО он оригинал и в той теме человек имеет ввиду откат прибора на 32 версию гошка 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 7 Опубликовано 14 апреля Поделиться Опубликовано 14 апреля В 26.02.2025 в 21:36, deman-s сказал: Здравствуйте появилось немного свободного времени проверил esp32 на предмет зависания действительно при больших объёмах данных происходило зависание увеличил объём буфера теперь можно даже оригинал обновлять через блютуз (если кто ставил в ориг) в архиве файлы прошивки с изменённым буфером и новая версия программы flash download tool (которая должна работать в win 7) sm2pro_,bluetooth_esp32_NEW_bufer.7zНедоступно Показать А можно исходник попросить? Хочется покопаться. void setup() { Serial.setRxBufferSize(1024); Serial.setTxBufferSize(1024); Просто эти величины увеличены? Ссылка на комментарий Поделиться на другие сайты Поделиться
deman-s 68 Опубликовано 14 апреля Поделиться Опубликовано 14 апреля В 14.04.2025 в 12:42, Drexxter сказал: А можно исходник попросить? Хочется покопаться. void setup() { Serial.setRxBufferSize(1024); Serial.setTxBufferSize(1024); Просто эти величины увеличены? Показать Здравствуйте исходник дать не могу Настройки буфера в скетче увеличить и ещё в плагине esp32 в программе arduino ide увеличить Ссылка на комментарий Поделиться на другие сайты Поделиться
Serj_Pro 4 Опубликовано 14 апреля Поделиться Опубликовано 14 апреля В 13.04.2025 в 20:21, yalymka сказал: Думаешь кто-то вменяемый будет прошивать оригинальный прибор 32 прошивкой ? Показать Откатить оригу таким способом как на скринах не возможно. Назад дороги нет))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 7 Опубликовано 14 апреля Поделиться Опубликовано 14 апреля В 14.04.2025 в 12:58, deman-s сказал: Здравствуйте исходник дать не могу Настройки буфера в скетче увеличить и ещё в плагине esp32 в программе arduino ide увеличить Показать Позвольте поинтересоваться - до каких величин достаточно увеличить? Ссылка на комментарий Поделиться на другие сайты Поделиться
deman-s 68 Опубликовано 14 апреля Поделиться Опубликовано 14 апреля В 14.04.2025 в 15:04, Drexxter сказал: Позвольте поинтересоваться - до каких величин достаточно увеличить? Показать 2048 Ссылка на комментарий Поделиться на другие сайты Поделиться
Roman St 43 Опубликовано 14 апреля Поделиться Опубликовано 14 апреля В 14.04.2025 в 01:50, Max22 сказал: В 13.04.2025 в 18:02, Roman St сказал: Просто быстро сдались))) Измените имя папки с установлиным pcm и пересоздайте ярлык. Потом установите другой. Показать Вот о чём и речь что он автоматом перешивается ,НАТО он оригинал и в той теме человек имеет ввиду откат прибора на 32 версию Показать Здесь я говорил про то как поставить 2 разных версии PCMflash Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex026 0 Опубликовано 14 апреля Поделиться Опубликовано 14 апреля Здравствуйте,имеется китайматик на версии 2.21.32,планирую добавить bluetooth на esp32,какой версией его лучше прошить,с номером - 78730 или 62122? Ссылка на комментарий Поделиться на другие сайты Поделиться
svy 4 Опубликовано 14 апреля Поделиться Опубликовано 14 апреля Не на что не влияет, шей любой. Ссылка на комментарий Поделиться на другие сайты Поделиться
Roman St 43 Опубликовано 14 апреля Поделиться Опубликовано 14 апреля В 14.04.2025 в 12:42, Drexxter сказал: А можно исходник попросить? Показать #include "BluetoothSerial.h" #include "driver/uart.h" //#define USE_PIN // Раскомментируйте для использования PIN-кода при сопряжении const char *pin = "1234"; const String device_name = "SCANMATIK #A111788"; // const для экономии памяти BluetoothSerial SerialBT; void setup() { Serial.setRxBufferSize(2048); Serial.setTxBufferSize(2048); Serial.begin(921600); // Настройка UART с аппаратным управлением потоком (RTS/CTS) uart_set_pin(UART_NUM_0, 1, 3, 22, 19); // UART, TX, RX, RTS, CTS uart_set_hw_flow_ctrl(UART_NUM_0, UART_HW_FLOWCTRL_CTS_RTS, 64); uart_set_mode(UART_NUM_0, UART_MODE_UART); SerialBT.begin(device_name); #ifdef USE_PIN SerialBT.setPin(pin); #endif Serial.print("AT-AB -BypassMode-\n"); } void loop() { // Буферизованное чтение и запись для уменьшения задержек static uint8_t buffer[256]; // Статический буфер для уменьшения аллокаций size_t available; // Передача данных из Serial в Bluetooth available = Serial.available(); if (available > 0) { size_t bytesRead = Serial.readBytes(buffer, min(available, sizeof(buffer))); SerialBT.write(buffer, bytesRead); } // Передача данных из Bluetooth в Serial available = SerialBT.available(); if (available > 0) { size_t bytesRead = SerialBT.readBytes(buffer, min(available, sizeof(buffer))); Serial.write(buffer, bytesRead); Буферизация данных Вместо посимвольного чтения (Serial.read()) используется буферизованный обмен (readBytes + write), что ускоряет передачу. Статический буфер (static uint8_t buffer[256]) исключает лишние выделения памяти. Оптимизация памяти device_name объявлена как const String, чтобы избежать лишних копий. Читаемость и надежность Добавлены комментарии для настройки UART. Использована функция min() для предотвращения переполнения буфера. Снижение задержек Пакетная передача уменьшает нагрузку на процессор. Дополнительные рекомендации: Если передаются большие объемы данных, можно увеличить буфер (например, до 512 или 1024 байт). Рабочая версия сгенерированная ИИ осталось только потестить))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Roman St 43 Опубликовано 14 апреля Поделиться Опубликовано 14 апреля Эксперементировал с ИИ (deepseek)... Просил у него код для включения и выключения (для того что бы в обычном режиме esp много не жрала и не грелась) через Bluetooth терминал точки доступа wifi в esp32. Поднимал точку доступа с веб интерфейсом для обновления прошивки (OTA)через wifi. Как бы с костылями работает))) может и оптимизировать можно только что там обновлять в блютус модуле... Другое дело что в теории можно и STM 32 прошить через ESP32 ИИ даже код дает но эксперементировать некогда.... Ссылка на комментарий Поделиться на другие сайты Поделиться
Valery63 8 Опубликовано 14 апреля Поделиться Опубликовано 14 апреля Попробовал ваш скетч. В конец надо добавить закрытие функции. А так все работает. Правда скорости обмена не добавилось. Я экспериментирую с разными буферами на программировании одного и того-же блока по воздуху. Полное время по кабелю 8 минут. По воздуху 22 минуты. От размера буфера зависимости нет. Ваш скетч тоже 22 минуты. Может это так с программами БМВ х.з. Такое впечатление что увеличенные временные промежутки между посылками. Сделал еще один адаптер на основе ЕЛМ-ки. так он программирует за 12 минут. Скорость у него 115200. Roman St 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
11den11 296 Опубликовано 14 апреля Поделиться Опубликовано 14 апреля В 14.04.2025 в 20:35, Valery63 сказал: Правда скорости обмена не добавилось. Показать И не добавиться.... а еще и потери данных возрастут в разы при плотном потоке. Ссылка на комментарий Поделиться на другие сайты Поделиться
Roman St 43 Опубликовано 14 апреля Поделиться Опубликовано 14 апреля В 14.04.2025 в 20:35, Valery63 сказал: Правда скорости обмена не добавилось. Я экспериментирую с разными буферами на программировании одного и того-же блока по воздуху. Показать А вообще без буфера пробовали? В 14.04.2025 в 17:31, Roman St сказал: / Буферизованное чтение и запись для уменьшения задержек static uint8_t buffer[256]; // Статический буфер для уменьшения аллокаций Показать Здесь меняли значения? Нету сейчас живого блока для экспериментов... ИИ мне даже предлогал код с задействованием 2 ядер еспшки с задействованием FreeRTOS типо одно ядро на передачу другое на прием... обещал увеличение производительности))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 7 Опубликовано 15 апреля Поделиться Опубликовано 15 апреля На сколько знаю, ЕСП на одном ядре крутит связь, на втором крутит код. Блютус/Вайфай стек - весьма прожорливые штуки ) Во всяком случае на 8266 всё зависало на время обработки вифи, ввиду одноядерности. С static uint8_t buffer[256]; то же не понятно, почему бы и его не бахнуть 2048.. Ссылка на комментарий Поделиться на другие сайты Поделиться
Valery63 8 Опубликовано 15 апреля Поделиться Опубликовано 15 апреля В 14.04.2025 в 22:17, Roman St сказал: Здесь меняли значения Показать В вашем скетче не менял. Пробовал с "типовым". Буфер менял от 128 до 2048. Время примерно одинаковое. Такое ощущение что ещё где-то задаётся время между посылками. Ссылка на комментарий Поделиться на другие сайты Поделиться
Roman St 43 Опубликовано 15 апреля Поделиться Опубликовано 15 апреля В 15.04.2025 в 01:55, Drexxter сказал: С static uint8_t buffer[256]; то же не понятно, почему бы и его не бахнуть 2048.. Показать В 14.04.2025 в 17:31, Roman St сказал: Если передаются большие объемы данных, можно увеличить буфер (например, до 512 или 1024 байт). Показать В esp32 с двух ядерностью можно игратся.... Ссылка на комментарий Поделиться на другие сайты Поделиться
Valery63 8 Опубликовано 15 апреля Поделиться Опубликовано 15 апреля static uint8_t buffer[256] увеличил до 1024 - сканматик перестал выходить на связь. Не esp32, а сам (программный сбой). Изменил на 512 - заработал. Время +- 21 минута. Вальнул блок при программировании специально (отключил питание). С вашим скетчем блок не поднял. Не выходил на связь. Скорее всего по отклику. Прошил обычный скетч с буфером 2048 - блок поднялся без проблем. Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 7 Опубликовано 15 апреля Поделиться Опубликовано 15 апреля Короче "Лучшее - враг хорошего" ) Скетч с морганием светодиодами, буфером, и серийником 32-й версии. Показать контент #include "BluetoothSerial.h" #include "driver/uart.h" const char *pin = "1234"; String device_name = "SCANMATIK #A111788"; BluetoothSerial SerialBT; // Пины для светодиодов const int led_conn = 32; // вывод для светодиода состояния подключения const int led_data = 33; // вывод для светодиода передачи данных void setup() { Serial.setRxBufferSize(2048); Serial.setTxBufferSize(2048); Serial.begin(921600); // Настройка пинов для светодиодов pinMode(led_conn, OUTPUT); pinMode(led_data, OUTPUT); uart_set_pin(UART_NUM_0, 26, 27, 12, 14); //Set UART pins(UART, TX, RX, RTS, CTS) uart_set_hw_flow_ctrl(UART_NUM_0, UART_HW_FLOWCTRL_CTS_RTS, 64); // 64 is the threshold for RX flow control (0 to 127 bytes) uart_set_mode(UART_NUM_0, UART_MODE_UART); SerialBT.begin(device_name); // Bluetooth device name #ifdef USE_PIN SerialBT.setPin(pin); #endif Serial.print("AT-AB -BypassMode-\n"); } void loop() { // Проверка состояния подключения if (SerialBT.hasClient()) { digitalWrite(led_conn, HIGH); } else { digitalWrite(led_conn, LOW); } // Обработка данных if (Serial.available()) { digitalWrite(led_conn, LOW); digitalWrite(led_data, HIGH); SerialBT.write(Serial.read()); digitalWrite(led_data, LOW); digitalWrite(led_conn, HIGH); } if (SerialBT.available()) { digitalWrite(led_conn, LOW); digitalWrite(led_data, HIGH); Serial.write(SerialBT.read()); digitalWrite(led_data, LOW); digitalWrite(led_conn, HIGH); } } sketch_scanmatic_LED_32_bufer.inoПолучение информации... Ссылка на комментарий Поделиться на другие сайты Поделиться
11den11 296 Опубликовано 15 апреля Поделиться Опубликовано 15 апреля А перед тем как начинать моргать светодиодами, узнать нужно сколько время занимает команда digitalWrite(). За скорость боритесь с якорем по асфальту... Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 7 Опубликовано 15 апреля Поделиться Опубликовано 15 апреля "В цикле loop (), используя функцию digitalWrite, мы можем менять состояние пина с частотой максимум 72 кГц" Это на ардуине, на 16мГц. На ЕСП32 - проверять надо.. И может ли оно напрямую через PORT управляться.. ESP8266 - 560кГц Ок, на базе GPIO. Быстрее не будет я думаю. Показать контент #include "BluetoothSerial.h" #include "driver/uart.h" #include "driver/gpio.h" const char *pin = "1234"; String device_name = "SCANMATIK #A111788"; BluetoothSerial SerialBT; // Пины для светодиодов const gpio_num_t led_conn = GPIO_NUM_32; // вывод для светодиода состояния подключения const gpio_num_t led_data = GPIO_NUM_33; // вывод для светодиода передачи данных void setup() { Serial.setRxBufferSize(2048); Serial.setTxBufferSize(2048); Serial.begin(921600); // Настройка пинов для светодиодов gpio_reset_pin(led_conn); gpio_reset_pin(led_data); gpio_set_direction(led_conn, GPIO_MODE_OUTPUT); gpio_set_direction(led_data, GPIO_MODE_OUTPUT); gpio_set_pull_mode(led_conn, GPIO_FLOATING); gpio_set_pull_mode(led_data, GPIO_FLOATING); uart_set_pin(UART_NUM_0, 26, 27, 12, 14); //Set UART pins(UART, TX, RX, RTS, CTS) uart_set_hw_flow_ctrl(UART_NUM_0, UART_HW_FLOWCTRL_CTS_RTS, 64); // 64 is the threshold for RX flow control (0 to 127 bytes) uart_set_mode(UART_NUM_0, UART_MODE_UART); SerialBT.begin(device_name); // Bluetooth device name #ifdef USE_PIN SerialBT.setPin(pin); #endif Serial.print("AT-AB -BypassMode-\n"); } void loop() { // Проверка состояния подключения if (SerialBT.hasClient()) { gpio_set_level(led_conn, 1); } else { gpio_set_level(led_conn, 0); } // Обработка данных if (Serial.available()) { gpio_set_level(led_conn, 0); gpio_set_level(led_data, 1); SerialBT.write(Serial.read()); gpio_set_level(led_data, 0); gpio_set_level(led_conn, 1); } if (SerialBT.available()) { gpio_set_level(led_conn, 0); gpio_set_level(led_data, 1); Serial.write(SerialBT.read()); gpio_set_level(led_data, 0); gpio_set_level(led_conn, 1); } Ссылка на комментарий Поделиться на другие сайты Поделиться
Roman St 43 Опубликовано 15 апреля Поделиться Опубликовано 15 апреля В 15.04.2025 в 17:23, Drexxter сказал: Короче "Лучшее - враг хорошего" ) Показать Я тоже думаю чем проще код тем надежнее. Пусть и медленее.... Себе ставил буфер 1024... работает... Но скорее всего прошюсь на первую версию она вроде как надежнее))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 7 Опубликовано 15 апреля Поделиться Опубликовано 15 апреля В 15.04.2025 в 17:40, Drexxter сказал: Ок, на базе GPIO. Быстрее не будет я думаю. Показать Но если покопаться - GPIO там работает через обработчик FIFO с буфером, сколько он тактов процессора жрёт - не ясно, как и задержки. У кого есть осцил под рукой - проверьте частоту Показать контент #include "driver/gpio.h" const gpio_num_t test_pin = GPIO_NUM_32; void setup() { gpio_reset_pin(test_pin); gpio_set_direction(test_pin, GPIO_MODE_OUTPUT); gpio_set_pull_mode(test_pin, GPIO_FLOATING); } void loop() { gpio_set_level(test_pin, 1); gpio_set_level(test_pin, 0); } Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти