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 почти не ограничены. Постараемся использовать его чаще в наших проектах.
ZS-040 и Ардуино
На повестке дня – подключение ZS-040 к Ардуино. Мы разберем сферу применения устройства, его базовые параметры, нюансы сборки и т.д.- все, как обычно. Ну и конечно поговорим в целом о том, что представляет собой этот модуль.
Наверное, всем вам уже известны преимущества технологии Bluetooth. Да, это передача информации на небольших расстояниях, быстро и бесплатно, без особых сбоев и дополнительного оборудования ∕ программных приложений. Так вот именно к категории подобных Блютуз-гаджетов относится модуль HC-06. Он построен на базе микрочипа BC417, состоит из двух спаянных вместе плат, имеет кварц на 26 МГц.
Для справки: если говорить о сфере применения таких сенсоров для радиолюбителей, то это в основном телеуправление либо телеметрия.
- питание: 3,3В;
- флеш-память: 8Мб;
- низкое энергопотребление;
- диапазон рабочих температур: -20 . +70 °С;
- габариты: 37х15х3мм.
Он компактен и не займет много места, упрощает подключение к контроллеру.
Заводской модуль выглядит иначе:
Теперь рассмотрим непосредственно подключение Bluetooth-модуль ZS-040 к Arduino. Для реализации несложного проекта будем использовать такие аппаратные компоненты:
- Микроконтроллер Arduino UNO (можно и другие).
- Датчик ZS-040.
- Комплект соединительных проводов.
Для управления рабочим процессом и проверки работоспособности схемы нам понадобится библиотека SoftwareSerial.
// Подключаем библиотеку 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()); >>
Для проверки связи можно в дальнейшем использовать программу Serial Bluetooth Terminal. Она инсталлируется на смартфон и проста в конфигурациях. Запустите ПО, найдите в настройках пункт Bluetooth, включите его и дождитесь взаимосвязи между 2 девайсами.
Для вас мы собрали небольшой гайд по использованию утилиты в скриншотах:
Надеемся, вы справитесь с поставленной задачей! На этом прощаемся! До новых встреч!
Arduino.ru
ELM327, не оригиналы, очень своеобразные устройства. Каждая «модель» со своим характером и набором вредности.
Да,есть на руках 2 elm версии 1.5 и 2
на оба подключается смартфон нормально
реагирует на AT I -выдает версию
пробовал подключиться на смартфон с ZS-040 подключается нормально
1)с версией 2 пишет Fail на этапе AT+Pair и не создает пару для сопряжения
2)с версией 1.5 создает пару,опрашивает нормально имя,но при команде AT+Link та же проблема.
а при запросе статуса AT+state ? пишет постоянно INQUIRING
вроде бы простая вещь по подключению.но застрял и не знаю что с этим делать
En есть, подаю 3.3v чтобы включить режим команд AT
тут еще читал статью по подключению к elm,так там после настройки модуля есть такая строка
«Повторим выдачу АТ-команд в рабочем режиме (после сброса питания):
Видим: HC-05 команды «AT+…» (адресованные HC-05) возвращает, другие AT команды проходят на ELM, соответственно, видим ответы ELM327.»
но я так и не смог добиться так ,чтобы выдавал ZS-040 команды эхом
En есть, подаю 3.3v чтобы включить режим команд AT
Странно, для этого есть пин Key. ZS-040 у меня нет, только HC05. Не думаю, что они настолько сильно отличаются. Для HC05:
Пина Key нет,так же как и кнопки
подключил 3.3 к 34 контакту.результат тот же.
мигание рза в 2 секунды т.е тот же режим АТ
как пришел ,так сразу подключил к телефону и в имени он стоял как нс-05
это первый адаптер,который версии 1.5
который самый нижний нули и единицы это версия 2.0
на версии 1.5 Pair и Bind проходят нормально.
Только нет LINK,ошибка вданном месте и постоянно статус попытка подключения
на версии 2.0 сразу ошибка при BIND
тестирую их по отдельности
Проверил. HC05 как ведомый — смартфон его находит, может подключиться. Удаляю это сопряжение в смартфоне. HC05 как мастер — смартфон его не находит. Т.е. Ваш «HC05» есть ведомый, раз его видно.
Да,проверяю пока на одном,на версии 2.0
Версии 1.5 сейчас нет под рукой
скрин с мак адресами старый,еще при первом тестировании был использован.чтоб имелись под рукой все мак адреса.
в данный момент Hc-05 как мастер,смартфон его не находит.
Если включаю bluetooth смартфона виден только OBD2(но bluetooth выключаю,чтоб не было ошибок)
Если включаю bluetooth смартфона виден только OBD2(но bluetooth выключаю,чтоб не было ошибок)
виден смартфону,принимает комманды как слейв
да.конечно,удаляю,потом нажимаю refresh и он ищет новые устройства.
да,притом и в режим ат команд входит,поэтому меня это и удивляет.
как смартфон легко подключается к elm,а hc-05 нет.
попробовал подключиться к телефону,все подключилось легко
еще попробовал функцию поиска AT + INQ
да.конечно,удаляю,потом нажимаю refresh и он ищет новые устройства.
да,притом и в режим ат команд входит,поэтому меня это и удивляет.
А вообще то, что управляющий питанием пин переводит в AT-режим есть полный бред. Промойте плату. Если подать на En 3.3v на продолжительное время, то светодиод моргает, светит, потух?
Удивляет,то,что HC05 к смартфону коннектится легко и быстро.
Так же как и смартфон к elm.
А вот hc05 к elm не хочет
1)компьютер-arduino uno-hc-05 т.е от порта usb
2) быстро (3-4 раза в секунду)
3) медленно (1-2 секунды горит,1-2 секунды нет)
4)с порта 3,3v arduino uno
5)с arduino ide
6)комп-arduino uno-hc05(rx(softserial 10),tx (softserial 11),vcc-5v,до переписки с вами en-3.3v,после подал сразу на pin34(но режим ат включался и так и так одинаково))
7)нет,фотографии из интернета,но платы идентичные,только у меня на нижней микросхеме золотой краской галочка поставлена
Ок,сделаю.
8)нет,ничего не трогал.
Вчера попробовал подпаять на место кнопки проводки и замыкать как в инструкциях.
Результат такой же как и раньше