11den11 296 Опубликовано 15 апреля Поделиться Опубликовано 15 апреля Боритесь за скорость и сами же костыли выставляете.... и зачем? Подпаяйте моргающий диод к пяти вольтам и пусть себе моргает, если уж елку хотеться. И нечего там осликом смотреть - у всех команд есть определенная длительность - такты, за сколько она выполняется. Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 6 Опубликовано 15 апреля Поделиться Опубликовано 15 апреля 6 минут назад, 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 6 Опубликовано 15 апреля Поделиться Опубликовано 15 апреля 5 минут назад, 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. 11 минут назад, Drexxter сказал: Он для этого явно не предназначен, вот это как раз костылище. Что не предназначено? Это такие же GPIO, как и все остальные. Не мешайте MCU работать! Если ESP и выполняет ваши прихоти, это абсолютно не значит, что ему это добавляет охоту свами иметь дело. 16 минут назад, Drexxter сказал: А для чего нам буферы нужны? Не для этого? Может пока идёт чтение буфера блютус или его запись в уарт - обмен приостанавливается? Понятно..., тема закрыта.... Ссылка на комментарий Поделиться на другие сайты Поделиться
ShruS 4 Опубликовано 16 апреля Поделиться Опубликовано 16 апреля Тема превращается в помойку! P.S. Для ESP32, нужно создавать свою, отдельную... AllScan, roma130a, 11den11 и 2 других 4 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
AllScan 84 Опубликовано 16 апреля Поделиться Опубликовано 16 апреля Scanmatik 2 pro, установка Bluetooth модуля migurv, Chupacabra, гошка и 1 другой 2 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 6 Опубликовано 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 какого-то значительного результата не дают. 21 час назад, 11den11 сказал: Понятно..., тема закрыта.... Не пойму, зачем ты лезешь, если сам до конца не понимаешь, да и ничего толкового по теме не говоришь? Чисто "поумничать"? shneider и Chupacabra 1 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Roman St 31 Опубликовано 16 апреля Поделиться Опубликовано 16 апреля С обсуждением кода еспешки действительно можно перехать в тему установки модуля.... так как здесь народу не интересно все ж ждут готового решения))) 2 часа назад, 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 6 Опубликовано 16 апреля Поделиться Опубликовано 16 апреля Ну не сокращает, это погрешность измерений имхо. Тут ещё +/- связь, потери. Блютус не идеален.. То, что выдавали нейросети - или не компилируется, или не работает как надо )) Раз 5 попробовал, стал писать сам ) Ссылка на комментарий Поделиться на другие сайты Поделиться
Roman St 31 Опубликовано 16 апреля Поделиться Опубликовано 16 апреля 32 минуты назад, Drexxter сказал: То, что выдавали нейросети - или не компилируется, или не работает как надо Есть такое. Указываешь на проблемму и она переписывает код и проверяет ошибки. Ну и кто в коде шарит сам и поправит)) Когда сам пишешь тоже не с первого раза работает))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Valery63 8 Опубликовано 17 апреля Поделиться Опубликовано 17 апреля 22 часа назад, Drexxter сказал: Китай Bluetooth 2 LED gpio MOD1 - 5:56 Реально такая разница по времени с вашим же "Китай Bluetooth 2 LED gpio direct - 9:21"? Ссылка на комментарий Поделиться на другие сайты Поделиться
Drexxter 6 Опубликовано 17 апреля Поделиться Опубликовано 17 апреля 2 часа назад, Valery63 сказал: Реально такая разница по времени Верно. Но что там как - не расскажу. Самой по себе инфы что оптимизировать возможно - имхо достаточно 😉 Пусть вон 11den11 свой код выкладывает. )) Ссылка на комментарий Поделиться на другие сайты Поделиться
STEEP 0 Опубликовано Суббота в 09:32 Поделиться Опубликовано Суббота в 09:32 Кто может сказать? Почему не подключается к блютуз на программе с телефона на андройд, а на ноуте через блютуз все подключается и все работает. Версия программ везде 2.21.32. Версия китайматика и блютуза 111788. Ссылка на комментарий Поделиться на другие сайты Поделиться
deman-s 64 Опубликовано Суббота в 12:25 Поделиться Опубликовано Суббота в 12:25 2 часа назад, STEEP сказал: Кто может сказать? Почему не подключается к блютуз на программе с телефона на андройд, а на ноуте через блютуз все подключается и все работает. Версия программ везде 2.21.32. Версия китайматика и блютуза 111788. Геолокацию включите на телефоне Ссылка на комментарий Поделиться на другие сайты Поделиться
STEEP 0 Опубликовано Суббота в 14:31 Поделиться Опубликовано Суббота в 14:31 2 часа назад, deman-s сказал: Геолокацию включите на телефоне Спасибо! Помогло. Ссылка на комментарий Поделиться на другие сайты Поделиться
Oleg123q 0 Опубликовано Понедельник в 11:03 Поделиться Опубликовано Понедельник в 11:03 Кто может прошить китайский клон по удаленки в личные сообщения напишите Ссылка на комментарий Поделиться на другие сайты Поделиться
TuneHome 33 Опубликовано Понедельник в 18:00 Поделиться Опубликовано Понедельник в 18:00 6 часов назад, Oleg123q сказал: Кто может прошить китайский клон по удаленки в личные сообщения напишите наберешь нужную репутацию, тогда прошьем без проблем! Ссылка на комментарий Поделиться на другие сайты Поделиться
Oleg123q 0 Опубликовано Понедельник в 18:27 Поделиться Опубликовано Понедельник в 18:27 Не бесплатно причем тут репутация Ссылка на комментарий Поделиться на другие сайты Поделиться
Chupacabra 27 Опубликовано Вторник в 11:29 Поделиться Опубликовано Вторник в 11:29 В 14.04.2025 в 17:58, deman-s сказал: Здравствуйте исходник дать не могу Поменяйте пожалуйста номер на 111788 - перфекционисты с 32й версией заждались 😅 AllScan 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Serj_Pro 4 Опубликовано Вторник в 12:15 Поделиться Опубликовано Вторник в 12:15 В 21.04.2025 в 14:03, Oleg123q сказал: Кто может прошить китайский клон по удаленки в личные сообщения напишите Зачем вам удаленно, инструкций как это сделать самому валом. Тем более у вас я так понимаю интерфейс для прошивки есть. Ссылка на комментарий Поделиться на другие сайты Поделиться
paleoha 33 Опубликовано Вторник в 16:15 Поделиться Опубликовано Вторник в 16:15 Может кто уже и ставил, не видел в теме, может недосмотрел, поставил модуль блютуз на оригинальный сканматик 2 (прошивка 2.21.35) . Так, как разводка платы оригинального адаптера отличается от китайского см-2, кинул провода подключения к плате навесным. Все работает, номер блютуз модуля А78730 не менял под номер ориг прибора. AllScan 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Виктор V 17 Опубликовано Вторник в 20:10 Поделиться Опубликовано Вторник в 20:10 3 часа назад, paleoha сказал: Может кто уже и ставил, не видел в теме, может недосмотрел, поставил модуль блютуз на оригинальный сканматик 2 (прошивка 2.21.35) . Так, как разводка платы оригинального адаптера отличается от китайского см-2, кинул провода подключения к плате навесным. Все работает, номер блютуз модуля А78730 не менял под номер ориг прибора. Чем плата отличается от оригинала все один в один Ссылка на комментарий Поделиться на другие сайты Поделиться
paleoha 33 Опубликовано Вторник в 20:22 Поделиться Опубликовано Вторник в 20:22 Там не такая плата. Район блютуз модуля совсем не совпадает с китайматиком. Модуль LMX9838SB. Ссылка на комментарий Поделиться на другие сайты Поделиться
Oleg 310 43 Опубликовано вчера в 09:18 Поделиться Опубликовано вчера в 09:18 а как на такую плату от ори модуля теперь блютуз поставить? не кто не может подсказать? Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти