Плохо отформатированные символы с использованием Bluetooth-модуля JDY-30
У меня есть Bluetooth-модуль JDY-30, и он подключен следующим образом (за исключением использования Arduino Uno):
Он работает, но мне нужно использовать его со скоростью 115200 бод вместо стандартной 9600. У меня тоже так работает. Вот код:
#include <SoftwareSerial.h>
SoftwareSerial mySerial (2, 3); // RX, TX
// state | RXD | TXD | GND | VCC | EN
void setup () {
mySerial.begin(115200);
Serial.begin(9600);
Serial.println("Enter AT commands:");
}
void loop() {
while (mySerial.available()) {
delay(10);
Serial.write(mySerial.read());
delay(10);
}
while (Serial.available()) {
mySerial.write(Serial.read());
}
}
Но когда я что-то печатаю, я часто получаю плохо отформатированные символы.
Некоторые примеры:
16:32:33.212 --> +VERSION=Прошивка V3.0.6,Bluetooth V4.0 L⸮
16:32:38,990 -> +VERSION=Прошивка V3.0.6,Bluetooth V4.0 LE
подробнее:
16:33:27.144 --> +NAME=CC61-A
16:33:30.054 --> +NAME=CC41-A
Если я также использую скорость 115200 бод для Arduino, тогда все становится еще хуже.
Есть ли решение для этого?
Подробнее о JDY-30 см. здесь: http://myosuploads3.banggood.com/products/20181203/20181203214419JDY-30- SPP-Bluetooth-Module.pdf
@clankill3r, 👍-1
Обсуждение1 ответ
Как отметил @Majenko:
Невозможно надежно получить с помощью SoftwareSerial на 115200 бод. UNO слишком медленный для этого.
Я получил результаты, которые были намного лучше, если сначала создать строку при чтении, а затем, когда у нас есть строка, отправить ее. Вместо того, чтобы отправлять то, что мы читаем все время.
Например, когда я попробовал AT+VERSION
сейчас, мне потребовалось 16 попыток, чтобы получить неверный ответ, и только один символ из 42 был неверным в тот раз.
#include <SoftwareSerial.h>
SoftwareSerial mySerial (2, 3); // RX, TX
// state | RXD | TXD | GND | VCC | EN
void setup () {
mySerial.begin(115200);
Serial.begin(115200);
Serial.println("Enter AT commands:");
}
void loop() {
String input_string = "";
while (mySerial.available()) {
input_string += (char)mySerial.read();
}
if (input_string != "") {
Serial.write(input_string.c_str());
}
while (Serial.available()) {
mySerial.write(Serial.read());
}
}
- Отправка целого числа> 1 байта с Android на Arduino через последовательный порт
- Serial печатается дважды?
- ПК не может получить доступ к порту HC-06 Bluetooth COM
- Как интерпретировать последовательные данные, полученные модулем Bluetooth
- Возможно ли использование двух модулей с последовательным интерфейсом на одном Arduino Uno?
- модуль Bluetooth HC-05; два последовательных порта, COM4 и COM5
- HC06 правильная скорость передачи данных, но отсутствуют символы / нет AT-команд
- Как использовать HM-10 в качестве клиента и отправлять сообщения конкретным службам/характеристикам?
Невозможно надежно получить с помощью SoftwareSerial на скорости 115200 бод. UNO слишком медленная для этого., @Majenko
Кроме того, логика 3,3 В модуля Bluetooth находится прямо на ВЫСОКОМ пороге логики 5 В Arduino. Существует небольшой предел для ошибки, что делает его очень подверженным шуму., @Majenko
@ Маженко, как насчет письма, это надежно? Меня не так волнует чтение., @clankill3r
Писать хорошо, да. В этой ситуации Arduino контролирует поток, поэтому скорость менее критична., @Majenko