Bluetooth модуль ZS-040
Bluetooth — популярная технология передачи данных, которую знают все, еще недавно мы передавали свои фотографии и видео ролики с телефона на телефон, но сейчас с приходом глобальной паутины и облачных технологий почти в каждый дом, необходимость в этом сошла на-нет. Популярность же bluetooth технологии тем не менее не закончилась, ее простота и надежность нашла себе новое применение. В данный момент ее используют сотни различных устройств, от беспроводных клавиатур до наушников, от колонок до весов, от пультов до дронов. Именно по этой причине найти современный телефон без поддержки технологии Bluetooth почти невозможно. Естественно данная технология не обошла себя и в области робототехники и конструирования, за небольшой промежуток времени друзья из Поднебесной выпустили несколько копеечных модулей для подключения их к различным микроконтроллерам, в том числе и к микроконтроллерам линейке Arduino. В данной же статье мы поговорим об одном из таких модулей, а именно о Bluetooth модуле ZS-040.
Описание
Bluetooth модуль ZS-040 состоит из двух печатных плат спаянных вместе:
- Универсальный заводской bluetooth модуль на микросхеме CSR BC417.
- Адаптер упрощающий подключение заводского модуля к различным микроконтроллерам.
Заводской модуль с микросхемой CSR BC417.
- Основная плата это стандартный заводской модуль который используется в тысячах разных устройств. Основой заводского модуля служит микросхема BC417 (BC417143B) [datasheet] компании CSR (Cambridge Silicon Radio). Модуль с завода прошит и имеет базовый функционал для работы с ним. Модуль поддерживает технологию Bluetooth версии 2.0 со скоростью передачи данных до 3 Мбит/сек.
- Вторая же плата это простой адаптер для более удобного подключения основного модуля к различным микроконтроллерам типа Arduino, Raspberry PI и так далее. Второй модуль содержит в себе стабилизатор напряжения на 3.3В, защиту от переполюсовки и в некоторых случаях кнопку. Именно этот адаптер и называется ZS-040. Как правило все в месте имеет название HC-05 или HC-06 в зависимости от конфигурации и режима работы.
Подключение
Подключается модуль к Arduino довольно просто (смотри таблицу или схему подключения снизу). Питание модуля осуществляется от 5В линии Arduino (Так как адаптер содержит стабилизатор напряжения на 3.3В подключать модуль от линии 3.3В — нельзя). Линия передачи (TXD) подключается напрямую к одному из портов Arduino, а вот линию приема (RXD) необходимо подключать через делитель напряжения, так как нам надо преобразовать 5В сигналы от Arduino в 3.3В для модуля. Выполняется это двумя резисторами в 1 и 2 кОм-а. На самом деле модуль стерпит и не выйдет из строя и от сигналов в 5В. Тем не менее это скажется на его сроке службы. По этому использовать делитель напряжения строго рекомендуется.
Пример
// Подключаем библиотеку SoftwareSerial #include "SoftwareSerial.h" // Создаем класс BTserial для работы с bluetooth модулем. SoftwareSerial BTserial(8, 9); // порт RX, порт TX void setup() < // Настраиваем скорость передачи данных. Serial.begin(9600); BTserial.begin(9600); // По умолчанию 9600 бот. >void loop() < // Получаем данные от bluetooth модуля и передаем их в монитор порта. if (BTserial.available()) < Serial.write(BTserial.read()); >// Получаем данные от монитора порта и передаем их в bluetooth модуль. if (Serial.available()) < BTserial.write(Serial.read()); >>
В данном примере мы передаем данные из монитора порта в bluetooth модуль и обратно.
Проверка связи
Для проверки нашего скетча мы воспользуемся телефоном и установленным на него приложением. Лично я использую Android телефон и приложение «Serial Bluetooth Terminal». Скачать приложение вы можете в Play Маркете.
Если по какой либо причине у вас данное приложение не заработает или у вас телефон с другой операционной системой не растраивайтесь, подобных приложений десятки на всех платформах, воспользуйтесь любым из них, для этого в поиске напишите следующий запрос «Bluetooth Terminal» и магазин предложит вам с десяток других приложений.
Теперь нам надо перейти в настройки телефона и найти там пункт для работы с Bluetooth устройствами. Включить Bluetooth если он был выключен и подождать пока ваш телефон найдет новое устройство. У меня Bluetooth модуль появился под названием HC-06. Выбираем его и вводим пароль. По умолчанию пароль 1234 или 0000. Если по какой либо причине пароли не подходят попробуйте другие простейшие пароли вроде 1111, 5555 и тд.
Теперь запускаем наше приложение Serial Bluetooth Terminal. Открываем выпадающий список и переходим в меню «Devices». В списке выбираем наш модуль HC-06 и возвращаемся на главное окно (Тап по выпадающему списку и далее по меню Terminal). В верхнем правом углу нажимаем на кнопку соединиться (Значок двух коннекторов). Все. передаем данные из приложения в монитор порта и обратно. Ниже я сделал несколько скриншотов для наглядности.
AT команды
Как я упомянул ранее наш bluetooth модуль имеет базовую прошивку, а это значит что его настройки можно менять. Для этого существуют AT команды, ввод которых изменяет наименование bluetooth модуля, пароль к нему и скорость передачи данных. К сожалению модуль отказывается принимать АТ команды через приложение на телефоне или из монитора порта в режиме передачи данных. Но есть небольшая хитрость. Для этого нам надо подключить bluetooth модуль напрямую к ПК. Для этого необходимо подключить контакты модуля RXD и TXD непосредственно к контактам Arduino (RX и TX), а саму Arduino отключить установив перемычку между портами RST и GND. При этом не важно какой скетч залит в Arduino ведь оно будет отключено нашей перемычкой.
Далее открываем Arduino IDE, запускаем монитор порта и отправляем AT команды в наш модуль. Если по какой либо причине ваш модуль не отвечает на команды, в выпадающих списках снизу необходимо выбрать «Нет конца строки» и скорость передачи данных 9600 бод.
Команда | Ответ | Комментарий | |
---|---|---|---|
AT | OK | Проверка связи. | |
AT+VERSION | hc01.comV2.0 | Версия прошивки bluetooth модуля. | |
AT+NAMEnewName | OKsetname | Задать новое имя bluetooth модулю (newName). | |
AT+PIN6789 | OKsetPIN | Задать новый пароль (6789). | |
AT+BAUD1 | OK1200 | Установить скорость передачи данных 1200 бод. | |
AT+BAUD2 | OK2400 | Установить скорость передачи данных 2400 бод. | |
AT+BAUD3 | OK4800 | Установить скорость передачи данных 4800 бод. | |
AT+BAUD4 | OK9600 | Установить скорость передачи данных 9600 бод. | |
AT+BAUD5 | OK19200 | Установить скорость передачи данных 19200 бод. | |
AT+BAUD6 | OK38400 | Установить скорость передачи данных 38400 бод. | |
AT+BAUD7 | OK57600 | Установить скорость передачи данных 57600 бод. | |
AT+BAUD8 | OK115200 | Установить скорость передачи данных 115200 бод. | |
AT+BAUD9 | OK230400 | Установить скорость передачи данных 230400 бод. | |
AT+BAUDA | OK460800 | Установить скорость передачи данных 460800 бод. | |
AT+BAUDB | OK921600 | Установить скорость передачи данных 921600 бод. | |
AT+BAUDC | OK1382400 | Установить скорость передачи данных 1382400 бод. |
Заключение
Это первая вводная статья посвященная bluetooth модулям. Оставляйте свои комментарии и задавайте ваши вопросы. Ну а у меня на этом все, успех вам и удачи.
Bluetooth модуль HM-10 (ZS-040). Урок 14. Ардуино
Привет! Как известно, все становится лучше, если добавить bluetooth. Поэтому пришло время добавить к нашим проектам bluetooth модуль HM-10. И попробовать управлять схемой на Ардуино через телефон.
В этом уроке мы будем модифицировать схему с rgb светодиодом. Поэтому, посмотрите урок с ней, если уже забыли или пропустили его.
Для того, чтобы выполнить этот урок нам понадобиться
- Ардуино UNO
- Макетная плата
- Перемычки
- 3 Резистора номиналом 220 Ом
- 3 Резистора номиналом 1 кОм
- RGB Светодиод
- Bluetooth модуль HM-10
- Кабель USB
В прошлом уроке мы настроили схему на Ардуино, которая управляется из последовательного порта. Мы записывали в последовательный порт данные через программу на Processing и плата Ардуино управляла цветом на rgb светодиоде.
Теперь заменим Processing программу на bluetooth модуль и программу в телефоне.
Программа и схема
Соберем схему для управления rgb светодиода и добавим в схему bluetooth модуль.
Контакт TXD подключаем напрямую к контакту 8 Ардуино. А RXD подключаем к 9 контакту через делитель напряжения. Используем сопротивление 1 кОм с одной стороны и 2 кОм с другой.
После подключения питания к Ардуино, лампочка на модуле начнет мигать. Значит питание к нему подключено, и, первоначально, все работает правильно.
После этого уже можно попробовать найти его среди других Bluetooth устройств. С помощью компьютера или телефона. В моем случае, он определяется как BT05
Но сначала напишем программу для Ардуино и загрузим на плату.
В программе используем библиотеку для bluetooth. И создадим все переменные, которые понадобятся в будущем.
#include SoftwareSerial BT(8, 9);// Контакты bluetooth модуля. 8 для TXD, 9 для RXD char c = ""; // Переменная для считывания символа из последовательного порта String str = ""; // Переменная для формирования целой строки int rgb[] = ; // Массив контактов rgb светодиода int light = 0; // Переменная для отправки на контакты светодиода int i = 0; // Счетчик цикла для переключения цветов светодиода
В функции setup() настроим основные параметры программы. Включим последовательные порты на ардуино и на bluetooth.
Сразу отправим тестовые сообщения в оба монитора.
Самое интересное будет в цикле loop(). Будем считывать информацию с последовательного порта bluetooth. Считывается только один символ. Поэтому нужно подумать, как считать всю строку и обработать уже ее. Для этого найдем символ перевода строки ‘\n’ . Все, что было до этого символа соберем в одну строку.
Кроме того, мы собираем только цифры, поэтому всю строку можно представить как число. Ограничим это число функцией constrain(), чтобы можно было написать в программе что угодно, но Ардуино записал на пин корректное значение.
С помощью счетчика цикла i будем переключать контакты rgb светодиода и сбрасывать счетчик, когда он будет равен 3.
Не забудем сбросить переменную для формирования строки перед следующим вводом данных.
void loop() < if (BT.available())< // На порту bluetooth есть что считать delay(50); // Задержка между считыванием символов c = BT.read(); // Считываем код символа в переменную типа int if (isDigit(c)) < // Если считана цифра str += (char)c; // символ присоединяем к строке >if (c == '\n') < // Если обнаружен символ конца строки if( i == 3 )// Сбрасываем счетчик на 0 light = constrain(str.toInt(), 0, 255 );// Ограничиваем значени Serial.println(light); // Выводим строку в монитор порта analogWrite(rgb[i], light); // Записываем на контакт светодиода i++; // Переходим к следующему цвету str = ""; // Очищаем строку > > >
Полный текст программы
#include SoftwareSerial BT(8, 9); // Контакты подключения bluetooth модуля. 8 для TXD, 9 для RXD char c = ""; // Переменная для считывания символа из последовательного порта String str = ""; // Переменная для формирования целой строки int rgb[] = ; // Массив контактов rgb светодиода int light = 0; // Переменная для отправки на контакты светодиода int i = 0; // Счетчик цикла для переключения цветов светодиода void setup() < BT.begin(9600); // Инициализация bluetooth последовательного порта Serial.begin(9600); // Инициализация arduino последовательного порта Serial.println("Test for Arduino"); BT.println("Test for Phone"); pinMode(rgb[0], OUTPUT); pinMode(rgb[1], OUTPUT); pinMode(rgb[2], OUTPUT); >void loop() < if (BT.available())< // На последовательном порту bluetooth есть что считать delay(50); // Задержка между считыванием символов c = BT.read(); // Считываем код символа в переменную типа int if (isDigit(c)) < // Если считана цифра str += (char)c; // Конвертируем байт в символ и присоединяем к строке >if (c == '\n') < // Если обнаружен символ конца строки if( i == 3 )// Если счетчик массива больше чем размер массива сбрасываем его на 0 light = constrain(str.toInt(), 0, 255 );// Ограничиваем значение для вывода на контакт Serial.println(light); // Выводим строку в монитор порта как цифру analogWrite(rgb[i], light); // Записываем значение на контакт светодиода i++; // Переходим к следующему цвету str = ""; // Очищаем строку перед следующим вводом > > >
Serial Bluetooth Terminal
Теперь нам понадобиться клиент для Android, который сможет подключиться к последовательному порту через bluetooth. Найдем такое приложение в Play Market.
Найдем наш модуль в меню devices. И попробуем к нему подключиться.
Попробуем подключиться, и если все правильно, то увидим сообщение Connected.
И наконец, отправим на наш модуль команды. На которые должна среагировать программа в Ардуино и изменить цвет rgb светодиода.
Каждая введенная цифра отвечает за свой цвет на rgb светодиоде. Как вы помните, цвета переключаются в цикле. Если на два цвета отправить 0, а на последний 250, то гореть должен только один цвет.
Заключение
Мы научились использовать Bluetooth модуль HM-10. И подключили его к Ардуино. Это дает возможности управлять схемой на Ардуино с помощью программы в телефоне или компьютере без подключенных проводов. Естественно, возможности использовать bluetooth почти не ограничены. Постараемся использовать его чаще в наших проектах.