Проблема с получением данных HC-06

Я подключил 2 модуля BT HC-05 и HC-06. Когда я что-то пишу через Serial Monitor и пересылаю с HC-05 на HC-06, все работает хорошо. Но когда я отправляю непрерывные данные через цикл, HC-06 получает только определенное количество, а затем просто останавливается! Это из-за БТ модуля или еще что-то? Мой код для HC-05:

#include <SoftwareSerial.h>
SoftwareSerial BTserial(2, 3); 
void setup() 
{
    Serial.begin(9600);
    BTserial.begin(38400);
}

void loop()
{
        BTserial.write('1');
}

Код для HC-06:

#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3);
void setup() 
{
    Serial.begin(9600);
    BTSerial.begin(9600);
}
void loop()
{
if (BTSerial.available())
    Serial.write(BTSerial.read());
}

Хорошая скорость передачи данных. Спасибо!

, 👍1

Обсуждение

есть ли шанс, что вы отправляете больше, чем может выдержать принимающая сторона, учитывая 4-кратную разницу в скорости передачи?, @Chris Combs

Ну, во-первых, в HC05 скорость передачи была 9600, но данные все были повреждены. Я изменил скорость передачи данных в AT+UART на 38400 и так же оставил в настройках, и только после этого полученные данные стали корректными., @Ieva Kriščiūnaitė


1 ответ


Лучший ответ:

0

Я думаю, у вас две проблемы:

  • Сначала о показанном скетче: я не думаю, что скорость передачи данных хорошая. В вашем коде HC-05 (отправитель) вы используете BTserial.write('1'); без какой-либо задержки или другого кода, поэтому это будет работать очень быстро, поэтому SoftwareSerial интерфейс почти полностью занят. Вы отправляете почти на максимальной скорости, которую вы можете получить с 38400 бод. На принимающей стороне вы используете скорость 9600 бод, что значительно медленнее, чем 38400 бод. Как HC-06 должен передавать все данные, которые он получает, на Arduino, когда вы используете только 9600 бод, а данные приходят со скоростью 38400 бод? Это не может работать. Вы должны настроить HC-05 и HC-06 на использование одной и той же скорости передачи данных, чтобы этого не произошло. Или - если вы действительно не хотите - вы можете ограничить общую скорость, с которой вы отправляете, просто отправляя меньше данных в единицу времени (отправляя данные медленнее, но с той же скоростью, что и раньше). Это предотвратит переполнение HC-06 данными. (Также может быть ограничение на скорость отправки данных через HC-05, но я не проверял это). В общем, делать общение полностью без тормоза скорости — не очень хорошая идея. Это может навлечь на вас неприятности, о которых вы обычно не хотите думать.

  • Во-вторых: В своем комментарии вы написали, что пытались изменить скорость передачи данных, но получили искаженные данные. Поскольку вы не описали больше, мы не можем много сказать об этом. Но искаженные данные — это нормальный симптом неправильной скорости передачи данных. Таким образом, кажется, что вы не изменили скорость передачи данных успешно. Я бы посоветовал вам еще раз изучить это и попытаться успешно изменить скорость передачи данных. Это возможно, и в Интернете есть много руководств и кодов, которые показывают, как это делается. (Когда у вас снова возникнут проблемы с этим, вы можете задать вопрос по этой конкретной проблеме, включая всю соответствующую информацию)

,

Везде я изменил скорость передачи данных на 9600. Клянусь Богом, я пробовал это раньше, это не сработало :D Но теперь я попробовал это снова, также включил задержку (10), и все работает как шарм, большое спасибо!, @Ieva Kriščiūnaitė