Kiryano12 9 Опубликовано Воскресенье в 22:49 Поделиться Опубликовано Воскресенье в 22:49 2 часа назад, yalymka сказал: Думаешь кто-то вменяемый будет прошивать оригинальный прибор 32 прошивкой ? Оригинальный прибор работают со всеми версиями программ, по крайней мере я запускал и 13 и 22 и 32 и 35 , ПРИБОР АВТОМОТИЧЕСКИ обновляется под ту программу , в которой было последнее подключение, тому доказательство кратковременная задержка с секунды 3-5. так что запускай любую программу, и все. На то он и оригинал Ссылка на комментарий Поделиться на другие сайты Поделиться
Roman St 30 Опубликовано Воскресенье в 23:55 Поделиться Опубликовано Воскресенье в 23:55 5 часов назад, Valery63 сказал: обзывать устройство можешь как хочешь, но подключаться оно не будет Вообщем провел эксперимент. С произвольным именем конфигуратор не видит устройство... но и четко серийник не обязательно. Есть там какой-то алгоритм))) часто вместо произвольного имени определяется как 0000A Ссылка на комментарий Поделиться на другие сайты Поделиться
Max22 29 Опубликовано Понедельник в 01:50 Поделиться Опубликовано Понедельник в 01:50 7 часов назад, Roman St сказал: Просто быстро сдались))) Измените имя папки с установлиным pcm и пересоздайте ярлык. Потом установите другой. Вот о чём и речь что он автоматом перешивается ,НАТО он оригинал и в той теме человек имеет ввиду откат прибора на 32 версию гошка 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 5 Опубликовано Понедельник в 12:42 Поделиться Опубликовано Понедельник в 12:42 В 27.02.2025 в 00: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 63 Опубликовано Понедельник в 12:58 Поделиться Опубликовано Понедельник в 12:58 11 минут назад, Drexxter сказал: А можно исходник попросить? Хочется покопаться. void setup() { Serial.setRxBufferSize(1024); Serial.setTxBufferSize(1024); Просто эти величины увеличены? Здравствуйте исходник дать не могу Настройки буфера в скетче увеличить и ещё в плагине esp32 в программе arduino ide увеличить Ссылка на комментарий Поделиться на другие сайты Поделиться
Serj_Pro 4 Опубликовано Понедельник в 13:55 Поделиться Опубликовано Понедельник в 13:55 17 часов назад, yalymka сказал: Думаешь кто-то вменяемый будет прошивать оригинальный прибор 32 прошивкой ? Откатить оригу таким способом как на скринах не возможно. Назад дороги нет))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 5 Опубликовано Понедельник в 15:04 Поделиться Опубликовано Понедельник в 15:04 2 часа назад, deman-s сказал: Здравствуйте исходник дать не могу Настройки буфера в скетче увеличить и ещё в плагине esp32 в программе arduino ide увеличить Позвольте поинтересоваться - до каких величин достаточно увеличить? Ссылка на комментарий Поделиться на другие сайты Поделиться
deman-s 63 Опубликовано Понедельник в 15:34 Поделиться Опубликовано Понедельник в 15:34 29 минут назад, Drexxter сказал: Позвольте поинтересоваться - до каких величин достаточно увеличить? 2048 Ссылка на комментарий Поделиться на другие сайты Поделиться
Roman St 30 Опубликовано Понедельник в 15:51 Поделиться Опубликовано Понедельник в 15:51 14 часов назад, Max22 сказал: 21 час назад, Roman St сказал: Просто быстро сдались))) Измените имя папки с установлиным pcm и пересоздайте ярлык. Потом установите другой. Вот о чём и речь что он автоматом перешивается ,НАТО он оригинал и в той теме человек имеет ввиду откат прибора на 32 версию Здесь я говорил про то как поставить 2 разных версии PCMflash Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex026 0 Опубликовано Понедельник в 16:06 Поделиться Опубликовано Понедельник в 16:06 Здравствуйте,имеется китайматик на версии 2.21.32,планирую добавить bluetooth на esp32,какой версией его лучше прошить,с номером - 78730 или 62122? Ссылка на комментарий Поделиться на другие сайты Поделиться
svy 4 Опубликовано Понедельник в 16:08 Поделиться Опубликовано Понедельник в 16:08 Не на что не влияет, шей любой. Ссылка на комментарий Поделиться на другие сайты Поделиться
Roman St 30 Опубликовано Понедельник в 17:31 Поделиться Опубликовано Понедельник в 17:31 4 часа назад, 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 30 Опубликовано Понедельник в 19:43 Поделиться Опубликовано Понедельник в 19:43 Эксперементировал с ИИ (deepseek)... Просил у него код для включения и выключения (для того что бы в обычном режиме esp много не жрала и не грелась) через Bluetooth терминал точки доступа wifi в esp32. Поднимал точку доступа с веб интерфейсом для обновления прошивки (OTA)через wifi. Как бы с костылями работает))) может и оптимизировать можно только что там обновлять в блютус модуле... Другое дело что в теории можно и STM 32 прошить через ESP32 ИИ даже код дает но эксперементировать некогда.... Ссылка на комментарий Поделиться на другие сайты Поделиться
Valery63 8 Опубликовано Понедельник в 20:35 Поделиться Опубликовано Понедельник в 20:35 Попробовал ваш скетч. В конец надо добавить закрытие функции. А так все работает. Правда скорости обмена не добавилось. Я экспериментирую с разными буферами на программировании одного и того-же блока по воздуху. Полное время по кабелю 8 минут. По воздуху 22 минуты. От размера буфера зависимости нет. Ваш скетч тоже 22 минуты. Может это так с программами БМВ х.з. Такое впечатление что увеличенные временные промежутки между посылками. Сделал еще один адаптер на основе ЕЛМ-ки. так он программирует за 12 минут. Скорость у него 115200. Roman St 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
11den11 296 Опубликовано Понедельник в 21:01 Поделиться Опубликовано Понедельник в 21:01 24 минуты назад, Valery63 сказал: Правда скорости обмена не добавилось. И не добавиться.... а еще и потери данных возрастут в разы при плотном потоке. Ссылка на комментарий Поделиться на другие сайты Поделиться
Roman St 30 Опубликовано Понедельник в 22:17 Поделиться Опубликовано Понедельник в 22:17 1 час назад, Valery63 сказал: Правда скорости обмена не добавилось. Я экспериментирую с разными буферами на программировании одного и того-же блока по воздуху. А вообще без буфера пробовали? 4 часа назад, Roman St сказал: / Буферизованное чтение и запись для уменьшения задержек static uint8_t buffer[256]; // Статический буфер для уменьшения аллокаций Здесь меняли значения? Нету сейчас живого блока для экспериментов... ИИ мне даже предлогал код с задействованием 2 ядер еспшки с задействованием FreeRTOS типо одно ядро на передачу другое на прием... обещал увеличение производительности))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 5 Опубликовано Вторник в 01:55 Поделиться Опубликовано Вторник в 01:55 На сколько знаю, ЕСП на одном ядре крутит связь, на втором крутит код. Блютус/Вайфай стек - весьма прожорливые штуки ) Во всяком случае на 8266 всё зависало на время обработки вифи, ввиду одноядерности. С static uint8_t buffer[256]; то же не понятно, почему бы и его не бахнуть 2048.. Ссылка на комментарий Поделиться на другие сайты Поделиться
Valery63 8 Опубликовано Вторник в 07:55 Поделиться Опубликовано Вторник в 07:55 9 часов назад, Roman St сказал: Здесь меняли значения В вашем скетче не менял. Пробовал с "типовым". Буфер менял от 128 до 2048. Время примерно одинаковое. Такое ощущение что ещё где-то задаётся время между посылками. Ссылка на комментарий Поделиться на другие сайты Поделиться
Roman St 30 Опубликовано Вторник в 14:31 Поделиться Опубликовано Вторник в 14:31 12 часов назад, Drexxter сказал: С static uint8_t buffer[256]; то же не понятно, почему бы и его не бахнуть 2048.. 20 часов назад, Roman St сказал: Если передаются большие объемы данных, можно увеличить буфер (например, до 512 или 1024 байт). В esp32 с двух ядерностью можно игратся.... Ссылка на комментарий Поделиться на другие сайты Поделиться
Valery63 8 Опубликовано Вторник в 17:19 Поделиться Опубликовано Вторник в 17:19 static uint8_t buffer[256] увеличил до 1024 - сканматик перестал выходить на связь. Не esp32, а сам (программный сбой). Изменил на 512 - заработал. Время +- 21 минута. Вальнул блок при программировании специально (отключил питание). С вашим скетчем блок не поднял. Не выходил на связь. Скорее всего по отклику. Прошил обычный скетч с буфером 2048 - блок поднялся без проблем. Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 5 Опубликовано Вторник в 17:23 Поделиться Опубликовано Вторник в 17:23 Короче "Лучшее - враг хорошего" ) Скетч с морганием светодиодами, буфером, и серийником 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 Опубликовано Вторник в 17:32 Поделиться Опубликовано Вторник в 17:32 А перед тем как начинать моргать светодиодами, узнать нужно сколько время занимает команда digitalWrite(). За скорость боритесь с якорем по асфальту... Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 5 Опубликовано Вторник в 17:40 Поделиться Опубликовано Вторник в 17:40 "В цикле 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 30 Опубликовано Вторник в 18:20 Поделиться Опубликовано Вторник в 18:20 53 минуты назад, Drexxter сказал: Короче "Лучшее - враг хорошего" ) Я тоже думаю чем проще код тем надежнее. Пусть и медленее.... Себе ставил буфер 1024... работает... Но скорее всего прошюсь на первую версию она вроде как надежнее))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 5 Опубликовано Вторник в 18:45 Поделиться Опубликовано Вторник в 18:45 1 час назад, 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); } Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти