
carmasteruser
Начинающий-
Постов
15 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Загрузки
Магазин
Весь контент carmasteruser
-
а раньше вы что выкладывали?? пожалуй я заканчиваю с вами дискуссию, потому как идет пустопорожний разговор ни о чем.
- 123 ответа
-
- scanmatik 2 pro
- сканматик 2 pro
-
(и ещё 2 )
C тегом:
-
скорости блютуза хватает. узким местом выступает проводной интерфейс . вай фай тут не поможет. не в коня корм. для прошивки конечно надежнее по проводу. блютуз для диагностики вполне сгодится.
- 123 ответа
-
- scanmatik 2 pro
- сканматик 2 pro
-
(и ещё 2 )
C тегом:
-
для этого надо держать команду бета-тестеров и кучу разного автомобильного железа которого у меня нет. Поэтому будем решать проблемы по мере их поступления. Но 99.9% проблем уже решены.
- 123 ответа
-
- scanmatik 2 pro
- сканматик 2 pro
-
(и ещё 2 )
C тегом:
-
не понял эту фразу. какое отношение имеет моя прошивка к USB? И походу вы использовали старую версию которая была задумчивой иногда. Еще одна оптимизация прошивки. Хотел так сделать изначально но глупый ИИ отговорил. Сколько раз уже убеждался что ему нельзя верить! Теперь потребление в режиме ожидания 50 ма, при полной загрузке 135-140 ма sketch_aug5a_copy_20250808171846.zip Тот же вариант в бинарном виде esp32.esp32.node32s.zip
- 123 ответа
-
- scanmatik 2 pro
- сканматик 2 pro
-
(и ещё 2 )
C тегом:
-
так я выложил все свои прошивки в этой теме. если надо прям файл ino приложил. sketch_aug5a_copy_20250808171846.zip
- 123 ответа
-
- scanmatik 2 pro
- сканматик 2 pro
-
(и ещё 2 )
C тегом:
-
по моим данным потребление в холостом режиме прыгает 82 -73 ма. при длительном приеме через блютуз не превышает 160 ма. температура под нагрузкой 46-47.
- 123 ответа
-
- scanmatik 2 pro
- сканматик 2 pro
-
(и ещё 2 )
C тегом:
-
а температурный режим сравнили? сдается мне будет разница. и еще интересно сколько ваша прошивка посылает запросов чтобы считать 1 байт данных? в случае когда данных нету. самому лень считать. почему ваша прошивка работает сносно, хотя должна по идее быстро ставить на колени микроконтроллер?? потому что у него есть встроенные средства защиты от дурака и говнокодинга. в моем случае эта защита не нужна. потому что все сделано грамотно и разумно. попробуйте код подобный вашему запустить на десктопе. вот тогда все тайное и станет явным.
- 123 ответа
-
- scanmatik 2 pro
- сканматик 2 pro
-
(и ещё 2 )
C тегом:
-
Предыдущая прошивка, например, долго думала при автоматическом выборе ЭБУ. Здесь же выбирает почти мгновенно. Там максимальная задержка была 1024 мсек, тут 128, Затупов практически нету и при этом проц не греется. Этой уже вполне можно пользоваться в рабочем режиме. Кому надо в бинарном виде - ловите. Заливать примерно так: esptool.py write_flash \\ --flash_mode dio \\ --flash_freq 40m \\ --flash_size detect \\ 0x1000 bootloader.bin \\ 0x8000 partitions.bin \\ 0x10000 app.bin \\ 0x100000 data.bin esp32.esp32.node32s.zip
- 123 ответа
-
- scanmatik 2 pro
- сканматик 2 pro
-
(и ещё 2 )
C тегом:
-
Доработал прошивку до вполне вменяемого состояния. Беглое тестирование показало что почти не уступает оригинальной версии. Рекомендуется к использованию.
- 123 ответа
-
- scanmatik 2 pro
- сканматик 2 pro
-
(и ещё 2 )
C тегом:
-
У меня, наконец дошли руки до запуска блутуза. сначала проверил на прошивке что выложена здесь. все работает стабильно но подтупливает, особенно по сравнению с проводом. Решил что надо как-то распаралеллить нагрузку. В результате родилась следующая прошивка что принципиально другой режим обработки. результат порадовал! интерфейс стал заметно более отзывчивый. #include <freertos/FreeRTOS.h> #include <freertos/task.h> #include <driver/uart.h> #include <BluetoothSerial.h> #define BAUD_RATE 115200 * 8 #define SIZE_BUFFER 512 #define SIZE_FIFO SIZE_BUFFER * 8 #define SAVE_MODE //#define USE_PIN #ifdef USE_PIN const char* pin = "1234"; #endif const String device_name = "SCANMATIK #A111788"; BluetoothSerial SerialBT; uint8_t buffer[SIZE_BUFFER]; uint8_t bufferBT[SIZE_BUFFER]; unsigned int available=0; unsigned int availableBT=0; size_t bytesRead=0; size_t bytesReadBT=0; size_t bytesWrite=0; size_t bytesWriteBT=0; #ifdef SAVE_MODE uint32_t min_delay = 1; uint32_t max_delay = min_delay * 1024; uint32_t cur_delay = min_delay; uint32_t cur_delayBT = min_delay; uint32_t critical_size = (SIZE_FIFO / 4) * 3; #endif // Поток для обработки данных из последовательного порта void serial_reader_task(void* param) { for (; { available = Serial.available(); if (available > 0) { bytesRead = Serial.readBytes(buffer, min(available, sizeof(buffer))); bytesWrite = SerialBT.write(buffer, bytesRead); #ifdef SAVE_MODE if (cur_delay > min_delay) { if (available >= critical_size) { cur_delay = min_delay; } else { cur_delay /= 2; } } vTaskDelay(pdMS_TO_TICKS(cur_delay)); // пауза для минимизации нагрузки #endif } #ifdef SAVE_MODE else { if (cur_delay < max_delay) { cur_delay *= 2; } vTaskDelay(pdMS_TO_TICKS(cur_delay)); } #endif } } // Поток для обработки данных из Bluetooth void bluetooth_reader_task(void* param) { for (; { availableBT = SerialBT.available(); if (availableBT > 0) { // Чтение данных из Bluetooth bytesReadBT = SerialBT.readBytes(bufferBT, min(availableBT, sizeof(bufferBT))); bytesWriteBT = Serial.write(bufferBT, bytesReadBT); #ifdef SAVE_MODE if (cur_delayBT > min_delay) { if (availableBT >= critical_size) { cur_delayBT = min_delay; } else { cur_delayBT /= 2; } } vTaskDelay(pdMS_TO_TICKS(cur_delayBT)); // пауза для минимизации нагрузки #endif } #ifdef SAVE_MODE else { if (cur_delayBT < max_delay) { cur_delayBT *= 2; } vTaskDelay(pdMS_TO_TICKS(cur_delayBT)); } #endif } } void setup() { Serial.setRxBufferSize(SIZE_FIFO); Serial.setTxBufferSize(SIZE_FIFO); Serial.begin(BAUD_RATE); SerialBT.begin(device_name); memset(buffer, 0, sizeof(buffer)); memset(bufferBT, 0, sizeof(bufferBT)); // setup UART from hardware (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"); // Назначение задач на разные ядра xTaskCreatePinnedToCore(serial_reader_task, "Serial Reader", 4096, NULL, 10, NULL, 0); xTaskCreatePinnedToCore(bluetooth_reader_task, "Bluetooth Reader", 4096, NULL, 10, NULL, 1); } // Метод loop() void loop() {} У меня такое было при плохом контакте одного из 4 проводов UART TX, RX, RTS, CTS. можно попробовать отключить CTS или RTS. или оба сразу. например так uart_set_pin(UART_NUM_0, 1, 3, 22, -1); // UART, TX, RX, RTS, CTS uart_set_hw_flow_ctrl(UART_NUM_0, UART_HW_FLOWCTRL_RTS, 64); редактор немного порезал код! вместо for(; { должно быть for (;;) {
- 123 ответа
-
- scanmatik 2 pro
- сканматик 2 pro
-
(и ещё 2 )
C тегом:
-
Делать это имеет смысл если раньше приписана инициализация и старт модуля.
- 123 ответа
-
- scanmatik 2 pro
- сканматик 2 pro
-
(и ещё 2 )
C тегом:
-
максимальную задержку вполне можно увеличить до 2048 или даже 4096 но это надо проверять в работе на сканматике. я свою плату еще не подключал.
- 123 ответа
-
- scanmatik 2 pro
- сканматик 2 pro
-
(и ещё 2 )
C тегом:
-
Это исходный код для Ардуины IDE. Проверял да, на ESP32. Для DEBUG режима надо соединить с какой USB-TTL платой способной работать на высоких скоростях. Годится дешевый программатор на CH341A. Далее запускаем терминал где можно отправлять файлы и выставить соответствующую скорость. Cгодится minicom на передачу и Putty для приема. Не забываем и про блютуз. Для передачи файла на блютуз готового решения не нашел, пришлось свой скрипт на питоне сварганить. По поводу размера буфера. 128 должно было в теории хватать для устойчивой работы. Но при длительной передаче заметил что буфер FIFO постепенно заполняется под завязку что чревато потерей данных. При 256 такой проблемы не заметил. Увеличивать до 512 смысла не вижу. Будет страдать отзывчивость системы. Все-таки у нас один поток и все операции выполняются последовательно. Прошивка энергосберегающая. Применяется динамическая задержка от 1 до 1024 миллисекунд в зависимости от загрузки системы. В результате потребление системы снижается до 45 - 55 ма в состоянии покоя. Переход от максимальной задержки к минимальной в пределах значения максимальной задержки. При загрузке буферов FIFO больше половины задержка не применяется.
- 123 ответа
-
- scanmatik 2 pro
- сканматик 2 pro
-
(и ещё 2 )
C тегом:
-
#include "BluetoothSerial.h" #include "driver/uart.h" #define BAUD_RATE 115200 * 8 #define SIZE_BUFFER 256 #define SIZE_FIFO SIZE_BUFFER * 8 #define SAVE_MODE //#define DEBUG_MODE //#define USE_PIN #ifdef USE_PIN const char* pin = "1234"; #endif const String device_name = "SCANMATIK #A111788"; BluetoothSerial SerialBT; uint8_t buffer[SIZE_BUFFER]; unsigned int available=0; unsigned int availableBT=0; size_t bytesRead=0; size_t bytesWrite=0; #ifdef SAVE_MODE uint32_t min_delay = 1; uint32_t max_delay = min_delay * 1024; uint32_t cur_delay = min_delay; uint32_t critical_size = SIZE_FIFO / 2; #endif #ifdef DEBUG_MODE #include <chrono> using namespace std::chrono; auto timePointSerial = high_resolution_clock::now(); auto timePointBT = high_resolution_clock::now(); #endif void setup() { Serial.setRxBufferSize(SIZE_FIFO); Serial.setTxBufferSize(SIZE_FIFO); Serial.begin(BAUD_RATE); memset(buffer, 0, sizeof(buffer)); // setup UART from hardware (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() { available = Serial.available(); if (available > 0) { bytesRead = Serial.readBytes(buffer, min(available, sizeof(buffer))); bytesWrite = SerialBT.write(buffer, bytesRead); #ifdef SAVE_MODE if (cur_delay > min_delay) { cur_delay /= 2; } #endif #ifdef DEBUG_MODE auto timeoutSerial = high_resolution_clock::now() - timePointSerial; Serial.printf("\n\rAvailable from Serial %u, cur_delay %u , timeout %u\n", available, cur_delay, duration_cast<microseconds>(timeoutSerial).count()); Serial.printf("\n\rFrom Serial to BT Read = %u, Write = %u\n", bytesRead, bytesWrite); timePointSerial = high_resolution_clock::now(); #endif } availableBT = SerialBT.available(); if (availableBT > 0) { bytesRead = SerialBT.readBytes(buffer, min(availableBT, sizeof(buffer))); bytesWrite = Serial.write(buffer, bytesRead); #ifdef SAVE_MODE if (cur_delay > min_delay) { cur_delay /= 2; } #endif #ifdef DEBUG_MODE auto timeoutBT = high_resolution_clock::now() - timePointBT; Serial.printf("\n\rAvailable from BT %u, cur_delay %u, timeout %u\n", availableBT, cur_delay, duration_cast<microseconds>(timeoutBT).count()); Serial.printf("\n\rFrom BT to Serial Read = %u, Write = %u\n", bytesRead, bytesWrite); timePointBT = high_resolution_clock::now(); #endif } #ifdef SAVE_MODE if ((available < critical_size) && (availableBT < critical_size)) { delay(cur_delay); } if ((available <= 0) && (availableBT <= 0)) { if (cur_delay < max_delay) { cur_delay *= 2; } } #endif } для визуального контроля работы интерфейсов раскоментировать //#define DEBUG_MODE Это для экспериментов до установки в сканматик. Устанавливать с включенным DEBUG лучше не надо
- 123 ответа
-
- scanmatik 2 pro
- сканматик 2 pro
-
(и ещё 2 )
C тегом: