11den11 296 Опубликовано 15 апреля Поделиться Опубликовано 15 апреля Боритесь за скорость и сами же костыли выставляете.... и зачем? Подпаяйте моргающий диод к пяти вольтам и пусть себе моргает, если уж елку хотеться. И нечего там осликом смотреть - у всех команд есть определенная длительность - такты, за сколько она выполняется. Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 7 Опубликовано 15 апреля Поделиться Опубликовано 15 апреля В 15.04.2025 в 18:53, 11den11 сказал: Боритесь за скорость и сами же костыли выставляете.... и зачем? Подпаяйте моргающий диод к пяти вольтам и пусть себе моргает, если уж елку хотеться. И нечего там осликом смотреть - у всех команд есть определенная длительность - такты, за сколько она выполняется. Показать Ну и за сколько выполняется digitalwrite и gpio_set_level на ESP32? ...Ок, вариант вообще без тормозов на светодиоде. Один светодиод состояния, на 32 пине. Изменяется только при изменение состояния соединения. Так же и передача данных идёт только когда блюпуп подключен. Проверяйте, тестируйте. "на столе" работает. sketch_scanmatic_LED_32_bufer_GPIO_Conn.inoПолучение информации... Ссылка на комментарий Поделиться на другие сайты Поделиться
11den11 296 Опубликовано 15 апреля Поделиться Опубликовано 15 апреля digitalwrite() 240 ... 480 напротив GPIO.out_w1ts 2...3 такта..... gpio_set_level(PIN, value) 80 до150..... Какая разница за сколько? Вы херите данные!!! Зачем? Не легче светодиоды прямиком на UART запаять, чем грузить ESP?! Или вы думаете, что обмен данными приостановится, пока вы зажигаете или тушите светодиод? Кому эта "красота" нужна? Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 7 Опубликовано 15 апреля Поделиться Опубликовано 15 апреля В 15.04.2025 в 19:42, 11den11 сказал: digitalwrite() 240 ... 480 напротив GPIO.out_w1ts 2...3 такта..... gpio_set_level(PIN, value) 80 до150..... Какая разница за сколько? Показать Такая, что он вполне может успевать и то и то. Цитата Вы херите данные!!! Зачем? Показать Но это не точно. Цитата Не легче светодиоды прямиком на UART запаять, чем грузить ESP?! Показать Он для этого явно не предназначен, вот это как раз костылище. Цитата Или вы думаете, что обмен данными приостановится, пока вы зажигаете или тушите светодиод? Показать А для чего нам буферы нужны? Не для этого? Может пока идёт чтение буфера блютус или его запись в уарт - обмен приостанавливается? Цитата Кому эта "красота" нужна? Показать Мне. В целом - изначальный код был взят из примеров работы ESP32, про какой-то функционал или оптимизацию там речи не шло. Если уже упарываться - можно и в прерывания, и в DMA пойти, и явно не в Ардуине писать. Но раз мы тут страдаем хернёй... )) Ссылка на комментарий Поделиться на другие сайты Поделиться
11den11 296 Опубликовано 15 апреля Поделиться Опубликовано 15 апреля И где видно, что в ESP32 используются digitalWrite(), pinmode()....) ? Зачем тогда работать с ESP? Берем мегу и вперед... Пора уже забыть AVR, работая с ESP. В 15.04.2025 в 19:54, Drexxter сказал: Он для этого явно не предназначен, вот это как раз костылище. Показать Что не предназначено? Это такие же GPIO, как и все остальные. Не мешайте MCU работать! Если ESP и выполняет ваши прихоти, это абсолютно не значит, что ему это добавляет охоту свами иметь дело. В 15.04.2025 в 19:54, Drexxter сказал: А для чего нам буферы нужны? Не для этого? Может пока идёт чтение буфера блютус или его запись в уарт - обмен приостанавливается? Показать Понятно..., тема закрыта.... Ссылка на комментарий Поделиться на другие сайты Поделиться
ShruS 4 Опубликовано 16 апреля Поделиться Опубликовано 16 апреля Тема превращается в помойку! P.S. Для ESP32, нужно создавать свою, отдельную... гошка, roma130a, 11den11 и 2 других 4 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
AllScan 86 Опубликовано 16 апреля Поделиться Опубликовано 16 апреля Scanmatik 2 pro, установка Bluetooth модуля Chupacabra, ShruS, migurv и 1 другой 2 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 7 Опубликовано 16 апреля Поделиться Опубликовано 16 апреля По скорости, светодиодам и прочему. Чтение прошивки 71м модулем (2048Кб): Оригинал Bluetooth - 4:45 Китай Bluetooth без LED (то, что лежит везде) - 9:35 Китай Bluetooth 1 LED - 9:28 Китай Bluetooth 2 LED gpio direct - 9:21 С небольшими модификациями (игра с буфером и работой с ним): Китай Bluetooth 2 LED gpio MOD1 - 5:56 Выводы - при прямой работе с GPIO скорость не меняется. ESP32 всяко медленнее оригинала. Эксперименты с прерываниями и DMA какого-то значительного результата не дают. В 15.04.2025 в 20:11, 11den11 сказал: Понятно..., тема закрыта.... Показать Не пойму, зачем ты лезешь, если сам до конца не понимаешь, да и ничего толкового по теме не говоришь? Чисто "поумничать"? Chupacabra, shneider и Aleksey7 1 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Roman St 43 Опубликовано 16 апреля Поделиться Опубликовано 16 апреля С обсуждением кода еспешки действительно можно перехать в тему установки модуля.... так как здесь народу не интересно все ж ждут готового решения))) В 16.04.2025 в 17:40, Drexxter сказал: Оригинал Bluetooth - 4:45 Китай Bluetooth без LED (то, что лежит везде) - 9:35 Китай Bluetooth 1 LED - 9:28 Китай Bluetooth 2 LED gpio direct - 9:21 Показать Каждый 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. Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 7 Опубликовано 16 апреля Поделиться Опубликовано 16 апреля Ну не сокращает, это погрешность измерений имхо. Тут ещё +/- связь, потери. Блютус не идеален.. То, что выдавали нейросети - или не компилируется, или не работает как надо )) Раз 5 попробовал, стал писать сам ) Ссылка на комментарий Поделиться на другие сайты Поделиться
Roman St 43 Опубликовано 16 апреля Поделиться Опубликовано 16 апреля В 16.04.2025 в 21:04, Drexxter сказал: То, что выдавали нейросети - или не компилируется, или не работает как надо Показать Есть такое. Указываешь на проблемму и она переписывает код и проверяет ошибки. Ну и кто в коде шарит сам и поправит)) Когда сам пишешь тоже не с первого раза работает))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Valery63 8 Опубликовано 17 апреля Поделиться Опубликовано 17 апреля В 16.04.2025 в 17:40, Drexxter сказал: Китай Bluetooth 2 LED gpio MOD1 - 5:56 Показать Реально такая разница по времени с вашим же "Китай Bluetooth 2 LED gpio direct - 9:21"? Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 7 Опубликовано 17 апреля Поделиться Опубликовано 17 апреля В 17.04.2025 в 15:47, Valery63 сказал: Реально такая разница по времени Показать Верно. Но что там как - не расскажу. Самой по себе инфы что оптимизировать возможно - имхо достаточно 😉 Пусть вон 11den11 свой код выкладывает. )) Ссылка на комментарий Поделиться на другие сайты Поделиться
STEEP 0 Опубликовано 19 апреля Поделиться Опубликовано 19 апреля Кто может сказать? Почему не подключается к блютуз на программе с телефона на андройд, а на ноуте через блютуз все подключается и все работает. Версия программ везде 2.21.32. Версия китайматика и блютуза 111788. Ссылка на комментарий Поделиться на другие сайты Поделиться
deman-s 68 Опубликовано 19 апреля Поделиться Опубликовано 19 апреля В 19.04.2025 в 09:32, STEEP сказал: Кто может сказать? Почему не подключается к блютуз на программе с телефона на андройд, а на ноуте через блютуз все подключается и все работает. Версия программ везде 2.21.32. Версия китайматика и блютуза 111788. Показать Геолокацию включите на телефоне Ссылка на комментарий Поделиться на другие сайты Поделиться
STEEP 0 Опубликовано 19 апреля Поделиться Опубликовано 19 апреля В 19.04.2025 в 12:25, deman-s сказал: Геолокацию включите на телефоне Показать Спасибо! Помогло. Ссылка на комментарий Поделиться на другие сайты Поделиться
Oleg123q 0 Опубликовано 21 апреля Поделиться Опубликовано 21 апреля Кто может прошить китайский клон по удаленки в личные сообщения напишите Ссылка на комментарий Поделиться на другие сайты Поделиться
TuneHome 34 Опубликовано 21 апреля Поделиться Опубликовано 21 апреля В 21.04.2025 в 11:03, Oleg123q сказал: Кто может прошить китайский клон по удаленки в личные сообщения напишите Показать наберешь нужную репутацию, тогда прошьем без проблем! Ссылка на комментарий Поделиться на другие сайты Поделиться
Oleg123q 0 Опубликовано 21 апреля Поделиться Опубликовано 21 апреля Не бесплатно причем тут репутация Ссылка на комментарий Поделиться на другие сайты Поделиться
Chupacabra 28 Опубликовано 22 апреля Поделиться Опубликовано 22 апреля В 14.04.2025 в 12:58, deman-s сказал: Здравствуйте исходник дать не могу Показать Поменяйте пожалуйста номер на 111788 - перфекционисты с 32й версией заждались 😅 AllScan 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Serj_Pro 4 Опубликовано 22 апреля Поделиться Опубликовано 22 апреля В 21.04.2025 в 11:03, Oleg123q сказал: Кто может прошить китайский клон по удаленки в личные сообщения напишите Показать Зачем вам удаленно, инструкций как это сделать самому валом. Тем более у вас я так понимаю интерфейс для прошивки есть. Ссылка на комментарий Поделиться на другие сайты Поделиться
paleoha 33 Опубликовано 22 апреля Поделиться Опубликовано 22 апреля Может кто уже и ставил, не видел в теме, может недосмотрел, поставил модуль блютуз на оригинальный сканматик 2 (прошивка 2.21.35) . Так, как разводка платы оригинального адаптера отличается от китайского см-2, кинул провода подключения к плате навесным. Все работает, номер блютуз модуля А78730 не менял под номер ориг прибора. AllScan 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Виктор V 20 Опубликовано 22 апреля Поделиться Опубликовано 22 апреля В 22.04.2025 в 16:15, paleoha сказал: Может кто уже и ставил, не видел в теме, может недосмотрел, поставил модуль блютуз на оригинальный сканматик 2 (прошивка 2.21.35) . Так, как разводка платы оригинального адаптера отличается от китайского см-2, кинул провода подключения к плате навесным. Все работает, номер блютуз модуля А78730 не менял под номер ориг прибора. Показать Чем плата отличается от оригинала все один в один Ссылка на комментарий Поделиться на другие сайты Поделиться
paleoha 33 Опубликовано 22 апреля Поделиться Опубликовано 22 апреля Там не такая плата. Район блютуз модуля совсем не совпадает с китайматиком. Модуль LMX9838SB. Ссылка на комментарий Поделиться на другие сайты Поделиться
Oleg 310 43 Опубликовано 23 апреля Поделиться Опубликовано 23 апреля а как на такую плату от ори модуля теперь блютуз поставить? не кто не может подсказать? Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти