Проблема такая, купил 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());
}
}