Получение строковых данных через Bluetooth — ESP32

#string #bluetooth #esp32 #arduino-ide

Вопрос:

У меня проблема с получением строковых данных по Bluetooth, а точнее с их последующим использованием.

 #include "BluetoothSerial.h"

String text = "";

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

BluetoothSerial SerialBT;

void setup() {
  Serial.begin(115200);
  SerialBT.begin("ESP32"); //Bluetooth device name
;}

void loop() {
  if (SerialBT.available() > 0) {
    text = SerialBT.readStringUntil('n');
    Serial.println(text);
    if(text == "go") {
       Serial.println("Info");
    }
  }
  delay(20);
}
 

Когда я отправляю что-то в виде строковых данных, SerialBT.println(text); функция работает нормально, но следующая функция if(text == "go") больше не работает.
Две символьные строки не совпадают.

Для обычного сериала все работает нормально.

Как это исправить?

Комментарии:

1. Я бы предположил, что text на самом деле это содержит больше, чем просто «идти», поэтому они не равны. Не могли бы вы попробовать if(text.indexOf("go") > 0) ? Это выполняет поиск go и возвращает позицию в text . Если он не найден, будет возвращен -1

2. Это помогло бы узнать, что на самом деле сравнивается. Напишите некоторый код для вывода каждого символа, text чтобы вы поняли, почему сравнение не удается. Это должно дать вам ваш ответ.

Ответ №1:

Я знал, что Bluetooth отправляет некоторые дополнительные переменные, но я не знал, как их обнаружить и удалить. Но я уже нашел решение.

Во-первых, я использовал text = SerialBT.read(); для обнаружения дополнительного символа. Bluetooth отправляет дополнительный символ в конце строковых данных. Итак, я потом воспользовался text.remove(text.length()-1,1); , и все уже работает правильно.

Завершенный код:

 void loop() {
  if (SerialBT.available() > 0) {
    text = SerialBT.readStringUntil('n');
    text.remove(text.length()-1, 1);
    Serial.println(text);
    if(text == "go") {
      Serial.println("Info");
    }
  }
  delay(20);
}