Чтение и запись NFC меток с помощью Arduino

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-записи будет таким:

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

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

  1. Включение или выключение модуля Wi-Fi.
  2. Запуск протокола Bluetooth.
  3. Переход по ссылке в браузере.
  4. Регулировка громкости динамиков.
  5. Изменение уровня яркости экрана телефона.
  6. Передача данных владельца.
  7. Передача кода, выполняющего роль пропуска или ключа.
  8. Банковские карты с 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, часто делают особую отметку на корпусе.

Также можно проверить наличие такой функции в настройках:

  1. Фото 2Главное меню.
  2. Настройки.
  3. Беспроводные сети.
  4. NFC (поставить галочку напротив пункта, если её нет).

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

Если делить внешние модули на две большие категории, то получается, что бывают активные и пассивные NFC-модули.

  • Активные. Пользуются каналом связи через Bluetooth или Wi-Fi. В первую очередь, этот фактор предполагает высокое энергопотребление.
  • Пассивные. Являются односторонними и не дают возможности совершать полноценный обмен данными между устройствами, а также записывать и сохранять данные.

В зависимости от модели смартфона, его конструкции, можно установить несколько видов дополнительных NFC-устройств:

  • SIM-карту (выглядит как обычная карточка, может быть мини- и микроформата);
  • метки (круглые плоские «пятачки» с клеящейся основой, могут клеиться на любые поверхности);
  • дополнительные NFC-антенны (состоят из внутреннего чип-модуля и антенны, крепятся под крышкой телефона).

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

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

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

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

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

Зачем нужны nfc метки ?

Когда в 2004 году Philips, Sony и Nokia создали свой NFC forum, данная технология была известна разве что в среде увлеченных технарей. Три кита электронной индустрии ставили своей целью исследование, продвижение, ну и конечно, коммерческую прибыль от внедрения новой технологии бесконтактной передачи данных. Но большого прогресса они не достигли – все их достижения казались не более, чем игрушкой.

Для справки: NFC (от англ. Near Field Communication) – технология передачи данных на очень близком расстоянии, порядка 5-10 см. Является разновидностью технологии RFID – радиочастотной идентификации.

В 2022 к ним присоединяется Google и вот тогда начинается настоящий расцвет технологии, ведь NFC чипы стали поставляться с большинством смартфонов под Android. Пользователи сразу же оценили удобство и безопасность Google Pay – не нужно вводить всем надоевшие пароли; считывание карт происходило быстро и без ошибок. А самое главное пропала необходимость вообще доставать банковскую карту – все данные хранятся в памяти смартфона.

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

“NFC – это просто приветственное рукопожатие”, – говорит Рэй Хартьен из компании Sony – “Потоковая передача данных идет уже через Bluetooth”. А NFC технологии позволяют обойтись без необходимой проверки безопасности соединения. Сама технология полностью безопасна для человека, так как использует безопасную частоту 13.56 МГц. А из-за небольшой дальности действия, уровень магнитного излучения очень мал.

Пишем данные

Для записи данных будем использовать NFC TagWriter. Пользоваться приложением довольно просто. Запускаем, тапаем по пункту Create, write and store, выбираем New, далее выбираем тип записываемых данных. Наиболее полезные типы: контакт, простой текст, телефонный номер, данные для Bluetooth-соединения, URI и приложение. В списке есть даже закладка веб-браузера и email-сообщение, но для чего они нужны, не совсем понятно.

Главный экран NFC TagWriter
Главный экран NFC TagWriter

Далее заполняем необходимые поля (например, адрес веб-сайта в случае с URI), нажимаем Next и попадаем на экран опций (скриншот «NFC TagWriter: опции сообщения»). Здесь можно указать приложение, которое будет запущено после прочтения метки (Add launch application) и установить защиту на перезапись сторонним устройством (Apply Soft Protection).

NFC TagWriter: опции сообщения
NFC TagWriter: опции сообщения

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

Принцип работы

Да. На данный момент это решение — единственный для России работающий способ добавить NFC в телефон без NFC.

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

Если кратко, то, как и в пассивных RFID-чипах, NFC использует:

  • антенну;
  • блок безопасности.

Антенна передает информацию между меткой и считывающим устройством.

Также при помощи антенны происходит питание микрочипов внутри NFC-метки.

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

Блок безопасности может быть, как физическим устройством – конкретными чипами на NFC-метке, так и эмулироваться программными средствами, как в случае с PDA – смартфонами, КПК, смарт часами и другими портативными устройствами.

В целом устройство напоминает микрокомпьютер – тут даже есть свой процессор и оперативная память.

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

Можно программировать не одно событие, а целую цепочку. Экспериментируйте!

Разновидности

Вниманию потребителя представлено четыре категории микроскопических тэгов. Разделяют их по объемам памяти и скоростному режиму пересылки сведений.

Для удобства предлагается изучить таблицу:

категория1234
запас памяти48Б2Кб20Кб32Кб
скоростной режим пересылки сведений106 Кб106 Кб212 Кб424 Кб

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

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

Прежде, чем приобрести микрочип, рекомендуется в первую очередь учесть одну небольшую особенность – насколько метка совмещается с мобильным телефоном.

Дело в том, что НФС- метки делятся на две группы:

  • универсальные – подходят к любому гаджету вне зависимости от установленной на нем операционной системы. К ним относятся NFC Ntag 203 (212, 213, 214, 215, 216);
  • с ограничениями по совместимости.

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

Структура ndef

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

Есть несколько распространённых типов NDEF-записей:

  1. Обычные текстовые записи. В них можно отправить любую строку, они не содержат инструкций для цели, но содержат метаданные об языке текста и кодировке.
  2. URI. Такие записи содержат данные об интернет-ссылках. Цель, получившая такую запись, откроет её в том приложении, которое сможет её отобразить. Например, веб-браузере.
  3. Умная запись. Содержит не только веб-ссылки, но и текстовое описание к ним, чтобы было понятно, что находится по этой ссылке. В зависимости от данных записи телефон может открыть информацию в нужном приложении, будь то SMS или e-mail, либо сменить настройки телефона (громкость звука, яркость экрана и т.д.).
  4. Подпись. Она позволяет доказать, что информация, которая была передана или передаётся, достоверна.

Можно использовать несколько видов записей в одном NDEF-сообщении.

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

Второе главное различие между NFC и RFID — формат обмена данными NFC (NDEF — NFC data exchange format). NDEF определяет формат данных в сообщениях, которые в свою очередь состоят из NDEF записей. Есть несколько видов записей, о которых будет рассказано более подробно чуть ниже.

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

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

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

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

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

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

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

Когда телефон на 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 }
            // Обработка массива сообщений.
            ...
        }
    }
}
@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];
            }
            // Обработка массива сообщений.
            ...
        }
    }
}

Kotlin

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

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

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

Kotlin

Сценарии применения nfc-меток

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

  • Передача доступа к интернету. Если на компьютере или ноутбуке часто заканчивается трафик, то пользоваться NFC наклейкой полезно для быстрой организации режима «модема» на смартфоне или планшете. Уже через секунду с ПК появится шанс подключиться к подготовленной на основе мобильного трафика Wi-Fi сети.
  • Активация специальных режимов работы. Способы применения NFC-меток в повседневной жизни за пределами стандартной оплаты, во многом зависит от фантазии. Прикрепленная наклейка на спинке кровати может стать сигналом для активации ночного режима, бесшумного или же – расслабляющего (фоновая музыка, любимая книга). А еще схожим образом может включаться будильник и полностью отключаться push-уведомления.
  • Таймеры, секундомеры и часы. Спортивные тренировки, кулинарные эксперименты, ежедневные гигиенические процедуры – следить за временем в некоторых ситуациях особенно важно. Программирование NFC-меток на кухне, в ванной комнате или в импровизированном домашнем спортивном зале поможет автоматизировать процессы наблюдения за потраченными часами и минутами.
  • Запуск медиаплееров. Беспроводные колонки, музыкальные плееры, Bluetooth-наушники – заранее расставленные метки помогают быстрее разбираться с сопряжением мобильной техники и выбранной акустики, а заодно – еще и включать подходящую радиостанцию или альбом для воспроизведения.
  • Визитки с полезной информацией. Поделиться контактом через NFC Tag проще, чем через тот же QR-код. Номера телефонов, имена и прочая статистика сразу заносится в адресную книгу и «распаковывается» для последующего использования.

Типы 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.

Чтение 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 метки

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

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