#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 байт).
Рабочая версия сгенерированная ИИ осталось только потестить)))