Перейти к содержанию

Roman St

Продвинутый
  • Постов

    159
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Весь контент Roman St

  1. я уже превратил, bin файл есть в моем архиве.... Arduino ide может делать экспорт bin файла.
  2. На первой странице автора скачайте архив там же есть программа и инструкция. или вот https://docs.espressif.com/projects/esp-at/en/latest/esp32/Get_Started/Downloading_guide.html
  3. Bluetooth не пользуюсь. В основном WIFI. Pcm, DTS monako, vediamo шил... да связь норм не вылетала не разу. Дело не в связе а в том что он может в бмв залить то чего там не должно быть....
  4. Там есть скетч....arduino ide, копируйте код и вставляйте куда удобно.. есть и bin файл
  5. Roman St

    S222 63AMG 2019 CAN

    Смотря что за мотор. А то там же и стоят... Потому и спросил где чтоят мозги.
  6. Roman St

    S222 63AMG 2019 CAN

    Похоже на болячку 221 мерса... здесь же тоже мозги на моторе стоят? Может проц отваливается. На 221 проверялось постукиванием по эбу))
  7. Переезжаем... Сделал еще прошивочку для ESP32. В прошивке добавлена возможность изменения имени Bluetooth. Через Bluetooth terminal. Протестил на блоке edc16c39 фул и калибровки читает пишет. Уваливал блок(дергал питание) .... восстановил. Файл прошивки с подробностями ищем в теме выше)))
  8. Сделал еще прошивочку для ESP32. В прошивке добавлена возможность изменения имени Bluetooth. Через Bluetooth terminal. Подробности в файлеSCANMATIK ESP32.rar протестил на блоке edc16c39 фул и калибровки читает пишет. Уваливал блок(дергал питание) .... восстановил.
  9. Кабель нужен что бы после лаунча попробывать поднять E-SYS))) Закодировать еще можно что то... забекапившись... а вот програмировать опасно. Как для диагностики подключаетесь так же и для кодинга и програминга... но желательно по usb.
  10. Считывал stm 32. Тоже не получалось... с припаенным ресетом, но если рессет подключать ручками на время определение чипа а потом отключать то все работало. Попробуйте откидывать рессет.... есть подозрение что он как то не правельно функционирует. Так их и надо наоборот подключать.... rx на tx tx на rx....
  11. Ну на всякий случай вот по отдельности... system.rar Судя по размерам файлов... не понятно как то включен или нет... То есть app всегда встроен в system? Почему тогда раздельно прилетели на планшет?
  12. Сегодня обновился через оболочку... Не хватает SmartLinkC_App_Update_File😉
  13. Есть такое. Указываешь на проблемму и она переписывает код и проверяет ошибки. Ну и кто в коде шарит сам и поправит)) Когда сам пишешь тоже не с первого раза работает)))
  14. С обсуждением кода еспешки действительно можно перехать в тему установки модуля.... так как здесь народу не интересно все ж ждут готового решения))) Каждый led сокращает время на 7 сек. Что бы обогнать ориг. осталось посчитать сколько надо диодов и заказать ленту)))) А в RTOS в 2х ядерном режиме пробовали? Прям интересно затестить. #include "BluetoothSerial.h" #include <freertos/FreeRTOS.h> #include <freertos/task.h> #include <freertos/queue.h> BluetoothSerial SerialBT; QueueHandle_t btToSerialQueue; QueueHandle_t serialToBtQueue; HardwareSerial hardwareSerial(1); // Используем UART1 // Пины UART (настройте под вашу конфигурацию) #define RX_PIN 16 #define TX_PIN 17 #define RTS_PIN 18 // Опционально для аппаратного управления потоком #define CTS_PIN 19 // Опционально для аппаратного управления потоком // Настройки UART #define UART_BAUDRATE 921600 #define QUEUE_SIZE 2048 #define BUFFER_SIZE 1024 void btTask(void *pvParameters) { // Ядро 0: Обработка Bluetooth SerialBT.begin("ESP32-SerialBridge"); // Имя Bluetooth устройства SerialBT.setPin("1234"); // Пин-код (опционально) uint8_t btBuffer[BUFFER_SIZE]; size_t btBytesRead; while(1) { // Прием данных из Bluetooth и отправка в очередь для UART if(SerialBT.available()) { btBytesRead = SerialBT.readBytes(btBuffer, BUFFER_SIZE); if(btBytesRead > 0) { xQueueSend(btToSerialQueue, btBuffer, portMAX_DELAY); } } // Отправка данных из очереди в Bluetooth uint8_t serialBuffer[BUFFER_SIZE]; if(xQueueReceive(serialToBtQueue, serialBuffer, 0) == pdTRUE) { SerialBT.write(serialBuffer, BUFFER_SIZE); } vTaskDelay(1 / portTICK_PERIOD_MS); // Небольшая задержка } } void serialTask(void *pvParameters) { // Ядро 1: Обработка UART hardwareSerial.begin(UART_BAUDRATE, SERIAL_8N1, RX_PIN, TX_PIN); uint8_t serialBuffer[BUFFER_SIZE]; size_t serialBytesRead; while(1) { // Прием данных из UART и отправка в очередь для Bluetooth if(hardwareSerial.available()) { serialBytesRead = hardwareSerial.readBytes(serialBuffer, BUFFER_SIZE); if(serialBytesRead > 0) { xQueueSend(serialToBtQueue, serialBuffer, portMAX_DELAY); } } // Отправка данных из очереди в UART uint8_t btBuffer[BUFFER_SIZE]; if(xQueueReceive(btToSerialQueue, btBuffer, 0) == pdTRUE) { hardwareSerial.write(btBuffer, BUFFER_SIZE); } vTaskDelay(1 / portTICK_PERIOD_MS); // Небольшая задержка } } void setup() { // Инициализация очередей btToSerialQueue = xQueueCreate(QUEUE_SIZE, sizeof(uint8_t[BUFFER_SIZE])); serialToBtQueue = xQueueCreate(QUEUE_SIZE, sizeof(uint8_t[BUFFER_SIZE])); // Создание задач на разных ядрах xTaskCreatePinnedToCore( btTask, // Функция задачи "BT_Task", // Имя задачи 4096, // Размер стека NULL, // Параметры 2, // Приоритет (выше, чем у serialTask) NULL, // Дескриптор задачи 0 // Ядро 0 ); xTaskCreatePinnedToCore( serialTask, // Функция задачи "SerialTask", // Имя задачи 4096, // Размер стека NULL, // Параметры 1, // Приоритет NULL, // Дескриптор задачи 1 // Ядро 1 ); // Удаление задачи loop (не используется) vTaskDelete(NULL); } void loop() { // Не используется, так как задачи работают в RTOS } ### Ключевые особенности реализации: 1. **Двухъядерная архитектура**: - Bluetooth обработка на ядре 0 - UART обработка на ядре 1 2. **Межзадачное взаимодействие**: - Использование двух очередей FreeRTOS для передачи данных между задачами - Буферизация данных для минимизации потерь 3. **Оптимизация производительности**: - Большие буферы (1024 байта) - Высокая скорость UART (921600 бод) - Приоритет задачи Bluetooth выше, чем у UART 4. **Гибкость конфигурации**: - Настраиваемые пины UART - Возможность добавления аппаратного управления потоком (RTS/CTS) 5. **Стабильность**: - Проверка доступности данных перед чтением - Защита от переполнения очередей ### Дополнительные улучшения: 1. Для увеличения скорости можно добавить DMA для UART: ```cpp hardwareSerial.begin(UART_BAUDRATE, SERIAL_8N1, RX_PIN, TX_PIN); hardwareSerial.onReceive([]() { // Обработка прерываний UART }, true); ``` 2. Для улучшения стабильности Bluetooth соединения: ```cpp SerialBT.enableSSP(); SerialBT.setMTU(512); // Увеличение максимального размера пакета ``` 3. Добавление мониторинга состояния соединения: ```cpp if(!SerialBT.connected()) { // Переподключение или уведомление } ``` Этот код обеспечивает полнодуплексный туннель между Bluetooth SPP и UART с максимальным использованием возможностей двух ядер ESP32.
  15. Я тоже думаю чем проще код тем надежнее. Пусть и медленее.... Себе ставил буфер 1024... работает... Но скорее всего прошюсь на первую версию она вроде как надежнее)))
  16. В esp32 с двух ядерностью можно игратся....
  17. А вообще без буфера пробовали? Здесь меняли значения? Нету сейчас живого блока для экспериментов... ИИ мне даже предлогал код с задействованием 2 ядер еспшки с задействованием FreeRTOS типо одно ядро на передачу другое на прием... обещал увеличение производительности)))
  18. Эксперементировал с ИИ (deepseek)... Просил у него код для включения и выключения (для того что бы в обычном режиме esp много не жрала и не грелась) через Bluetooth терминал точки доступа wifi в esp32. Поднимал точку доступа с веб интерфейсом для обновления прошивки (OTA)через wifi. Как бы с костылями работает))) может и оптимизировать можно только что там обновлять в блютус модуле... Другое дело что в теории можно и STM 32 прошить через ESP32 ИИ даже код дает но эксперементировать некогда....
  19. #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 байт). Рабочая версия сгенерированная ИИ осталось только потестить)))
  20. Вот о чём и речь что он автоматом перешивается ,НАТО он оригинал и в той теме человек имеет ввиду откат прибора на 32 версию Здесь я говорил про то как поставить 2 разных версии PCMflash
  21. Вообщем провел эксперимент. С произвольным именем конфигуратор не видит устройство... но и четко серийник не обязательно. Есть там какой-то алгоритм))) часто вместо произвольного имени определяется как 0000A
  22. Просто быстро сдались))) Измените имя папки с установлиным pcm и пересоздайте ярлык. Потом установите другой.
  23. Получается это работает только на 1 версии. Которая шла со скетчем. Сейчас 2 версию пробовал разными прогами и с компа и с телефона с разными скоростями... не работает.
  24. У автора другой модуль... с esp32 так не прокатит.
×
  • Создать...