roboforum.ru

Технический форум по робототехнике.

(Arduino Nano + HC-05) SoftwareSerial скорость больше 9600

(Arduino Nano + HC-05) SoftwareSerial скорость больше 9600

dobrMAN » 08 янв 2015, 22:13

Доброго времени!
Проблема такая, купил Arduino Nano - http://www.ebay.com/itm/181591402576?_trksid=p2059210.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT и Bluetooth HC-05 - http://www.ebay.com/itm/221483899074?_trksid=p2059210.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
Начал эксперименты, о них можно не читать если не возникло вопросов типа, "а это делал?"
Долго мучился с входом в режим настройки (как видно из ссылки, модуль на плате без пина KEY), излазил интернеты и до меня таки дошло, что кнопочка возле ножки EN не с проста... в общем как она работает разобрался (если подать питание с зажатой кнопкой, модуль переходит в режим AT на скорости 38400, а если нажать на кнопку после подачи питания - в режим AT на скорости 9600 при условии что модуль не спарен с другим устройством).
Ну собственно подключил HC-05 к пинам D2(TX от HC-05) и D3(RX от HC-05) так как только они на ARDUINO NANO "can be configured to trigger an interrupt" (хотя учитывая что я чайник, я так и не понял, зачем нужны прерывания.. ну да ладно, разберемся) и приступил к настройке, залив простой скетч типа:
Код: Выделить всёРазвернуть
#include <SoftwareSerial.h>

SoftwareSerial BTSerial(2, 3); // RX | TX

void setup()
{
  //pinMode(9, OUTPUT);  // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode.. На моем модуле нет KEY, зато есть лапка позволяющая выводить БТ из режима энергосбережения (или даже управлять этим режимом, я не разбирался), можно ее повесить на D9, но мне пока не нужно.
  //digitalWrite(9, HIGH);
  Serial.begin(38400);
  BTSerial.begin(38400);  // HC-05 default speed in AT command more
  Serial.println("Enter AT commands:");
}

void loop()
{
char i;
  // Keep reading from HC-05 and send to Arduino Serial Monitor
  if (BTSerial.available()){
    i = BTSerial.read();
    Serial.write(i);
  }

 
  // Keep reading from Arduino Serial Monitor and send to HC-05
  if (Serial.available()){
    BTSerial.write(Serial.read());
  }
}

Естественно сперва на портах была установлена скорость 9600 (которая идет по умолчанию в настройках HC-05) и проверил "переписку" смартфона с компьютером через терминальные программы - все отлично работало. После чего я и привел скетч в данный вид (заменил скорость на 38400).
Переключил БТ в режим команд, путем зажатия кнопки на модуле во время подачи питания (т.е. режим 38400)... и обломился :(
Ни на какие команды он не реагирует.
Долго промучившись (так как я еще не знал всего что знаю сейчас, и про режим на скорости 9600 не знал), я перевел модуль во второй режим команд, на скорости 9600, естественно предварительно поправив скетч.
И вот свершилось, до команд я добрался, начал эксперименты, запорол модуль (ну как запорол, думал придется заказывать и ждать USB-TTL, так как умудрился выставить режим AT+UART=57600,0,1... с которым как оказалось не так то просто работать через Arduino-IDE...
Но нет! Мой вопрос не в этом, с этим я справился. Как не относится к этому посту, но если возникнет желание узнать, опишу.
Так вот, справившись с этой проблемой, я перевел таки HC-05 в режим AT+UART=57600,0,0 и решил наконец то по переписываться между компом и смартфоном...
И облом... вместо того что отсылаю приходят всякие ЕЄ©§©MJLJ#бП§†…Е или вообще ни чего...
Естественно начал тесты с изменением скорости на 38400 и 19200... И опытным путем установил, что модуль полностью исправно работает только на скорости 9600 и частично (отправляет на BT устройство все символы латиницы кроме o и w но ни чего не принимает обратно) на скорости 38400 (по мне так это бред, но я же чайник, может чего не понимаю?)
Ну и в общем долго мучился, в итоге переключил модуль опять в режим "AT+UART=38400,0,0", перекинул модуль на аппаратный serial и залил скетч:
Код: Выделить всёРазвернуть
#include <SoftwareSerial.h>

SoftwareSerial BTSerial(2, 3); // RX | TX

void setup()
{
  //pinMode(9, OUTPUT);  // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode
  //digitalWrite(9, HIGH);
  pinMode(9, OUTPUT);
  digitalWrite(9, HIGH);
  Serial.begin(38400);
  Serial.println("Enter AT commands:");
}

void loop()
{

  Serial.write("1\r\n");
  delay (500);
  Serial.write("2\r\n");
  delay (500);
  Serial.write("ooopppwwwwttt\r\n");
  delay (500);
  Serial.write("Test\r\n");
  delay (2000);
  Serial.flush();

}


И о чудо! Символы o и w успешно передаются... А вот обратную связь проверить не получается, т.к. работает это только при отключенном USB проводе и соответственно монитором порта или другой терминальной программой уже не посмотришь, что там приходит со смартфона (именно по этому и скетч использовал второй, а не первый)....


И собственно вот он сам вопрос:
-Есть ли какое-то объяснение, что HC-05 подключенный к Arduino Nano, не работает на скоростях выше 9600 через SoftwarSerial?
И если ни каких видимых причин нет, то в какую сторону копать, чтобы на простейшем скетче, приведенном ниже и скорости 57600 нормально слалось как из Serial в SoftwareSerial так и обратно?
Код: Выделить всёРазвернуть
#include <SoftwareSerial.h>

SoftwareSerial BTSerial(2, 3); // RX | TX

void setup()
{
  Serial.begin(57600);
  BTSerial.begin(57600);  // HC-05 default speed in AT command more
  Serial.println("Enter AT commands:");
}

void loop()
{
char i;
  // Keep reading from HC-05 and send to Arduino Serial Monitor
  if (BTSerial.available()){
    i = BTSerial.read();
    Serial.write(i);
  }

 
  // Keep reading from Arduino Serial Monitor and send to HC-05
  if (Serial.available()){
    BTSerial.write(Serial.read());
  }
}

Re: (Arduino Nano + HC-05) SoftwareSerial скорость больше 96

elmot » 09 янв 2015, 10:02

конечно есть объяснение. тупенькому процессору ардуины не хватает производительности для работы software serial на нормальной скорости. копать надо в направлении ухода от software serial.

Re: (Arduino Nano + HC-05) SoftwareSerial скорость больше 96

holomrn » 09 янв 2015, 10:09

elmot, это ведь мега328 в ардуине. Откуда там второй уарт? При том что единственный занят под бутлодырь.

Re: (Arduino Nano + HC-05) SoftwareSerial скорость больше 96

elmot » 09 янв 2015, 11:11

Искренне сочувствую, но поделать ничего не могу. Надо либо брать более пропорциональные средства для достижения целей, либо урезать хотелки, либо как-то изголяться. Например, можно перейти на прошивку через программатор и освободить UART от бутлоадера, либо взять другой проц, пожирнее.

Re: (Arduino Nano + HC-05) SoftwareSerial скорость больше 96

dobrMAN » 09 янв 2015, 12:50

Спасибо за ответ!
Значит технически все нормально, т.е. оно так и должно НЕ работать :)
Это и огорчает и радует. Просто я думал что проблема в качестве изготовления девайсов (БТ или Ардуины или обеих плат).
Стало быть все с этим нормально, можно дальше продолжать эксперименты :)

Добавлено спустя 6 минут 35 секунд:
Re: (Arduino Nano + HC-05) SoftwareSerial скорость больше 9600
Еще один вопрос, а есть ли проц пожирнее среди ардуин? Просто Nano работает на частоте 16MHz, и вроде как более "скоростных" ардуин нет?

Re: (Arduino Nano + HC-05) SoftwareSerial скорость больше 96

holomrn » 09 янв 2015, 13:28

ардуйня сама по себе, by design, тормозит.

Re: (Arduino Nano + HC-05) SoftwareSerial скорость больше 96

elmot » 09 янв 2015, 14:22

dobrMAN писал(а):Спасибо за ответ!
Значит технически все нормально, т.е. оно так и должно НЕ работать :)
Это и огорчает и радует. Просто я думал что проблема в качестве изготовления девайсов (БТ или Ардуины или обеих плат).
Стало быть все с этим нормально, можно дальше продолжать эксперименты :)

Добавлено спустя 6 минут 35 секунд:
Re: (Arduino Nano + HC-05) SoftwareSerial скорость больше 9600
Еще один вопрос, а есть ли проц пожирнее среди ардуин? Просто Nano работает на частоте 16MHz, и вроде как более "скоростных" ардуин нет?

Надо взять камень с бОльшим количеством hardware serial и не лохматить бабушку.

Вот за это я и не люблю ардуины.

Re: (Arduino Nano + HC-05) SoftwareSerial скорость больше 96

Dmitry__ » 09 янв 2015, 14:31

че-то дуркуете, rs232 занят иде дуины только в первую сек. после сброса, дальше отдается пользователю. Вот в этой теме есть принципиальная схема дуиносовместимой платы, где используется rs232 и для иде и для чего угодно :)
http://roboforum.ru/forum10/topic14711.html

Re: (Arduino Nano + HC-05) SoftwareSerial скорость больше 96

elmot » 09 янв 2015, 14:33

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

Re: (Arduino Nano + HC-05) SoftwareSerial скорость больше 96

Angel71 » 09 янв 2015, 16:08

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

Re: (Arduino Nano + HC-05) SoftwareSerial скорость больше 96

elmot » 09 янв 2015, 17:41

как-то сигналы TX не оч хорошо суммируются:) это ж не i2с

Re: (Arduino Nano + HC-05) SoftwareSerial скорость больше 96

dobrMAN » 09 янв 2015, 17:42

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

Или я не о том (простите чайника) или ни кто не говорил что HW Serial нет у NANO... Он есть, но если к нему подключить блютуз, то слать МЕЖДУ usb и BT данные не получится, ведь они на одном и том де Serial будут?
Я бы взял свою любимую стмку с тремя портами и прошивалкой и даже глаз бы не скосил на ардуины :-)

Уважаемый elmot так как мне абсолютно фиолетово что ковырять, то можно и мне взять STM, только о них я знаю еще меньше чем об Arduino (учитывая, что про ардуину я практически ни чего еще не знаю, можно прикинуть мой объем знаний об STM :) ). Что вы можете сказать вот о таком звере - http://www.ebay.com/itm/STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-For-Arduino-DHUS-/321569700934?pt=LH_DefaultDomain_0&hash=item4adf0c3c46 ? Сколько у него HW Serial например?
Вообще брал ардуину, чтобы сделать эмулятор ELM327 (адаптера для диагностики автомобиля), т.к. у меня старенькая Subaru и с ELM327 она не дружит, а хочется пользоваться программой Torque...
В принципе для этого хватит моей Ардуинки, т.к. БТ можно подключить к HW Serial, а протокол SSM1 в субару, на сколько я знаю работает на не высоких скоростях, думаю его можно будет обрабатывать через SoftwareSerial... Впрочем до этого далеко мне еще...

А вот помигать лампочками, прикрутить кнопочки, пощелкать релюшками... было бы интересно разными МК :)

Re: (Arduino Nano + HC-05) SoftwareSerial скорость больше 96

Angel71 » 09 янв 2015, 18:13

ну вы определитесь, что нужно в определённый момент, блютуз или юсб. если прям одновременно и то и то, так берёте другую дуню, у которой больше аппаратных уартов. ну или для второго канала связи использовать проводной/беспроводной модуль, у которого интерфейс, допустим spi.
elmot, чтот не припомню проблем. сейчас возьму дуню и попробую ещё раз, может до меня таки дойдёт о чем речь.

Добавлено спустя 17 минут 1 секунду:
Re: (Arduino Nano + HC-05) SoftwareSerial скорость больше 9600
к уно на уарт подкинул ещё один юсб-уар. открыл по терминалу на каждый порт :) с дуни данные приходит на оба терминала. отправляет с терминалов в дуню без всяких проблем.

Re: (Arduino Nano + HC-05) SoftwareSerial скорость больше 96

holomrn » 09 янв 2015, 18:18

Естественно. Они ведь просто разведены на оба набора пинов параллельно.
А ТСу ведь надо мост из одного уарта в другой.

Re: (Arduino Nano + HC-05) SoftwareSerial скорость больше 96

Angel71 » 09 янв 2015, 18:21

есть can с spi интерфейсом. да и пока я здесь не увидел ничего убедительного по воводу необходимости второго аппаратного уарта и битрейта выше 9600.


Rambler\'s Top100 Mail.ru counter