Передача данных с Arduino на Android: способы, настройка и примеры

Чаще всего связка Arduino–Android не работает не из-за кода, а из-за неправильного сопряжения Bluetooth-модуля: HC-05 подключён к пинам RX/TX платы, но смартфон его не видит, потому что модуль не переведён в режим сопряжения или питание подано на неверный пин. Проверка начинается с простого: светодиод на модуле должен мигать — это признак того, что он ждёт подключения.

Передача данных с Arduino на Android-смартфон — типовая задача для проектов умного дома, метеостанций, датчиков и радиоуправляемых моделей. Существует три рабочих способа: Bluetooth, Wi-Fi и проводное подключение через USB OTG. Ниже разберём каждый вариант, покажем примеры кода и типичные ошибки.

Выбор способа передачи данных

Прежде чем писать код, определитесь с каналом связи. От этого зависит и железо, и библиотеки, и приложение на телефоне.

  • 📡 Bluetooth — самый простой вариант для начинающих: дешёвый модуль HC-05 или HC-06, минимум настройки, дальность в пределах комнаты.
  • 🌐 Wi-Fi — подходит, если нужен доступ через роутер или интернет; обычно используют плату ESP8266 или ESP32.
  • 🔌 USB OTG — проводное подключение смартфона к Arduino напрямую; требует поддержки OTG на телефоне.
  • 📶 BLE (Bluetooth Low Energy) — энергоэффективный вариант для автономных датчиков, например модуль HM-10.
СпособОборудованиеСложностьКогда выбирать
Bluetooth ClassicHC-05 / HC-06НизкаяПростые проекты, короткая дистанция
BLEHM-10, ESP32СредняяБатарейные датчики
Wi-FiESP8266, ESP32СредняяУдалённый доступ, веб-интерфейс
USB OTGOTG-кабельСредняяСтационарное подключение без радиоканала

Подключение Bluetooth-модуля HC-05 к Arduino

Модуль HC-05 общается с платой через последовательный порт UART. Схема подключения: пин VCC модуля — к 5V (или 3.3V, смотрите маркировку вашей платы модуля), GND — к GND, TXD модуля — к пину RX Arduino, RXD модуля — к пину TX Arduino.

⚠️ Внимание: вход RXD многих модулей HC-05 рассчитан на логику 3.3 В, а Arduino Uno выдаёт 5 В. Для надёжной работы подключайте RXD через делитель напряжения из двух резисторов (например, 1 кОм и 2 кОм) — это защитит модуль от выхода из строя.

Если аппаратный Serial занят монитором порта, используйте программный последовательный порт через библиотеку SoftwareSerial и свободные цифровые пины, например 10 и 11. Тогда отладку можно вести через USB, а данные на телефон слать через модуль.

📊 Какой способ передачи данных с Arduino на Android вы используете?
Bluetooth HC-05/HC-06
Wi-Fi (ESP8266/ESP32)
BLE (HM-10)
USB OTG

Код на Arduino: отправка данных по Bluetooth

Минимальный скетч считывает значение датчика и отправляет его в последовательный порт раз в секунду. Пример с SoftwareSerial:

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(10, 11); // RX, TX

void setup() {

BTSerial.begin(9600);

}

void loop() {

int value = analogRead(A0);

BTSerial.println(value);

delay(1000);

}

Скорость 9600 — стандартная для HC-05 из коробки, но она могла быть изменена AT-командами предыдущим владельцем. Если телефон подключается, но приходит «мусор», в первую очередь проверьте совпадение скоростей в скетче и в настройках модуля.

Приложение на Android для приёма данных

Писать собственное приложение необязательно: для тестов достаточно готовых терминалов из Google Play, например Serial Bluetooth Terminal или аналогичных. Они показывают входящий поток и позволяют отправлять команды обратно на Arduino.

Порядок действий на смартфоне:

  • 📱 Включите Bluetooth и выполните сопряжение с модулем в настройках системы; стандартный PIN чаще всего 1234 или 0000, но он может отличаться — сверьтесь с документацией на ваш модуль.
  • 🔗 Откройте терминал и выберите сопряжённое устройство из списка.
  • ⚙️ Убедитесь, что скорость соединения совпадает со скоростью в скетче.
  • 📥 Проверьте приём данных: в терминале должны появляться строки со значениями.

Для собственного приложения удобны конструкторы вроде MIT App Inventor — там есть готовый компонент Bluetooth-клиента, и логика собирается из блоков без Java-кода. Для полноценной разработки на Kotlin используется API BluetoothSocket с RFCOMM-каналом.

☑️ Проверка связи Arduino ↔ Android

Выполнено: 0 / 5

Передача данных через Wi-Fi и ESP8266

Если Bluetooth не подходит из-за дальности, логично перейти на ESP8266 или ESP32. Эти платы программируются из той же Arduino IDE и могут работать как самостоятельный контроллер, заменяя связку «Arduino + модуль».

Два типовых сценария: плата поднимает точку доступа, и телефон подключается к ней напрямую, либо плата и смартфон находятся в одной сети роутера. Дальше данные передаются через TCP-сокеты, HTTP-запросы или протокол MQTT — последний особенно удобен для телеметрии, когда данные публикуются на брокер, а приложение на телефоне подписывается на топик.

⚠️ Внимание: не храните пароль от домашней Wi-Fi-сети в открытом виде в скетчах, которые публикуете или передаёте третьим лицам. Если устройство работает в открытой сети без шифрования, данные датчиков могут перехватываться.

Подключение по USB OTG

Проводной вариант исключает проблемы радиоканала. Потребуется OTG-адаптер и приложение, поддерживающее работу с USB-Serial, например терминал с поддержкой чипов CH340 или FTDI — именно такие преобразователи стоят на большинстве плат Arduino и их клонов.

Учтите: не каждый смартфон поддерживает OTG, а при подключении телефон будет питать плату, что ускоряет разряд батареи. Проверить поддержку OTG можно в характеристиках устройства или утилитами диагностики USB.

Почему терминал показывает иероглифы вместо данных

Классическая причина — несовпадение скорости UART. Скетч шлёт на 9600, а терминал или модуль настроен на 115200 (или наоборот). Вторая возможная причина — модуль переведён в режим AT-команд. Проверьте скорость в скетче, в приложении и, при необходимости, заводские настройки модуля по документации производителя.

Типичные ошибки и их решение

Разберём частые ситуации, с которыми сталкиваются при настройке передачи данных.

Модуль не виден в списке Bluetooth-устройств. Проверьте питание и то, что светодиод на модуле мигает. Некоторые модули HC-06 видны только пока не подключены — после соединения они пропадают из поиска, это нормально.

Данные приходят рваными или теряются. Возможная причина — слишком частая отправка без задержек либо переполнение буфера. Увеличьте интервал между отправками и убедитесь, что приложение успевает читать поток.

Скетч не прошивается при подключённом модуле. Если модуль сидит на аппаратных пинах RX/TX (0 и 1), он мешает загрузке скетча по USB. Отключайте модуль на время прошивки или используйте SoftwareSerial.

Часто задаваемые вопросы

Какой Bluetooth-модуль выбрать: HC-05 или HC-06?

HC-05 умеет работать и ведущим, и ведомым устройством, HC-06 — только ведомым. Для приёма данных на смартфон достаточно HC-06, но HC-05 универсальнее и стоит сопоставимо.

Можно ли передавать данные без интернета?

Да. Bluetooth и BLE вообще не требуют интернета, а ESP8266/ESP32 могут поднять собственную точку доступа, к которой телефон подключится напрямую.

Нужно ли писать своё Android-приложение?

Нет, для отладки и простых проектов хватает готовых Bluetooth-терминалов из Google Play. Своё приложение имеет смысл, когда нужен фирменный интерфейс, графики или управление.

Как передавать сразу несколько значений с датчиков?

Формируйте строку с разделителем, например temp;hum;press, или используйте формат JSON. На стороне Android строка разбивается по разделителю или парсится как JSON-объект.

Почему телефон не видит Arduino при подключении через OTG?

Проверьте поддержку OTG на смартфоне, исправность адаптера и наличие в приложении драйвера под USB-Serial чип вашей платы (CH340, FTDI, CP2102). Поведение зависит от модели телефона и версии Android.