Arduino и Bluetooth на основе HC-05 для чайников

Беспроводной интерфейс Bluetooth является одним из самых популярных интерфейсов, которые любители программирования Arduino выбирают для связи их самодельного устройства с мобильным приложением. Связь, как правило, осуществляется с помощью подключаемых к Arduino Bluetooth-модулей HC-05 или HC-06, которые являются недорогими и широко распространенными.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/390-arduino-i-bluetooth-na-osnove-hc-05-dlya-chaynikov/images/arduino-i-bluetooth-na-osnove-hc-05-dlya-chaynikov-1.jpg

В этом материале будет показано, как новичку в деле создания устройств на Arduino организовать связь по Bluetooth с мобильным гаджетом на базе ОС Android.

Для начала подключим модуль HC-05 и светодиод, которым будем управлять, к плате Arduino Uno. Соединение HC-05 производится в соответствии со следующей комбинацией выводов:

Arduino             HC-05 RX (Pin 0) ——— TX TX (Pin 1) ——— RX 5V ——— VCC GND ——— GND

Обратите внимание, что линии RX (передача данных) и TX (прием данных) соединяются крест на крест. Минусовой вывод светодиода подключите к земле GND платы Arduino, а плюсовой к выводу 13 через токоограничивающий резистор с любым номиналом в диапазоне от 220 Ом до 1 КОм. В итоге схема соединения будет выглядеть следующим образом:

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/390-arduino-i-bluetooth-na-osnove-hc-05-dlya-chaynikov/images/arduino-i-bluetooth-na-osnove-hc-05-dlya-chaynikov-2.jpg

Модуль HC-05 получает и передает в Arduino данные через последовательный порт, поэтому с целью отладки программы можно открыть монитор последовательного порта и посмотреть, как принимаются данные.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/390-arduino-i-bluetooth-na-osnove-hc-05-dlya-chaynikov/images/arduino-i-bluetooth-na-osnove-hc-05-dlya-chaynikov-3.jpg

В нашем случае программа на Android, которую можно скачать здесь, по нажатию кнопки на мобильном устройстве по Bluetooth будет передавать 1 или 0, что будет соответствовать командам включения или отключения светодиода, подключенного к выводу 13 платы Arduino Uno.

Перед тем как передавать команды для управления светодиодом, необходимо найти модуль HC-05 в своей Bluetooth-сети и соединиться с ним. Если требуется ввод пароля, то как правило, по умолчанию он представляет собой 1234 или 0000. Затем нужно установить приложение. После установки приложения на мобильное устройство, откройте его.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/390-arduino-i-bluetooth-na-osnove-hc-05-dlya-chaynikov/images/arduino-i-bluetooth-na-osnove-hc-05-dlya-chaynikov-4.jpg

Нажмите «Paired devices» и выберите из списка ваш модуль.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/390-arduino-i-bluetooth-na-osnove-hc-05-dlya-chaynikov/images/arduino-i-bluetooth-na-osnove-hc-05-dlya-chaynikov-5.jpg

После успешного соединения можете нажимать на кнопку ON для включения светодиода и OFF для его отключения. С помощью кнопки Disconnect можно отключить беспроводную связь между Bluetooth-модулем и мобильным устройством.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/390-arduino-i-bluetooth-na-osnove-hc-05-dlya-chaynikov/images/arduino-i-bluetooth-na-osnove-hc-05-dlya-chaynikov-6.jpg

Ниже представлен код для Arduino, реализующий связь с модулем HC-05 с помощью последовательного порта и управление светодиодом на основании данных, полученных по последовательному порту.

char data = 0;            // Переменная для хранения принятых данных
void setup()
{
    Serial.begin(9600);   // Устанавливаем скорость обмена данными
    pinMode(13, OUTPUT);  // Вывод 13 как выход
}
void loop()
{
   if(Serial.available() > 0)      // Если есть принятые данные
   {
      data = Serial.read();        // Принимаем эти данные и сохраняем в переменной
      Serial.print(data);          // Выводим данные в последовательный монитор
      Serial.print("\n");
      if(data == '1')              // Если data равна 1
         digitalWrite(13, HIGH);   // Включаем светодиод
      else if(data == '0')         //  Если data равна 0
         digitalWrite(13, LOW);    // Выключаем светодиод
   }
}