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

Scanmatik 2 pro, установка Bluetooth модуля.


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

У меня, наконец дошли руки до запуска блутуза. сначала проверил на прошивке что выложена здесь. все работает стабильно но подтупливает, особенно по сравнению с проводом. Решил что надо как-то распаралеллить нагрузку. В результате родилась следующая прошивка что принципиально другой режим обработки. результат порадовал! интерфейс стал заметно более отзывчивый.
#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() {}

8 часов назад, chipandtun сказал:

Добрый день. Подскажите купил Есп32, прошил, запаял в см2про, комп видит блютуз и подключается, привязал к проге сканматик, блютуз определяется, но при подключении к авто-- нет связи. В чем может быть проблема? 

У меня такое было при плохом контакте одного из 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 (;;) {

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

  • Ответов 100
  • Создана
  • Последний ответ

Топ авторов темы

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

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

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

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

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

Войти

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

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

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
  • Создать...