Интеграция RFID-считывателя через Bluetooth в мобильное приложение
При интеграции RFID-считывателя через Bluetooth разработчики часто сталкиваются с проблемой фрагментации данных при BLE-передаче и несовместимостью протоколов разных вендоров. Мы решаем эти задачи, используя проверенные паттерны буферизации и адаптеры под каждый тип ридера. Наш опыт включает более 20 проектов по интеграции Zebra RFD40, Chainway R6 и TSL 1128. Мы гарантируем стабильное BLE-соединение, корректный парсинг всех EPC-тегов, включая работу с MTU и подпиской на уведомления. Предлагаем интеграцию под ключ за 5–14 дней с полной документацией и обучением вашего разработчика. Оценим ваш проект бесплатно — просто напишите нам!
Какой протокол BLE выбрать: NUS или кастомный GATT?
Большинство Bluetooth RFID-ридеров используют либо Nordic UART Service (NUS), либо собственный GATT-сервис. Выбор влияет на совместимость и производительность.
| Характеристика | Nordic UART Service (NUS) | Кастомный GATT |
|---|---|---|
| Совместимость | Высокая (стандартный UUID) | Низкая (только конкретная модель) |
| Простота внедрения | Высокая (ASCII команды) | Средняя (бинарный парсинг) |
| Производительность | До 80 пакетов/с | До 200 пакетов/с |
| Гибкость | Ограниченная (только SPP) | Полная (произвольные характеристики) |
NUS проще в реализации, но кастомный GATT даёт больше контроля и скорости. Мы помогаем выбрать оптимальный вариант под вашу задачу.
Почему важно буферизировать BLE-данные?
BLE пакеты могут приходить разделёнными — одна строка в нескольких onCharacteristicChanged уведомлениях. Всегда буферизируйте до разделителя (обычно \r\n). Пример для ASCII-протокола:
private val dataBuffer = StringBuilder() fun onCharacteristicChanged(value: ByteArray) { dataBuffer.append(String(value, Charsets.UTF_8)) while (dataBuffer.contains('\n')) { val lineEnd = dataBuffer.indexOf('\n') val line = dataBuffer.substring(0, lineEnd).trim() dataBuffer.delete(0, lineEnd + 1) if (line.startsWith("EPC:")) { val epc = line.removePrefix("EPC:").trim() onTagRead(epc) } } } Какие ридеры мы поддерживаем?
| Модель | Протокол BLE | Парсинг | SDK |
|---|---|---|---|
| Zebra RFD40 | Nordic UART Service (NUS) | ASCII (EPC:) | Zebra EMDK |
| Zebra RFD90 | NUS или кастомный GATT | ASCII/бинарный | Zebra RFID SDK |
| Chainway R6 | Проприетарный GATT | Бинарный пакет | Chainway SDK |
| TSL 1128 | Кастомный GATT | Бинарный с CRC | TSL SDK |
Мы подключаем любой ридер с открытым протоколом. Если SDK неудобен, работаем напрямую через BLE — это даёт гибкость и меньший размер приложения.
Как увеличить скорость считывания?
Оптимизация MTU и правильная обработка уведомлений могут повысить производительность на 30–50%. Например, на одном из проектов для склада мы увеличили пропускную способность с 50 до 120 тегов в секунду за счёт настройки MTU=512 и параллельной обработки потоков.
Сравнение производительности при разных MTU
| MTU (байт) | Пропускная способность (тегов/с) | Задержка (мс) |
|---|---|---|
| 23 (по умолчанию) | 40 | 25 |
| 128 | 90 | 12 |
| 512 | 150 | 8 |
Запрос большего MTU снижает накладные расходы на фрагментацию. Рекомендуем устанавливать MTU=512, если ридер его поддерживает.
Что входит в интеграцию под ключ?
- Анализ протокола ридера (reverse engineering при необходимости)
- Реализация BLE-соединения и подписки на уведомления
- Парсинг данных (EPC/UID), включая буферизацию
- Оптимизация MTU и скорости считывания
- Интеграция SDK Zebra/Chainway (если требуется)
- Тестирование на реальных тегах (до 100 считываний)
- Документация API и архитектуры решения
- Обучение вашего разработчика (2–3 часа онлайн)
- Поддержка 3 месяца после сдачи
Как мы работаем?
- Аналитика — изучаем протокол ридера и требования приложения.
- Проектирование — выбираем архитектуру BLE-соединения и схему парсинга.
- Реализация — пишем код на Kotlin/Swift с учётом всех кейсов.
- Тестирование — проверяем на разных метках и в условиях зашумлённого радиоэфира.
- Деплой — встраиваем модуль в ваше приложение, настраиваем сборку для App Store / Google Play.
Типичные ошибки при интеграции
- Игнорирование MTU — без вызова
requestMtuразмер пакета ограничен 20 байтами, что в 6 раз замедляет передачу. - Пропуск проверки CCCD — без записи в дескриптор уведомления не придут.
- Отсутствие буферизации — данные приходят частями, без буфера теряются концы строк.
- Однопоточность — BLE-колбэки часто в отдельном потоке, используйте синхронизацию.
Сроки и гарантии
- Простая интеграция (ASCII, NUS) — 5 дней.
- Со сложным бинарным протоколом или SDK — 1–2 недели.
- Мы даём гарантию 6 месяцев на корректность BLE-соединения и парсинга. Если возникнут проблемы, доработаем бесплатно.
Наша команда — 5 лет на рынке мобильной разработки, выполнили 20+ RFID-проектов для складов, логистики и ритейла. Имеем сертифицированных специалистов по Zebra EMDK. Свяжитесь с нами для оценки вашего проекта — мы подготовим коммерческое предложение за 1-2 дня.







