Arduino.ru
Решил заказать Bluetooth-модуль для Arduino. Нашел на ebay хороший вариант с шилдом, но смущает надпись TTL в названии. В мануале написано — «Мы предоставляем две версии шилда — TTL и RS-232. При попупке обратите внимание на это» (вольный перевод с инглиша). В нем же показана разница — 5В для rs и 3,3В для TTL. Это все отличия или есть что-то еще? Можно ли напрямую цеплять RX — TX с ардуины? В продаже есть только TTL-версия.
Хочется именно этот шилд, так как в нем можно легко (вроде бы) запускать AT режим — подал на пин mode HIGH (или кнопку на нем нажать) и все. А в статье на robocraft запугнули «выниманием микроконтроллера из ардуины» (там самодельный шилд, и этого пина есс-но нету).
RS-232 это диапазон от -12 до +12 вольт, бывает от -5 до +5. Вообще принято считать что просто TTL — от 0 до 5 вольт именно этот диапазон и применяется в дуине, еще стал замечать, что на устройсвах пишут TTL33, TTL3V3, TTL3.3, действительно ли TTL это или нет сказать не могу, но точно это диапазон от 0 до 3.3 вольта, тот шилд на фото скорее всего имеет средства преобразования уровней с 5 на 3.3. Так что однозначно модуль должен быть TTL, но без шилда вам прийдется согласовывать уровни, иначе при прямом подключении к дуине вы можете сжечь модуль.
То есть данный лот мне можно спокойно брать и подключать к 5В? И управлять им через Serial команды? А сами ноги tx и rx можно напрямую подключать (через шилд есс-но)?
без шилда вам прийдется согласовывать уровни, иначе при прямом подключении к дуине вы можете сжечь модуль.
Эти два вывода соеденены между собой. В случаях когда у модуля и дуины разные источники питания не нужно соединять провода земель между собой, так как земли соединены на модуле.
Спасибо за внятные ответы, очень помогли!
Пришел наконец данный шилд (и сама ардуина, уна и клон меги).
Никак не получается заставить его работать. Подключаю — TX к RX Arduino, RX к TX, VCC к 5В, GND к GND. Mode оставляю пустым (пробовал подключать и ставить в LOW, но безрезультатно). Включаю Arduino (со скетчем отсюда, но это неважно). Правый светодиод (красный) начинает моргать (что вроде значит режиможидания), но ни компьютером, не телефонами (Android, SE X10mp и SE Neo V) не обнаруживается. Даже не знаю на что подумать.
Может ли это быть из-за режима (master\slave), и если да, как его изменить (желательно без манипуляций с железом — краем уха слышал что надо мк с уны снимать. страшно).
(Даташит на шилд есть в описании лота по ссылке в верхнем посте, но там ничего полезного я не нашел. )
Для начала попробуйте достучаться к неме через Serial, а уж потом блюпупом.
Пробуйте залитьв дуину пустой скетч
Подцепите его TX к TX дуины, RX к RX. Питание и землю оставте как есть (только вначале залить пустой скетч, а потом так подключать).
Откройте в ArduinoIDE сериал монитор.
Выставти скорость 38400 (дефолтная, если не покатит будете переберать). Рядом со сокростью,выберете возврат каретки «Both NL & CR» (чуть левее скорости).
Наберите AT и нажмите кнопку «Send». Должны увидеть ответ «OK».
Если увидили — читаем User Manual, какие команды доступны, как им рулить . и пытаемся применять.
Или, как вариант, подключить его например на пин 2 ,3
#include SoftwareSerial mySerial(2, 3); void setup() < Serial.begin(57600); mySerial.begin(38400); >void loop()
Ну а дальше тот же самое как в прошлом посте. Толкьо в Serial монторе выставить 57600, а если потребуется «подбирать скорость», то уже не в сериал мониторе ее крутить, а в строке 8
Этот скетч все что приходит на UART (2,3) отправляет в обычный сериал, а что пришло от компа — модулю. Вообщем «програмный» вариант предыдущего поста. Возможно так даже удобней будет. Когда сами будете скетчи писать под модуль.
В Serial — общаетесь с компом, в mySerial — с модулем.
Можно даже, сразу, последней строчкой в setup() добавить
Тогда, если все нормально, первое что вы должны увидеть открыв сериал монитор — ответ модуля «OK».
Молчит. Пробовал и первый и второй варианты. Неужели модуль не рабочий достался?
Заметил еще одну вещь — при первом включении модуля красный св.диод секунды 3 горел ровно, а потом стал мигать (с частотой где-то 1-3 мигания в сек). При последущих включениях такого не было — сразу начинал мигать.
На руках есть мега (клон), может с ней попробовать? (хотя, боюсь, не поможет. )
Попробуйте дуину от внешнего блока запитать, может питани от USB не хватает.
Поберебирайте скорости (не знаю запоминает он выставленную скосроить или нет).
А вообще, сильно похоже что TTL лем они обозвали версию на 3.3V . Страничка 3 даташита, Первая строчка таблицы. «TTL breakout board 3.3V power supply.»
Так что питать его нужно, скорее всего, с 3.3V пина. Нужно ли соглаовывать 3.3V для TX(дуины)->RX модуля — не знаю. В даташите не нашел упоминаний что он толерантен к 5V на RX пине. «По уму» — нужно,
Кстати, модуль питается от 3.3 В, но его линии I/O могут работать и с 5-вольтовой логикой, что позволяет подключать его UART к Arduino без заморочек.
В статье написанно «На плате установлен стабилизатор на 3.3 В, так что можно запитать модуль стандартным для Arduino напряжением 5 В», но речь-то идет про плату которую они смонстрячили (шилд), а не сам модуль.
Если посмотреть на плату, то там кроме собственно регулятора питания с 5v на 3.3V — ничего и нет. Только для этого она и понадобилась им (плюс удобство подключения).
Более того, свой регулятор они, почему-то не использовали
Итак, плата готова, приступим к работе с модулем. Ставим breakout в макетную плату и подключаем следующим образом:
3.3v — к 3.3 В от Arduino
GND — к GND Arduino
RX — к TX Arduino
TX — к RX Arduino
Вообщем не хочу вас огорчать, но. 🙁
Я тоже так думал, но на шилде вроде заметен преобразователь. Плюс я сначала попробовал запитать все это дело от 3,3В ардуинки, и в кач-ве результата получил молчание светодиодов. плюс в лоте написано что это адаптер для ардуино и воткнуто в сенсор шилд (насколько я помню, там преобразователей не стоит. )
Насколько я понял, это сами блюпуп-модули (зеленая маленькая платка сверху) бывают TTL и RS232, а адаптер как раз и призван это устанить и привести к ардуино-совметимому.
Попробую с внешним блоком, но, думаю, дело не в этом — степпер-мотор он удерживал спокойно, а у BT потребление копеечное — макс. 40мА по даташиту.
Хотя, простите, кажись зря я вас пугаю (ну ничего, лучше перебдеть чем недобдеть). Я смотрел сразу в даташит модуля. А на картинке-то шилд. Который действительно, вроде, имеет свой регулятор на 3.3V.
Так что «перебирать скосроит, проверять контакты», Mode куда-нибудь притянуть, не оставлять «болтатся» (попробовать и туда и сюда).
КОгда пробовали програмный вариаент RX,TX не перепутали?
TX шилда на 2 пин дуины, и RX на 3-тий.
Ну с горя можно попробовать поменять RX,TX местами, как бы вы не подключали до этого. Вдруг они подписали RX,TX на модуле имеея ввиду «пины к которым нужно подключить». На знаю насколько такая «перепутка» безопаста, но я регулярно путаю и, пока, ничего не случалось 🙂 Типа «подключил, если не работает попробовал наоборот». Но это «на свой страх и риск».
TX шилда на 2 пин дуины, и RX на 3-тий.
Перепутал :). Залез в исходники SoftwareSerial, нашел в конструкторе receivePin и transmitPin и подключил RX ко второму. Сейчас попробую.
Скорости перебирать пробовал, контакты надо прозвонить.
Перепутал :). Залез в исходники SoftwareSerial, нашел в конструкторе receivePin и transmitPin
Ну дык правильно же нашли 🙂
Первым в конструкторе идет RX, вторым TX
RX- принимать (дуины), значит подключать к нему нужно TX-модуля (отправка).
и подключил RX ко второму. Сейчас попробую.
Ну значить вариант «наоборот» (если китайцы криво подписали) вы уже проверили. 🙂
Нет, все равно ноль реакции. На плате моргнул RX и молчок.
Притянул Mode к HIGH — тоже самое.
Неожиданно пришла от модуля следующая белиберда — «_ý_ý_ý». Это мусор или ответ модуля? Причем это случилось до отправки команды AT.
Неммого смущает то, что св.диод L на 13ноге постоянно горит, но это, если я правильно понял, из-за того что он не инициализирован кк OUTPUT.
Неожиданно пришла от модуля следующая белиберда — «_ý_ý_ý». Это мусор или ответ модуля? Причем это случилось до отправки команды AT.
Может быть мусор (помехи когда пальцами провода трогали), а может ответ но где-то, таки, не совпадают скорости. В сериал мониторе 57600 поставили?
Сделайте, конце Setup() строчку
Убидетесь что саму дуину вы слышете нормально.
Можно даже, сразу, последней строчкой в setup() добавить
Тогда, если все нормально, первое что вы должны увидеть открыв сериал монитор — ответ модуля «OK».
И, кстати, вы этого явно не сделали. Потому что я ошибся нужно mySerial.println(«AT»);
Если бы вы ее добавили, то вы счас жаловались что он ответил не «OK», а «AT». А раз «молчит», значит либо вы не добавили эту строку в Setup либо не слышите саму дуину.
А без mySerial.println(«AT»); он и будет молчать. Чего ему что-то говорить если его ничего не спросили? (если вы руками AT не посылали).
Да, ставлю. Добавил строчку — четкий ответ Ready без кракозябр.
Посылаю руками, через сериал монитор. Сейчас попробую добавить.
Ура, запустилось! Только совсем не так, как Вы написали.
Дело было в следующем: на шилде, помимо пина Mode, есть кнопочка. В даташите написано, что чтобы вогнать модуть в AT режим, нужно подтянуть Mode к HIGH либо нажать кнопку. Я и нажимал, но после включения. А тут черт меня дернул нажать и держать ее ДО подачи питания. И, вуаля — св.диод стал гораздо медленее моргать, и ответ на команду AT есть. Но так же видно и неотвеченный AT, который я по Вашему совету воткнул в setup. Сейчас отконфигурирую и попробую обнаружить, минут через 5 отпишусь.
Все заработало! Спасибо Вам огромное за советы.
Ура, запустилось! Только совсем не так, как Вы написали.
А вам важно что-бы именно «как я написал»?
А тут черт меня дернул нажать и держать ее ДО подачи питания.
Злобно. В даташите про это ничего нет. Да и ценноcсть пина MODE — резко снижает. Ну а как если нужно «на ходу» что-то подстроить поменять? Перегружать модуль что-бы войти в командыный режим? Непонятно. Сомнительно.
ПО идее этот пин тоже цепляется к какому-нибудь цифровому выходу и дается на него digitalWrite(MODE,HIGH) когда нужно порулить модулем, и LOW — для передачи данных.
Может, все-таки, «просто совпало», где-то контакт гулял? (или кнопку сильней нажали).
>Но так же видно и неотвеченный AT
Какой именно который mySerial.println(«AT») или Serial.println(«AT») ? Второй и не должен быть отвечен. Я же сказал что ошибся, это мы не модулю, а компу послали «AT». Модулю посылать mySerial нужно.
А может просто он еще не успел, к тому времени проинициализироватся. Тогда можно delay(3000), например добавить. Типа «подождать», а уж потом слать «AT».