Не работает блютуз модуль

Ictic_Step
Offline
Зарегистрирован: 15.07.2019

Здраствуйте, с блютуз работаю в первый раз, по-этому задам свой вопрос здесь. Купил вот-такой модуль: https://ru.aliexpress.com/item/32523867394.html?spm=a2g0s.9042311.0.0.24cb33edogaRCl и пытаюсь его подключить к Wavgat плате, но почему-то ничего не работает. Подключил вроде правильно: GND - GND, RXD - RX, TXD - TX. Питание пробовал давать и 3.3 Вольт и 5 - без изминений. Пробовал грузить примеры из интернета - результата ноль, по-этому решил протестировать на вот-таком скетче:

void setup(){
  Serial.begin(9600);
}
void loop(){
  if (Serial.available()){
    char temp = Serial.read();
    Serial.println();
  }
}

Может где-то в нём ошибка? Помогите, пожалуйста.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Какие именно примеры?

Как Вы думаете сами, что делает эта программа?

Что Вы ожидаете от неё получить?

Для чего нужна переменная temp???

nik182
Offline
Зарегистрирован: 04.05.2015

Ну начнём с того, что необходимо соединять Rx-Tx : приемник с передатчиком.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ictic_Step пишет:
Подключил вроде правильно: GND - GND, RXD - RX, TXD - TX.
Кто Вам сказал, что это правильно? Подойдите к нему, плюньте в рожу, а потом пересоедините накрест  RXD-ТХ, TXD-RX.

Ictic_Step
Offline
Зарегистрирован: 15.07.2019

ЕвгенийП пишет:

Ictic_Step пишет:
Подключил вроде правильно: GND - GND, RXD - RX, TXD - TX.
Кто Вам сказал, что это правильно? Подойдите к нему, плюньте в рожу, а потом пересоедините накрест  RXD-ТХ, TXD-RX.

Да, точно, что-то вчера глюк поймал. И самое главное: соединил правильно, а здесь написал не так. Вообщем соединил навхрест как и нада: RXD-ТХ, TXD-RX, просто опечатался здесь.

Ictic_Step
Offline
Зарегистрирован: 15.07.2019

inspiritus пишет:

Какие именно примеры?

int val;
int LED = 13;
void setup()
{
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
}
void loop()
{
  if (Serial.available())
  {
    val = Serial.read();
    // При символе "1" включаем светодиод
    if (val == '1')
    {
      digitalWrite(LED, HIGH);
    }
    // При символе "0" выключаем светодиод
    if ( val == '0')
    {
      digitalWrite(LED, LOW);
    }
  }
}

inspiritus пишет:

Как Вы думаете сами, что делает эта программа?

Что Вы ожидаете от неё получить?

Ожидаю, что смогу подключится с блютуз терминала с андроид устройства и всё, что я отправлю с телефона отобразится в мониторе порта.

inspiritus пишет:

Для чего нужна переменная temp???

Спасибо, когда дочитал до этого момента, то понял, что я только читаю в переменную, а нигде ничего не вывожу.

Ictic_Step
Offline
Зарегистрирован: 15.07.2019

Ictic_Step]</p> <p>[quote=inspiritus пишет:

Какие именно примеры?

int val;
int LED = 13;
void setup()
{
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
}
void loop()
{
  if (Serial.available())
  {
    val = Serial.read();
    // При символе "1" включаем светодиод
    if (val == '1')
    {
      digitalWrite(LED, HIGH);
    }
    // При символе "0" выключаем светодиод
    if ( val == '0')
    {
      digitalWrite(LED, LOW);
    }
  }
}

inspiritus пишет:

Как Вы думаете сами, что делает эта программа?

Что Вы ожидаете от неё получить?

Ожидаю, что смогу подключится с блютуз терминала с андроид устройства и всё, что я отправлю с телефона отобразится в мониторе порта.

inspiritus пишет:

Для чего нужна переменная temp???

Спасибо, когда дочитал до этого момента, то понял, что я только читаю в переменную, а нигде ничего не вывожу. А переменную добавил, ибо сомневался что будет работать такая конструкция:

Serial.println(Serial.read());

Исправил скетч и теперь он такой:

void setup(){
  Serial.begin(9600);
}
void loop(){
  if (Serial.available()){
    char temp = Serial.read();
    Serial.println(temp);
  }
}

Но всё равно почему-то не работает. С телефона подключился, данные отправляю, а в мониторе порта чисто.

Rostislav_lv
Offline
Зарегистрирован: 12.02.2019

Во время загрузки скетча необходимо что бы Bluetooth модуль был отключен от arduino. В противном случае скетч не запишется, потому что связь с Bluetooth модулем происходит по одному и томуже порту RX и TX, что и USB.

Желательно в качестве источника питания для arduino использовать не USB, а внешний Блок питания

Ictic_Step
Offline
Зарегистрирован: 15.07.2019

Rostislav_lv пишет:

Во время загрузки скетча необходимо что бы Bluetooth модуль был отключен от arduino. В противном случае скетч не запишется, потому что связь с Bluetooth модулем происходит по одному и томуже порту RX и TX, что и USB.

Ну это я знаю, я отключаю модуль и скетч заливается нормально, а затем подключаю модуль обратно.

Rostislav_lv пишет:

Желательно в качестве источника питания для arduino использовать не USB, а внешний Блок питания

Только что подключил внешний источник питания - изменений ноль.

 

Я думал может у меня модуль бракованый, но проверка показала, что это не так: я соединил RXD с TXD и модуль дублировал сообщения с андроид-устройства, возращая их обратно в терминал. Также грешил на то, что не выводится в Serial из-за того, что модуль сам использует его для коммуникации, но если убрать проверку 

if (Serial.available())

то терминал на телефоне и монитор порта на ПК просто будут постоянно получать знак вопроса, как неопознаный символ.

После этого я переписал скетч, чтобы выводить символ полученый по блютузу на lcd, но экран чистый, вне зависимости того, отправляю я что-то с терминала или нет. Вот собственно новый скетч:

#include <LiquidCrystal_I2C.h>//библиотека для LCD
LiquidCrystal_I2C lcd(0x27,16,2);//LCD-экран

void setup(){
  Serial.begin(9600);
  lcd.init();//инициализация дисплея
  lcd.backlight();// Включаем подсветку дисплея
  lcd.setCursor(0,0);
}

void loop(){
  if (Serial.available()){//если есть что читать
    byte temp = Serial.read();//читаем один символ
    lcd.clear();//очищаем дисплей
    lcd.print(temp);//выводим символ
    delay(100);//делей, чтобы не допускать большое кол-во запросов к LCD подряд
  }
}

 

Ictic_Step
Offline
Зарегистрирован: 15.07.2019

А может есть еще какие библиотеки для блютуз модуля? Я просто уже не знаю что мне делать: весь проект уже по-сути готов и осталось лишь последний модуль подключить и ничего не получется.

nik182
Offline
Зарегистрирован: 04.05.2015

Если ардуина работает модуль работает то может быть скорость не та? Не 9600?

gfx125
Offline
Зарегистрирован: 27.05.2017

А может здесь собака порылась?

Ictic_Step пишет:

пытаюсь его подключить к Wavgat плате,

Ictic_Step
Offline
Зарегистрирован: 15.07.2019

nik182 пишет:
Если ардуина работает модуль работает то может быть скорость не та? Не 9600?

Перепробовал все возможные скорости - ничего не меняется. Да и на странице модуля на али пишет, что скорость 9600, но спасибо за мысль.

Ictic_Step
Offline
Зарегистрирован: 15.07.2019

gfx125 пишет:

А может здесь собака порылась?

Ictic_Step пишет:

пытаюсь его подключить к Wavgat плате,

Не очень понял шутку о собаке, но я весь проект на ней сделал и и всё отлично работает. Остались последние штрихи - настроить управление через блютуз.

nik182
Offline
Зарегистрирован: 04.05.2015

Для начала. Загрузить в плату скеч простого возврата символа нажатой кнопки компьютера в мониторе. Соединить землю платы с землёй модуля. Тх платы с Rx модуля. Тх модуля не подключать. В мониторе компа и в терминале андроида должны получать одни и те же символы.

Ictic_Step
Offline
Зарегистрирован: 15.07.2019

nik182 пишет:
Для начала. Загрузить в плату скеч простого возврата символа нажатой кнопки компьютера в мониторе. Соединить землю платы с землёй модуля. Тх платы с Rx модуля. Тх модуля не подключать. В мониторе компа и в терминале андроида должны получать одни и те же символы.

Сделал всё как вы говорили - если я отправлю что-то в монитор порта с Arduino IDE, то получаю по-символьно эти данные в мониторе порта и в блютуз-терминале на андроиде. При любых других раскладах ничего не работает. Вот скетч, что я использовал:

void setup(){
  Serial.begin(9600);
}

void loop(){
  if (Serial.available()){//если есть что читать
    char temp = Serial.read();//читаем один символ
    Serial.println(temp);
  }
}

 

nik182
Offline
Зарегистрирован: 04.05.2015

Т.е. скорость правильная и плата выдаёт понятный для модуля сигнал. Проблема отправить сигнал с модуля на плату. У меня нет Wavgat. Я не знаю как конвертор USB-TTL на плате подключён к МК. В обычной нане Tx конвертора подключён к Rx МК через резистор 1к и Тх конвертора не мешает присоединять к ноге Тх МК другие модули. Если модуль присоеденить и посмотреть осцилографом сигнал на ноге МК то у наны видны импульсы от нуля до +5 вольт. 

Если сейчас соединить Тх модуля и Rx платы будут ли проходить сигналы от компьютера? У наны не проходят от компьютера и проходят от модуля. Т.е. Если послать символ с андроида, то отклик есть и на андроиде и на компе. Если послать с компа отклика нет. Тх модуля не даёт пройти сигналу от Тх компа через 1к резистор. А как у Вас?  

Ictic_Step
Offline
Зарегистрирован: 15.07.2019

nik182 пишет:

Т.е. скорость правильная и плата выдаёт понятный для модуля сигнал. Проблема отправить сигнал с модуля на плату. У меня нет Wavgat. Я не знаю как конвертор USB-TTL на плате подключён к МК. В обычной нане Tx конвертора подключён к Rx МК через резистор 1к и Тх конвертора не мешает присоединять к ноге Тх МК другие модули. Если модуль присоеденить и посмотреть осцилографом сигнал на ноге МК то у наны видны импульсы от нуля до +5 вольт. 

Если сейчас соединить Тх модуля и Rx платы будут ли проходить сигналы от компьютера? У наны не проходят от компьютера и проходят от модуля. Т.е. Если послать символ с андроида, то отклик есть и на андроиде и на компе. Если послать с компа отклика нет. Тх модуля не даёт пройти сигналу от Тх компа через 1к резистор. А как у Вас?  

Ну замерительных приборов, к сожалению, сейчас никаких не имею, но если подключить и RX и TX, то сигнал с андроида не проходит вообще, а если отправлять с компа, то в мониторе порта просто выдает знак вопроса, вне зависимости от введённого символа.

Ictic_Step
Offline
Зарегистрирован: 15.07.2019

Кстати заметил, что если отправлять больше одного символа за раз, то отображются в мониторе порта совершенно рандомные символы, как при збои кодировки.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

За других не скажу, а у WavGat Nano неправильно подключен usart к входным пинам платы.  Как вариант решения там есть ремаппинг Rx и Tx на другие пины :)

Ictic_Step
Offline
Зарегистрирован: 15.07.2019

dimax пишет:

За других не скажу, а у WavGat Nano неправильно подключен usart к входным пинам платы.  Как вариант решения там есть ремаппинг Rx и Tx на другие пины :)

Ну у wavgat uno r3(плата, которую я использую) тоже есть ремаппинг, но я пробовал тыкать в эти дополнительные пины и всё равно ничего не меняется.

nik182
Offline
Зарегистрирован: 04.05.2015

Ну а перерезать дорожку на плате от Tx 340 к МК так, что бы можно было восстановить или замыкать на время прошивки? Или в разрыв дорожки впаять 1к резистор? 

Ictic_Step
Offline
Зарегистрирован: 15.07.2019

nik182 пишет:

Ну а перерезать дорожку на плате от Tx 340 к МК так, что бы можно было восстановить или замыкать на время прошивки? Или в разрыв дорожки впаять 1к резистор? 

Что-то не очень уловил мысль. Плата у меня прошивается нормально - я просто отсоединяю блютуз модуль на время заливки скетча. А на счёт таких манипуляций, то мой опыт, умения и пряморукость в один голос орут, что после этого у меня еще й то, что уже работает перестанет выполнять свои функции...

gfx125
Offline
Зарегистрирован: 27.05.2017

А через softwareserial не пробовали подключать?

Ictic_Step
Offline
Зарегистрирован: 15.07.2019

gfx125 пишет:
А через softwareserial не пробовали подключать?

А вы думаете если на аппаратном уровне ничего не работает, то всё станет функциональным програмном? Я уже начинаю думать, что проблема именно в пине RX на плате. Я уже думаю чем бы заменить ввод информации, но пока ничего в голову не приходит.

nik182
Offline
Зарегистрирован: 04.05.2015

Мысль в том,что:

dimax пишет:

За других не скажу, а у WavGat Nano неправильно подключен usart к входным пинам платы...

восстановить правильное подключение. Вставить резистор 1 кОм между выходом м/с CH340G и МК. Показан красной стрелкой как должно быть.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Добавил схему разводки USART в теме Обзор клона меги328 -LGT8F328P  (пост #1)

Matthew_MMA
Offline
Зарегистрирован: 29.03.2020

Ictic_Step пишет:

Здраствуйте, с блютуз работаю в первый раз, по-этому задам свой вопрос здесь. Купил вот-такой модуль: https://ru.aliexpress.com/item/32523867394.html?spm=a2g0s.9042311.0.0.24cb33edogaRCl и пытаюсь его подключить к Wavgat плате, но почему-то ничего не работает. Подключил вроде правильно: GND - GND, RXD - RX, TXD - TX. Питание пробовал давать и 3.3 Вольт и 5 - без изминений. Пробовал грузить примеры из интернета - результата ноль, по-этому решил протестировать на вот-таком скетче:

void setup(){
  Serial.begin(9600);
}
void loop(){
  if (Serial.available()){
    char temp = Serial.read();
    Serial.println();
  }
}

Может где-то в нём ошибка? Помогите, пожалуйста.

Тема старая но все же. Надо попробывать замкнуть на ардуино тх rx и проверить вернётся ли знак в ком порт, если нет, то нужно использовать библиотеки для виртуальных портов (SoftwareSerial).