Визитки 2.0: Добавим немного NFC-магии / Хабр

Что такое nfc?

NFC (near field communication, связь в ближнем поле) – это протоколы, которые используют электронные устройства для связи и передачи данных между собой. NFC устройства должны быть расположены очень близко друг к другу, как правило, в пределах 10 см, но этот диапазон может варьироваться в зависимости от устройства, которое передает данные, и размеров метки.

Nfc software

Визитки 2.0: Добавим немного NFC-магии / Хабр

Дальше нужно было найти правильный софт, чтобы записать максимально возможную контактную информацию на «волшебной визитке». Я перепробовал весь возможный набор из

и остановился на программе от производителя чипов (NXP) –


Помимо чтения и записи, она может на время или полностью делать метку read-only, копировать метки, читать полные данные из чипа и так далее. К тому же записывает максимально возможную визитку, а не только заранее записанные типы данных.

Какую информацию в принципе можно записать на метку?

Довольно неплохой перечень. В других приложениях записи NFC попадались и экзотические варианты, например, записи данных для доступа к Wi-Fi сети или автоматической отсылки смс на определенный номер с текстом, но для обычных ситуаций такого набора вполне хватает.

Выбираем визитку и выбираем из адресной книги наш контакт (предварительно его создав), который может включать имя, фамилию, различные телефоны, электронные адреса, веб-сайты, физический адрес, дату рождения, заметки. По идее можно и фотографию, но она, конечно, в килобайтную визитку не поместится.

Сохраняем данные на метку плюс добавляем запуск приложения «Контакты»
Визитки 2.0: Добавим немного NFC-магии / Хабр
Визитки 2.0: Добавим немного NFC-магии / Хабр
Визитки 2.0: Добавим немного NFC-магии / Хабр

Теперь если вы попадёте на конференцию, где будут не только iOS-девайсы (например, я так пользовался «волшебной визиткой» на Google IO), можете запросто дать приложить свою «дополненную визитку» к устройству и тут же сохранить ваш контакт в адресную книгу посетителя. WOW-эффект обеспечен. А с учётом вероятной поддержки NFC в новом iPhone, ареал использования существенно расширяется.

Кстати, есть и ещё один способ использования NFC-меток, в том числе и использованных (например, старых карт метро): записать последовательность действий при обнаружении рядом метки с этим ID. Лидер в этой области – приложение Trigger (бывший NFC Task Launcher, который добавил поддержку триггеров Wi-Fi, Bluetooth, координат, времени, процентов батарейки).

Можно, например, повесить метку дома, в машине и на работе, чтобы подключатьотключать wi-fi, передачу данных, bluetooth, беззвучный режим, отправлять сообщения, запускать навигационные или рабочие приложения, начинать проигрывать музыку и т.д. Очень клёвый способ автоматизации привычных действий. Подробнее можно прочитать в статье на хабре

В итоге с помощью физической метки можно добавить шарма вашей визитке и с легкостью «прописаться» в записной книжке вашего партнера с помощью «NFC-магии».

Игорь Акимов,департамент Mobile&Lingvo

Tnf_absolute_uri (тип uri, зависит от типа)

Создать NDEF-запись TNF_ABSOLUTE_URI можно следующим образом:

Kotlin

Tnf_mime_media (mime-тип, зависит от типа записи)

Создать NDEF-запись TNF_MIME_MEDIA можно следующим образом:

1. Используя метод createMime():

Kotlin

Tnf_well_known с rtd_text (mime-тип с записью простого текста)

Создать NDEF-запись TNF_WELL_KNOWN можно следующим образом:

Kotlin

fun createTextRecord(payload: String, locale: Locale, encodeInUtf8: Boolean): NdefRecord {
    val langBytes = locale.language.toByteArray(Charset.forName("US-ASCII"))
    val utfEncoding = if (encodeInUtf8) Charset.forName("UTF-8") else Charset.forName("UTF-16")
    val textBytes = payload.toByteArray(utfEncoding)
    val utfBit: Int = if (encodeInUtf8) 0 else 1 shl 7
    val status = (utfBit   langBytes.size).toChar()
    val data = ByteArray(1   langBytes.size   textBytes.size)
    data[0] = status.toByte()
    System.arraycopy(langBytes, 0, data, 1, langBytes.size)
    System.arraycopy(textBytes, 0, data, 1   langBytes.size, textBytes.size)
    return NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, ByteArray(0), data)
}

Java

public NdefRecord createTextRecord(String payload, Locale locale, boolean encodeInUtf8) {
    byte[] langBytes = locale.getLanguage().getBytes(Charset.forName("US-ASCII"));
    Charset utfEncoding = encodeInUtf8 ? Charset.forName("UTF-8") : Charset.forName("UTF-16");
    byte[] textBytes = payload.getBytes(utfEncoding);
    int utfBit = encodeInUtf8 ? 0 : (1 << 7);
    char status = (char) (utfBit   langBytes.length);
    byte[] data = new byte[1   langBytes.length   textBytes.length];
    data[0] = (byte) status;
    System.arraycopy(langBytes, 0, data, 1, langBytes.length);
    System.arraycopy(textBytes, 0, data, 1   langBytes.length, textBytes.length);
    NdefRecord record = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
    NdefRecord.RTD_TEXT, new byte[0], data);
    return record;
}

Intent-фильтр для такой NDEF-записи будет таким:

Tnf_well_known с rtd_uri (тип uri, базирующийся на полезной информации)

Создать NDEF-запись TNF_WELL_KNOWN можно следующим образом:

1. Используя метод createUri(String):

Kotlin

Алгоритм работы nfc

У NFC, как и у RFID, при обмене есть инициатор и цель, но новая технология позволяет куда больше, чем простой обмен идентификатором и чтение или запись информации цели. Наиболее значимым различием между этими двумя технологиями является то, что у NFC целями часто являются программируемые устройства, такие как смартфоны.

У NFC устройств есть два режима взаимодействия. Если инициатор излучает радиочастотные волны, а цель за счёт инициатора получает питание, то такой режим взаимодействия называют пассивным. При активном режиме у инициатора и цели свои собственные источники питания, и они независимы друг от друга. Данные режимы совпадают с режимами RFID.

NFC устройства также имеют три способа работы. Они могут работать в режиме чтения информации с цели или записи на неё. Они могут эмулировать карты, ведя себя как RFID-метки, когда они в поле другого NFC или RFID устройства. Или они могут работать в режиме peer-to-peer (P2P), в котором они обмениваются данными сразу в обоих направлениях.

Первым главным отличием NFC от RFID является способ взаимодействия peer-to-peer, который реализован с помощью ГОСТ Р ИСО/МЭК 18092. Обмен данными P2P реализуется двумя протоколами — протоколом подуровня управления логической связью (LLCP — logical link control protocol) и простым протоколом обмена данными NDEF (SNEP — simple NDEF exchange format).

Архитектура nfc

В архитектуре NFC есть несколько уровней. Самый низкий из них — физический, который реализован ЦПУ и другим аппаратным комплексом, через который происходит взаимодействие. В середине находятся данные о пакетах и транспортный уровень, затем формат данных уровней, и в конце программное обеспечение.

На физическом уровне NFC работает по алгоритму, описанному в ГОСТ для RFID (ГОСТ Р ИСО/МЭК 14443-2-2022), где говорится о маломощных радиосигналах частотой 13,56 МГц. Затем идёт уровень, который описывает разбивку потока данных на фреймы (ГОСТ Р ИСО/МЭК 14443-3-2022).

Любые радиоконтроллеры, которые используются в телефоне, планшете или подсоединяются к компьютеру или микроконтроллеру, являются отдельными аппаратными компонентами. Они взаимодействуют с главным процессором посредством одного или нескольких стандартных последовательных протоколов между устройствами: универсальный асинхронный приёмопередатчик (UART), последовательный периферийный интерфейс (SPI), последовательная шина данных для связи интегральных схем (I2C) или универсальная последовательная шина (USB).

Над этим находится несколько протоколов команд RFID, базирующихся на двух спецификациях. NFC чтение и запись меток базируется на оригинальном RFID ГОСТ Р ИСО/МЭК 14443A. Протоколы Philips/NXP Semiconductors Mifare Classic и Mifare Ultralight и NXP DESFire совместимы с ГОСТ Р ИСО/МЭК 14443A.

Обмен данными P2P NFC базируется на ГОСТ Р ИСО/МЭК 18092. Также на этом же стандарте базируются RFID-карты и метки Sony FeliCa, которые доступны в основном в Японии. Можно читать и записывать метки, основанные на этих стандартах, и не использовать NFC.

Они изображены на рисунке выше на уровне с другими управляющими протоколами, так как они используют одинаковый стандарт.

Богатство и разнообразие внутреннего мира nfc-меток

Когда я пытался узнать глубже о технологии, заметил, что по сути сложившегося рынка как бы и нет. Есть ряд некрупных продавцов оптом, есть AliExpress, есть пара магазинов, а также метки от Samsung и Sony, которые в принципе доступны в большом числе мест, но возможности просто так взять и купить нужную метку в нескольких экземпляров практически нет.

Вам понадобиться

  • Теги NFC
  • NFC позволяет смартфонам
  • Приложения для программирования, например триггер

Где купить nfc метку

В своей прошлой статье я уже рассказывал о неочевидных способах применения NFC и вскользь говорил о метках. По моему мнению, метки являются самой недооцененной возможностью модуля связи. Многие их не видели и не слышали. В Интернете огромное количество статей на тему применения тагов, но где можно приобрести такой гаджет никто не знает.

Читайте коллег: Лучшие телефоны, которые выйдут в ближашие месяцы. Их стоит подождать.

Но, впервые обратившись на Яндекс.Маркет, первое, что бросается в глаза — размах ценовой политики. Цены на NFC Tag начинаются с 35 рублей и заканчиваются в районе 2,5 тысяч. Все дело в том, что сами метки имеют разные стандарты, которых существует пять.

Все хорошо, но многие производители, представляющие свои товары на торговых площадках, совсем не указывают характеристики этих устройств. В итоге, если вы никогда не сталкивались с этим производителем, покупаете кота в мешке. Здесь, абсолютно неожиданно для меня, на помощь пришел AliExpress. Там пусть и не указывается тип метки, как показано в таблице выше, но информации о товаре явно больше.

Где купить nfc-метки?

Если вас интересуют метки в виде наклеек, которые использовать проще всего, то для этого придется посетить AliExpress. Именно здесь их выбор больше всего. Например, вы можете приобрести набор из десяти разных наклеек Ntag213 — стоимость такого комплекта не превышает 220 рублей.

Вы спокойно можете покупать NFC-метки от разных производителей. На их работе это никак не отразится, ведь ими используется один протокол. Фактически друг от друга такие изделия отличаются лишь формой и изображенным рисунком.

Если вам хватит шести меток, то предлагаем ознакомиться с несколько усечённым набором от AnyNFC. Однако его покупка обойдется даже дороже — за комплект из шести стикеров стоит 312 рублей. Но зато эти наклейки выполнены на более плотной бумаге, повредить их заметно сложнее.

Рассмотренные выше варианты имеют специфические рисунки. Если же вы вознамерились запрограммировать какие-то необычные команды, то вам нужны стикеры без всяких домиков, самолетов и прочих изображений. Например, 6 разноцветных наклеек, продающиеся примерно за 83 рубля (без учета доставки) располагают лишь логотипом беспроводной технологии NFC. При использовании таких стикеров вы будете ориентироваться на их цвет и местоположение.

Существует и ещё более упрощенный вариант. Вы можете купить 10 меток без рисунков. Это будут упомянутые в самом начале статьи тоненькие антенны. Далее вы можете своими руками изготовить какое-либо изображение, нанеся его на антенну, превратив её в полноценную NFC-метку. Проще всего для этой цели использовать принтер и самоклеящуюся бумагу.

Но не всегда требуется метка в виде стикера. В некоторых случаях она должна быть выполнена в виде аксессуара, который крепился бы к связке с ключами. Тогда необходима покупка набора из брелков NTAG215. Антенны в них заключены внутрь пластикового корпуса. К ключам брелок крепится при помощи металлического кольца. На корпус можно наклеить любое нужное вам изображение.

Для чего создана технология?

Поскольку точка активируется при непосредственной близости смартфона/планшета с модулем, данная технология со временем займет свою нишу в следующих областях:

  • считывание личной информации при получении доступа к аккаунтам, счетам, банковским картам и так далее;
  • бесконтактная оплата;
  • программирование девайса на определенные действия при прикосновении к NFC.

Если первые два варианта использования полностью зависят от развития данной технологии в вашем регионе (появление меток НФС в магазинах и так далее), то последний способ применения технологии весьма любопытен, и вы можете самостоятельно запрограммировать и использовать НФС метки по своему усмотрению.Визитки 2.0: Добавим немного NFC-магии / Хабр

Запись на nfc метку

Теперь, чтобы записать сообщение на метку, необходимо выполнить похожий процесс, за исключением небольших изменений в коде. Заголовок перед функцией void setup() будет таким же, а ниже приведен код, который необходимо загрузить в Arduino.

Зачем нужна nfc метка

Область применения меток действительно очень широка. Гаджет в форме брелка может служить в качестве персональной визитки. Также можно повесить брелок на ночник и при поднесении смартфона к метке будет активирован режим Не беспокоить.

Кроме брелоков существуют еще метки-наклейки. Их, например, можно прикрепить к крышке своего компьютера. Кроме того, после покупки метки, у вас появится отличная возможность быстро делиться паролем от своего Wi-Fi с гостями.

Использование nfc

Есть множество возможностей использования NFC:

  • Режим эмуляции карты позволяет использовать данную технологию для бесконтактных платежей, например Google Wallet, или для оплаты или получения билетов в общественном транспорте.
  • Есть несколько мобильных приложений, которые позволяют сохранить настройки для мобильного устройства на метках и в дальнейшем использовать их для быстрого изменения каких-либо настроек мобильного устройства (переход в режим виброзвонка, включения или выключения Wi-Fi на мобильном устройстве).
  • На рынке постепенно появляются устройства, поддерживающие NFC, — стереосистемы, телевизоры, которые позволяют создавать пару с телефоном или планшетом для удалённого управления.
  • NFC используется в системе здравоохранения для хранения идентификатора пациента и личных записей.
  • В сфере управления материально-техническими ресурсами можно использовать NDEF записи для хранения информации о месте отправления товаров, об их прохождении различных промежуточных пунктов и тому подобном.

Как записать nfc-метку?

Многие пользователи считают, что запись NFC-меток — это удел профессионалов. А без соответствующих команд такие изделия являются бесполезными — прикосновение к ним не будет вызывать никаких действий. Как же запрограммировать ту или иную команду, используя смартфон на базе Android? Неужто это действительно сложно? Спешим вас порадовать, всё намного легче, чем вы думаете.

Записать то или иное действие, которое будет совершаться смартфоном после прикосновения к NFC-метке, помогает специальная программа. Подобные приложения легко находятся в Google Play. Мы рекомендуем установить на свой девайс NFC Tools и NFC Tasks.

Работать, например, с NFC Tools очень просто. Достаточно перейти во вкладку «Tasks», после чего остается лишь выбрать задачу, которую будет выполнять смартфон при его поднесении к конкретной NFC-метке. И не забудьте затем прикоснуться к стикеру или брелку.

Само собой, NFC-связь должна быть активирована в настройках устройства. Подробнее об использовании технологии NFC читайте в отдельной статье.

Аналогичным образом устроены практически все программы, служащие для связи с NFC-метками. Какие-то предлагают на выбор простые команды. Другие — более сложные и составные. Не забывайте, что не все они являются бесплатными. Однако и дорогими такие приложения не бывают.

Как запрограммировать метки nfc на iphone

iPhone 6 и выше — это все оснащен NFC но вы не могли использовать оборудование для написания тегов NFC до iOS 13. Если вы используете iPhone 7 или выше и на нем работает iOS 13 или выше, вы можете легко писать собственные теги NFC. Вы можете ознакомиться с этим кратким руководством по созданию собственных тегов NFC.

Как настроить nfc метку

Для того, чтобы настроить NFC метку, в Google Play существует множество сторонних приложений, позволяющих сделать это всего в два клика. Самым популярным из них много лет является Tag Writer by NXP. Вот краткая инструкция по программированию метки:

Как программировать и пользоваться стикерами?

Для начала определим список необходимых условий, без которых вы не сможете настроить работу НФС:

Какой длины может быть ndef-сообщение?

Место на информацию в NDEF-записи ограниченно по размерам 2^32-1 байтами, однако можно делать цепочки записей внутри сообщения, чтобы переслать информацию большего размера. В теории нет ограничений на NDEF-сообщения, но на практике размер сообщения ограничивается возможностями устройств или меток, участвующих в обмене информацией.

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

В общем, обмен данными через NFC достаточно быстрый. Человек подносит мобильное устройство к метке, происходит краткий обмен информацией, и человек идёт дальше. Данная технология не была спроектирована для длительных обменов информацией, потому что устройства в буквальном смысле должны находится в паре сантиметров друг от друга.

Для того чтобы передать большой объем информации, устройства придётся держать друг рядом с другом длительное время, это может быть неудобным. Если нужно длительное взаимодействие между устройствами, то можно воспользоваться NFC для быстрого обмена данными о возможностях устройств и последующего включения одного из более подходящих способов передачи данных (Bluetooth, Wi-Fi и т.д.).

Конструкция и предназначение меток

Преимущество технологии NFC в том, что она может быть заключена как в активном чипе, так и в пассивной метке. Для работы последней не требуется энергия, о регулярной подзарядке можно забыть. При этом NFC-метки имеют минимальные размеры, что позволяет им находиться даже в каком-нибудь брелке.

По сути каждая такая метка представляет собой маленькую антенну толщиной с бумажный лист. Её диаметр сравним с 5-рублевой монетой. Обмен данными занимает 0,1 с. Для этого к метке нужно приложить смартфон так, чтобы воздушный промежуток не превышал 5 см.

Использование NFC-меток может быть в самых разных целях. Чаще всего их можно встретить в банковских картах. В таком случае метка применяется для бесконтактной оплаты — нужно лишь убедиться, что это поддерживает терминал. Это существенно ускоряет процесс оплаты, ведь в большинстве случаев от вас не потребуют ввода пин-кода.

Также NFC-метки продаются в виде отдельных аксессуаров. Они могут класться на стол, либо подвешиваться к связке ключей. Такие метки используются для управления «умным домом». А ещё с их помощью можно заставить смартфон автоматически переходить в определенный режим работы.

Например, метка может находиться на торпеде автомобиля. В таком случае прикосновение к ней смартфона включит Bluetooth, после чего водитель будет общаться со звонящими посредством беспроводной гарнитуры. И не обязательно должно быть запрограммировано лишь одно действие.

Программирование тегов nfc в windows

Писатель Nokia NFC является наиболее популярным для написания тегов NFC на Windows Phone. Однако это было единственное приложение, которое я смог найти, хотя его производительность меня не впечатлила.

Если вы также можете написать свой чип NFC со своего ПК с Windows с помощью тегов GoTo. Однако вам нужно будет купить дополнительный Читатель и писатель NFC для чтения / записи тегов NFC на ваш компьютер.

Программирование тегов nfc на android

В магазине игр есть много приложений, которые позволяют программировать NFC, но мне больше всего нравится Trigger, поскольку он бесплатный, простой в использовании и предлагает множество рекомендуемых шаблонов, таких как: экономия времени при вождении, отключение звука на моем телефоне, пока я сплю, и т.п.

Приложение состоит из двух частей — триггера и действий. Как следует из названия, триггер — это то, что запускает действие, в этом случае триггер будет приближать телефон к тегам NFC, а действия будут переключать WiFi, Bluetooth и т. Д.

Выполните простые шаги, чтобы запрограммировать чипы NFC

Создаём распространённые ndef-записи

Существует несколько методов для создания NDEF-записи: createUri(), createExternal() и createMime(). Лучше использовать один из них во избежание ошибок, которые могут возникнуть при создании записи вручную. Все примеры, представленные ниже, следует отправлять первым сообщением при записи метки, либо сопряжением с другим устройством.

Список комплектующих

Плата расширения Adafruit PN532 RFID/NFC Shield
Плата расширения Adafruit PN532 RFID/NFC Shield

Важно, чтобы NFC метки были перезаписываемыми, иначе код не заработает.

Для проверки того, успешно ли мы записали данные на метки, мы можем использовать Arduino или телефон с NFC. Большинство смартфонов на Android могут читать NFC метки, я буду использовать для тестов Nexus 5. К сожалению, для пользователей iPhone, поддержка NFC началась с iPhone 6 и 6s, но они не поддерживают чтение NFC меток, поэтому можно воспользоваться платой Arduino для проверки того, что записано на вашей NFC метке.

Структура ndef

NDEF содержит информацию о байтовом представлении сообщений, которые могут содержать несколько записей. У каждой записи есть заголовок, в котором находятся метаданные (тип, длина и т.д.), и информацию для отправки. Если вернуться к аналогии с параграфом, то параграф формируется из предложений, относящихся к одной теме, так и в NDEF-сообщениях — хорошо, когда все записи относятся к одной тематике.

NDEF-сообщения в основном короткие, каждый обмен состоит из одного сообщения, каждая метка также содержит одно сообщение. Так как обмен NFC данными происходит при касании одного устройства другим или меткой, то будет неудобно передавать в одном сообщении текст целой книги, поэтому длина NDEF-сообщения сопоставима с длиной абзаца, но не целой книги.

NDEF-запись содержит информацию для пересылки и метаданные, как эту информацию интерпретировать. Каждая запись может быть разного типа, о чем объявляется в заголовке этой записи. Также в заголовке описывается какое место занимает запись в сообщении, после заголовка следует информация.

На рисунке ниже представлена полная информация о расположении бит и байт информации в NDEF-записи. Информация для пересылки занимает большую часть записи. Тип информации уточняет, как её интерпретировать, идентификатор информации опционален и используется для пересылки большого количества записей или перекрёстного обмена данными.

Типы nfc-меток

Существует четыре типа меток, описанных NFC-форумом, все они базируются на RFID-протоколах. Это делает NFC метки частично совместимыми со многими уже существующими RFID системами (например, Mifare и FeliCa). Хотя эти более старые системы не поддерживают NDEF, они, однако, могут опознавать NFC метки, которые совместимы с ними.

Например, считыватель RFID, который предназначен для работы с метками Mifare Ultralight, может считать идентификационный номер метки NFC 2 типа, хоть и не может прочитать закодированную NDEF информацию. Есть также пятый тип, который совместим с технологией, но при этом не является частью NFC-спецификации.

Типы 1, 2 и 4 основаны на ГОСТ Р ИСО/МЭК 14443A (состоит из четырёх частей: 1, 2, 3, 4), тип 3 — на ГОСТ Р ИСО/МЭК 18092. Более подробно про каждый из типов можно прочитать под спойлером.

Тип 1

:

  • Основан на ГОСТ Р ИСО/МЭК 14443A;
  • Может быть как только для чтения, так и для чтения/записи;
  • Содержит от 96 байт до 2 кбайт памяти;
  • Нет защиты данных от коллизий (прим. — коллизии могут возникнуть; когда два активных источника передают данные одновременно);
  • Примеры: Innovision Topaz, Broadcom BCM20203.

Тип 2:

  • Аналогично типу 1 основан на NXP/PhilipsMifareUltralight метках (ГОСТ Р ИСО/МЭК 14443A);
  • Может быть как только для чтения, так и для чтения/записи;
  • Содержит от 96 байт до 2 кбайт памяти;
  • Скорость взаимодействия 106 кбит/с;
  • Поддержка анти-коллизий;
  • Пример: NXP Mifare Ultralight.

Тип 3:

  • Основан на метках SonyFeliCa (ГОСТ Р ИСО/МЭК 18092 и JIS-X-6319-4) без поддержки шифрования и аутентификации, которая предоставлена спецификацией FeliCa;
  • Может быть либо только для чтения, либо для чтения/записи;
  • Скорость взаимодействия 212 или 424 кбит/с;
  • Поддержка анти-коллизий;
  • Пример: Sony FeliCa.

Тип 4:

  • Аналогично типу 1, тип 4 основан на ГОСТ Р ИСО/МЭК 14443A;
  • Может быть либо только для чтения, либо для чтения/записи;
  • 2, 4 или 8 кбайт памяти;
  • Скорость взаимодействия 106, 212 или 424 кбит/с;
  • Поддержка анти-коллизий;
  • Пример: NXP DESFire, SmartMX-JCOP.

Пятый тип является собственностью NXPSemiconductors и, вероятно, самым распространённым на сегодняшний день MifareClassictag (ГОСТ Р ИСО/МЭК 14443A):

  • Память: 192, 768 или 3584 байта;
  • Скорость взаимодействия 106 кбит/с;
  • Поддержка анти-коллизий;
  • Пример: NXP Mifare Classic 1K, Mifare Classic 4K, Mifare Classic Mini.

Читаем ndef-сообщение

Когда телефон на Android считывает NFC-метку, он сначала её обрабатывает и распознает, а затем передаёт данные о ней в соответствующее приложение для последующего создания intent. Если с NFC может работать больше одного приложения, то появится меню выбора приложения. Система распознавания определяется тремя intent, которые перечислены в порядке важности от самой высокой до низкой:

  1. ACTION_NDEF_DISCOVERED: Этот intent используется для запуска аctivity, если в метке содержится NDEF-сообщение. Он имеет самый высокий приоритет, и система будет запускать его в первую очередь.
  2. ACTION_TECH_DISCOVERED: Если никаких activity для intent ACTION_NDEF_DISCOVERED не зарегистрировано, то система распознавания попробует запустить приложение с этим intent. Также этот intent будет сразу запущен, если найденное NDEF-сообщение не подходит под MIME-тип или URI, или метка совсем не содержит сообщения.
  3. ACTION_TAG_DISCOVERED: Этот intent будет запущен, если два предыдущих intent не сработали.

В общем случае система распознавания работает, как представлено на рисунке ниже.

Когда это возможно, запускается intent ACTION_NDEF_DISCOVERED, потому что он наиболее специфичный из трёх. Более того, с его помощью можно будет запустить ваше приложение.

Если activity запускается из-за NFC intent, то можно получить информацию с отсканированной NFC-метки из этого intent. Intent может содержать следующие дополнительные поля (зависит от типа отсканированной метки):

  • EXTRA_TAG (обязательное): объект Tag, описывающий отсканированную метку.
  • EXTRA_NDEF_MESSAGES (опциональное): Массив NDEF-сообщений, просчитанный с метки. Это дополнительное поле присуще только intent ACTION_NDEF_DISCOVERED.
  • EXTRA_ID (опциональное): Низкоуровневый идентификатор метки.

Ниже представлен пример, проверяющий intent ACTION_NDEF_DISCOVERED и получающий NDEF-сообщения из дополнительного поля.

Kotlin

override fun onNewIntent(intent: Intent) {
    super.onNewIntent(intent)
    ...
    if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action) {
        intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)?.also { rawMessages ->
            val messages: List = rawMessages.map { it as NdefMessage }
            // Обработка массива сообщений.
            ...
        }
    }
}

Java

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    ...
    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
        Parcelable[] rawMessages =
            intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
        if (rawMessages != null) {
            NdefMessage[] messages = new NdefMessage[rawMessages.length];
            for (int i = 0; i < rawMessages.length; i  ) {
                messages[i] = (NdefMessage) rawMessages[i];
            }
            // Обработка массива сообщений.
            ...
        }
    }
}

Также объект Tag можно получить из intent, который будет содержать полезную информацию и позволит перечислить технологии метки:

Kotlin

val tag: Tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)

Java

Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

Чтение nfc метки

Эти заголовочные файлы очень важны, и проект не будет без них работать. Далее пишем следующий код.

#include <Wire.h>
#include <PN532_I2C.h>
#include <PN532.h>   // Следующие файлы включают установленные библиотеки
#include <NfcAdapter.h>

PN532_I2C pn532_i2c(Wire);
NfcAdapter nfc = NfcAdapter(pn532_i2c);  // Указываем, что используем плату расширения

void setup(void) 
{
  Serial.begin(9600);
  Serial.println("NFC TAG READER"); // Заголовок, используемый в мониторе последовательного порта
  nfc.begin();
}

void loop(void) 
{
  Serial.println("nScan your NFC tag on the NFC Shieldn");  // Команда, чтобы вы знали, что делать дальше 

  if (nfc.tagPresent())
  {
    NfcTag tag = nfc.read();
    Serial.println(tag.getTagType());
    Serial.print("UID: ");
    Serial.println(tag.getUidString()); // Извлекает уникальный идентификатор из вашей метки

    if (tag.hasNdefMessage()) // Если у метки есть сообщение
    {

      NdefMessage message = tag.getNdefMessage();
      Serial.print("nThis Message in this Tag is ");
      Serial.print(message.getRecordCount());
      Serial.print(" NFC Tag Record");
      if (message.getRecordCount() != 1) 
      { 
        Serial.print("s");
      }
      Serial.println(".");

      // Если у вас более 1 сообщения, то проходим по ним в цикле
      int recordCount = message.getRecordCount();
      for (int i = 0; i < recordCount; i  )
      {
        Serial.print("nNDEF Record ");
        Serial.println(i 1);
        NdefRecord record = message.getRecord(i);

        int payloadLength = record.getPayloadLength();
        byte payload[payloadLength];
        record.getPayload(payload);


        String payloadAsString = ""; // Обработать сообщение, как строку
        for (int c = 0; c < payloadLength; c  ) 
        {
          payloadAsString  = (char)payload[c];
        }
        Serial.print("  Information (as String): ");
        Serial.println(payloadAsString);


        String uid = record.getId();
        if (uid != "") 
        {
          Serial.print("  ID: ");
          Serial.println(uid); // Напечатать уникальный идентификатор NFC метки
        }
      }
    }
  }
  delay(10000);
}

После того, как вы сохранили и загрузили этот код в свою плату Arduino с подключенной платой расширения, вы можете начать проверять, какие сообщения есть у ваших меток, если они есть. Когда вы загрузите программу в Arduino, откройте монитор последовательного порта, там вы увидите сообщение “NFC TAG Reader”, а ниже инструкции, говорящие вам сканировать вашу NFC метку на своей плате расширения NFC (“Scan your NFC tag on your NFC Shield”). Когда я сделал это, то получил в мониторе последовательного порта следующее:

Вывод в мониторе последовательного порта Arduino IDE при чтении NFC метки
Вывод в мониторе последовательного порта Arduino IDE при чтении NFC метки

Подведение итогов

Можно смело заявить, что NFC-метки являются очень полезными. Они могут автоматизировать действия смартфона. Также такие метки можно похвалить за универсальность — какие именно команды будет выполнять девайс, зависит только от вас. Словом, NFC-метки делают использование телефона более удобным.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *