Чаще всего связка 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 Classic | HC-05 / HC-06 | Низкая | Простые проекты, короткая дистанция |
| BLE | HM-10, ESP32 | Средняя | Батарейные датчики |
| Wi-Fi | ESP8266, ESP32 | Средняя | Удалённый доступ, веб-интерфейс |
| USB OTG | OTG-кабель | Средняя | Стационарное подключение без радиоканала |
Подключение 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: отправка данных по 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
Передача данных через 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.