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

Прошивка для SM2 Pro Clone


Рекомендуемые сообщения

Боритесь за скорость и сами же костыли выставляете.... и зачем? Подпаяйте моргающий диод к пяти вольтам и пусть себе моргает, если уж елку хотеться. И нечего там осликом смотреть - у всех команд есть определенная длительность - такты, за сколько она выполняется.

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, 11den11 сказал:

Боритесь за скорость и сами же костыли выставляете.... и зачем? Подпаяйте моргающий диод к пяти вольтам и пусть себе моргает, если уж елку хотеться. И нечего там осликом смотреть - у всех команд есть определенная длительность - такты, за сколько она выполняется.

Ну и за сколько выполняется digitalwrite и gpio_set_level на ESP32?

...Ок, вариант вообще без тормозов на светодиоде. Один светодиод состояния, на 32 пине.
Изменяется только при изменение состояния соединения. Так же и передача данных идёт только когда блюпуп подключен. Проверяйте, тестируйте. "на столе" работает.

sketch_scanmatic_LED_32_bufer_GPIO_Conn.ino

Ссылка на комментарий
Поделиться на другие сайты

digitalwrite() 240 ... 480 напротив GPIO.out_w1ts 2...3 такта..... gpio_set_level(PIN, value) 80 до150.....
Какая разница за сколько? Вы херите данные!!! Зачем? Не легче светодиоды прямиком на UART запаять, чем грузить ESP?! Или вы думаете, что обмен данными приостановится, пока вы зажигаете или тушите светодиод? Кому эта "красота" нужна?

Ссылка на комментарий
Поделиться на другие сайты

5 минут назад, 11den11 сказал:

digitalwrite() 240 ... 480 напротив GPIO.out_w1ts 2...3 такта..... gpio_set_level(PIN, value) 80 до150.....
Какая разница за сколько?

Такая, что он вполне может успевать и то и то.

Цитата

 

Вы херите данные!!! Зачем?

Но это не точно.

Цитата

 

Не легче светодиоды прямиком на UART запаять, чем грузить ESP?!

Он для этого явно не предназначен, вот это как раз костылище.

Цитата

 

Или вы думаете, что обмен данными приостановится, пока вы зажигаете или тушите светодиод?

А для чего нам буферы нужны? Не для этого? Может пока идёт чтение буфера блютус или его запись в уарт - обмен приостанавливается?

Цитата

Кому эта "красота" нужна?

Мне.

 

В целом - изначальный код был взят из примеров работы ESP32, про какой-то функционал или оптимизацию там речи не шло. Если уже упарываться - можно и в прерывания, и в DMA пойти, и явно не в Ардуине писать. Но раз мы тут страдаем хернёй... ))

Ссылка на комментарий
Поделиться на другие сайты

И где видно, что в ESP32 используются digitalWrite(), pinmode()....) ? Зачем тогда работать с ESP? Берем мегу и вперед... Пора уже забыть AVR, работая с ESP. 

11 минут назад, Drexxter сказал:

Он для этого явно не предназначен, вот это как раз костылище.

Что не предназначено? Это такие же GPIO, как и все остальные. Не мешайте MCU работать! Если ESP и выполняет ваши прихоти, это абсолютно не значит, что ему это добавляет охоту свами иметь дело. 

16 минут назад, Drexxter сказал:

А для чего нам буферы нужны? Не для этого? Может пока идёт чтение буфера блютус или его запись в уарт - обмен приостанавливается?

Понятно..., тема закрыта....

Ссылка на комментарий
Поделиться на другие сайты

Ссылка на комментарий
Поделиться на другие сайты

По скорости, светодиодам и прочему. Чтение прошивки 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 сказал:

Понятно..., тема закрыта....

Не пойму, зачем ты лезешь, если сам до конца не понимаешь, да и ничего толкового по теме не говоришь? Чисто "поумничать"?

Ссылка на комментарий
Поделиться на другие сайты

С обсуждением кода еспешки действительно можно перехать в тему установки модуля.... так как здесь народу не интересно все ж ждут готового решения)))

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.

 

 

Ссылка на комментарий
Поделиться на другие сайты

Ну не сокращает, это погрешность измерений имхо. Тут ещё +/- связь, потери. Блютус не идеален..

То, что выдавали нейросети - или не компилируется, или не работает как надо )) Раз 5 попробовал, стал писать сам )

Ссылка на комментарий
Поделиться на другие сайты

32 минуты назад, Drexxter сказал:

То, что выдавали нейросети - или не компилируется, или не работает как надо

Есть такое. Указываешь на проблемму и она переписывает код и проверяет ошибки. Ну и кто в коде шарит сам и поправит))

Когда сам пишешь тоже не с первого раза работает)))

Ссылка на комментарий
Поделиться на другие сайты

22 часа назад, Drexxter сказал:

Китай Bluetooth 2 LED gpio MOD1 - 5:56

Реально такая разница по времени с вашим же "Китай Bluetooth 2 LED gpio direct - 9:21"?

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Valery63 сказал:

Реально такая разница по времени

Верно. Но что там как - не расскажу. Самой по себе инфы что оптимизировать возможно - имхо достаточно 😉

Пусть вон 11den11 свой код выкладывает. ))

Ссылка на комментарий
Поделиться на другие сайты

Кто может сказать? Почему не подключается к блютуз на программе с телефона на андройд, а на ноуте через блютуз все подключается и все работает. Версия программ везде 2.21.32. Версия китайматика и блютуза 111788.

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, STEEP сказал:

Кто может сказать? Почему не подключается к блютуз на программе с телефона на андройд, а на ноуте через блютуз все подключается и все работает. Версия программ везде 2.21.32. Версия китайматика и блютуза 111788.

Геолокацию включите на телефоне

Ссылка на комментарий
Поделиться на другие сайты

6 часов назад, Oleg123q сказал:

Кто может прошить китайский клон по удаленки в личные сообщения напишите 

наберешь нужную репутацию, тогда прошьем без проблем!

Ссылка на комментарий
Поделиться на другие сайты

В 14.04.2025 в 17:58, deman-s сказал:

Здравствуйте исходник дать не могу 

Поменяйте пожалуйста номер на 111788 - перфекционисты с 32й версией заждались 😅

Ссылка на комментарий
Поделиться на другие сайты

В 21.04.2025 в 14:03, Oleg123q сказал:

Кто может прошить китайский клон по удаленки в личные сообщения напишите 

Зачем вам удаленно, инструкций как это сделать самому валом. Тем более у вас я так понимаю интерфейс для прошивки есть.

Ссылка на комментарий
Поделиться на другие сайты

Может кто уже и ставил, не видел в теме, может недосмотрел, поставил модуль блютуз на оригинальный сканматик 2 (прошивка 2.21.35) . Так, как разводка платы оригинального адаптера отличается от китайского см-2, кинул провода подключения к плате навесным. Все работает, номер блютуз модуля А78730 не менял под номер ориг прибора.

20250421_155643.jpg

20250421_155647.jpg

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, paleoha сказал:

Может кто уже и ставил, не видел в теме, может недосмотрел, поставил модуль блютуз на оригинальный сканматик 2 (прошивка 2.21.35) . Так, как разводка платы оригинального адаптера отличается от китайского см-2, кинул провода подключения к плате навесным. Все работает, номер блютуз модуля А78730 не менял под номер ориг прибора.

20250421_155643.jpg

20250421_155647.jpg

Чем плата отличается от оригинала все один в один

20240507_235357.jpg

Ссылка на комментарий
Поделиться на другие сайты

Там не такая плата. Район блютуз модуля совсем не совпадает с китайматиком. Модуль LMX9838SB.

 

Screenshot_20250422_232425_Viber.jpg

Screenshot_20250422_232419_Viber.jpg

Screenshot_20250422_232231_Viber.jpg

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   1 пользователь онлайн

×
  • Создать...