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

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

Что такое nfc?

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

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

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

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

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

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

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

Виды меток nfc

С самой технологией всё более менее понятно. Тогда зачем столько видов меток предлагается производителями? Почему одни стоят дешевле, а другие в 2-3 раза дороже? Давайте разберемся!

Стандартом ISO 14443A описывается 4 вида меток, ещё одна описывается стандартом ISO 18092:

ТипСтандартПамятьСкорость обменаЗаписьчтениеЗащита от коллизий
1ISO14443A96б-2кб106кб/сданет
2ISO14443A96б-2кб106кб/сдада
3ISO1809296б-2кб212кб/сдада
4ISO14443A2/4/8кбдо 424кб/сдада
5ISO14443Aдо 4кб106кб/сдада
  1. Тип 1 – ранняя разработка, слабо распространен из-за отсутствия защиты от коллизий.

Для справки: коллизии возникают при одновременной передаче данных двумя источниками.

  1. Тип 2 – уже поинтереснее, но всё еще не имеет шифрования.
  2. Тип 3 – интересен тем, что поддерживает шифрование данных, но сильно дороже.
  3. Тип 4 – имеет увеличенное количество памяти, что позволяет сохранить больше данных.

Фото 3Наиболее распространенным является тип 5 – Mifare Classic tag, компании NXP Semiconductors.

Он наиболее выгоден по балансу цена-качество.

Кроме отличий в технологии исполнения, метки имеют разные форму и размеры. Чаще всего они продаются в форме простых наклеек с тематическим рисунком.

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

В форме наклеек метку можно приклеить в любое удобное место:

  • книгу;
  • журнал;
  • крышку ноутбука;
  • wifi роутер;
  • торпеду авто;
  • мебель.

Метки в таком формате имеют защиту от влаги, а для улицы есть термостойкие метки с режимами -10oС 60oС.

Альтернативный формат – брелок в пластиковом корпусе. Этот вариант позволяет носить метку в кармане, не беспокоясь за ее целостность.

Где приобретают метки?

Если вам необходимы наклейки, которыми легче всего пользоваться, изучите товары на AliExpress – только здесь вы найдете большой выбор. Да и цена вас приятно удивит – комплект из десяти меток обойдется в 220 рублей (пример – ntag 213).

Производитель значения не имеет – на работоспособности наклеек это не сказывается. Отличия заключаются только в формах и изображенных рисунках.

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

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

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

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

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

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

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

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

Сама технология полностью безопасна для человека, так как использует безопасную частоту 13.56 МГц. А из-за небольшой дальности действия, уровень магнитного излучения очень мал.

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

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

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

Как запрограммировать?

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

Проблемы NFC:  Обзор Xiaomi Redmi Note 8T: смартфон с NFC — Отзывы TehnObzor

Итак, как запрограммировать метку? Для этого действуйте по следующему алгоритму:

  1. зафиксируйте наклейку к месту ее основного применения;
  2. откройте Гугл Маркет Плей, пройдите авторизацию в системе;
  3. найдите необходимое приложение – Tag Writer, Trigger, NfC Tools, NFC Tasks, NFC Taginfo;
  4. выполните полную установку на устройство;
  5. откройте программу, создайте нужную задачу для заблаговременно зафиксированного стикера;
  6. приблизьте мобильный телефон считывателем NFC меток к наклейке, проверьте срабатывание отклика.

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

Как использовать?

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

  1. Поделится своими контактами – например так: прикрепить метку на лобовое стекло, теперь, если машина мешает выезду, можно отправить смс или позвонить.
  2. Цифровая визитка своими руками – к обычной визитке клеим нашу метку, теперь наши деловые партнеры могут перенести наш контакт в записную книжку телефона одним касанием.
  3. Пароль от домашнего Wi-Fi. Клеим метку на роутер и записываем в него пароль с помощью приложения InstaWifi. Теперь ваши гости смогут подключится к вашему Wifi роутеру просто прикоснувшись к метке.
  4. Запуск синхронизации смартфона с домашним компьютером. Метку можно приклеить на ноутбук или системный блок и прописать в него запуск приложения для синхронизации данных.
  5. Передать адрес встречи в Гугл Картах – нет нужды записывать, переносить текст в смс, просто создаем место в Гугл Картах у себя на телефоне и записываем на специальную метку в офисе. Каждый сотрудник считывает ее в удобное для себя время.
  6. Включение точки доступа. Клеим рядом с ноутбуком метку, далее устанавливаем приложение Trigger. Добавим новое задание, в качестве триггера выбираем NFC, выбор ограничений оставляем по умолчанию, в качестве действия выбираем “Беспроводные и локальные сети -> Wifi-зона”,а на последнем экране подносим к NFC-метке. В результате, если вы выходите с ноутбуком за пределы работы вашего Wifi роутера, то прикоснитесь к метке и ваш смартфон переключится в режим точки доступа, а ноутбук продолжит получать доступ к интернету.
  7. Включение ночного режима. TagWriter настраиваем на включение бесшумного режима. Теперь, как только вы поднесёте смартфон к этой метке, звуки уведомлений отключатся и ничто не потревожит ваш сон. А ещё одну метку сделайте для отключения бесшумного режима, чтобы утром ваш смартфон вернулся в исходное состояние.
  8. Автоматизируйте свой авто. Используйте метку в автомобиле для включения Bluetooth, 3G, запуска плеера или GPS навигатора. Теперь вы
  9. На рынке постепенно появляются устройства, поддерживающие NFC, — стереосистемы, телевизоры, которые позволяют создавать пару с телефоном или планшетом для удалённого управления.
  10. В сфере управления материально-техническими ресурсами можно использовать NDEF записи для хранения информации о месте отправления товаров, об их прохождении различных промежуточных пунктов и тому подобном.
  11. Управление освещением. Производитель чипов NXP объединился со специалистами по созданию умного дома EnOcean. На выставке CES 2021 они показали продукт, который использует NFC для настройки и добавления элементов освещения в домашнюю сеть.
  12. Замки, использующие NFC-карты вместо ключа, довольно часто встречаются на Западе, но если в вашем офисе есть электронные пропуска, то можно записать информацию с них в Google Pay и пользоваться смартфоном. Цена таких замков в магазинах не превышает 200 долларов, а комбинированные замки и того дешевле. Метки можно записывать в телефон, в специальное NFC-кольцо, в брелок – в общем, тиражировать для кого надо.
  13. В домашней библиотеке. Создать подробное описание каждой книги, а на корешок прикрепить аккуратную метку NFC. Теперь можно получить информацию о книге не вынимая ее из полки и не листая описание.

Как это работает:

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

Если вас заинтересовала тема NFC, почитайте и другие наши статьи: 

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

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

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

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

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

Метим территорию

Итак, наш план действий: научить смарфтон реагировать определенным образом на определенную же метку NFC. У каждой метки есть идентификатор. Гаджет должен опознать его и выполнить «запрограммированные» действия. Чтобы привязать действия к ID метки нам понадобится одно из подходящих приложений — например, NFC ReTag Free.

ШАГ 1. Качаем из магазина, запускаем. Подносим нашу метку — в данном случае транспортную карту. Приложение опознает ее и сообщает нам идентификатор.

Лайфхак с транспортной картой: "программируем" смартфон на NFC меткуШАГ 2. Даем метке более понятное обозначение. Жмем на зеленую кнопку «Действия» и видим список действий, которые можем привязать к этой метке.

Тут много всего интересного — запуск приложений, включение Wi-Fi, изменение громкости сигнала, звонок на определенный номер…

Лайфхак с транспортной картой: "программируем" смартфон на NFC меткуШАГ 3. Выбираем для примера запуск Яндекс.Навигатора.Лайфхак с транспортной картой: "программируем" смартфон на NFC меткуШАГ 3. Выбираем для примера запуск Яндекс.Навигатора.Чтение и запись NFC меток с помощью ArduinoШАГ 4. Ждем кнопку ОК — собственно, все готово. Проверяем результат. Подносим разблокированный смартфон к транспортной карте, и вуаля: навигатор запускается автоматически. Мы взяли самую «доступную» метку NFC, но можно купить и более практичную, в форме наклейки. Такую можно наклеить, например, на держатель для смартфона в автомобиле — установите в него гаджет, и навигатор загрузится автоматически.

Открываем все двери

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

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

Проблемы NFC:  Приложения для бесконтактной оплаты на Android скачать бесплатно на FreeSoft

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

У 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).

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

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

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

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

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

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

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

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

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

Здравствуйте. Хочу реализовать такую штуку. Знаю, что это не целесообразно и никому не нужно — просто хочу узнать, возможно ли это вообще и если возможно, то как лучше?

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

Так вот как это должно происходить?
1) Возьмем например java (хотя в окне выбора пользователя наверно не получиться запустить java-приложение, или я не прав?). Так вот, отыскал я API. По моему java прекрасно работает со смарт-картами (вроде бы одно и тоже что и NFC). Когда пользователь кладет свой телефон на NFC-reader, срабатывает слушатель в программе обрабатывает событие и предоставляет пользователю доступ или привилегии, ну не суть важна.

2) NFC подрозумевает обмен данными. В чем главный вопрос? Телефон с NFC какие данные и как и может ли вообще оправлять на NFC-Reader, и возможно ли их потом оттуда считать? Например, с NFC метки телефон считывает, но не посылает данные на NFC-метку. Я же под данными подразумеваю хоть какая-нибудь маленькую строчку, например SN или MAC телефона, который однозначно идентифицирует владельца в системе компьютера. Например есть БД, полученная строка по NFC-каналу приложением отправлятся в БД, как-нибудь еще обрабатывается и приложение получает ответ с инструкциями что делать, пользователь видит результат на экране (пошел вон — добро пожаловать).

Заранее благодарен за ответ.

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

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

Вся операция по прошивке метки выполняется с помощью своего смартфона и небольшой программы.

Начнем:

  1. Фото 4Установите из Play Market программу TagWriter – официальное приложение от компании-производителя NXP. Она полностью бесплатна.
  2. Выбираем пункт: Create, write and store.
  3. Дальше пункт: New.
  4. Теперь выбираем тип записи. Это может быть простой текст, телефонный номер, ссылка в интернет, запуск приложения или данные для Bluetooth-соединения. Есть и другие, но перечисленные выше самые употребляемые. Для пробы нам подойдет просто текст.
  5. Набираем любой текст.
  6. Нажимаем Next.
  7. Теперь мы попали на экран дополнительных опций. Тут можно выбрать приложение, для запуска после прочтения этой метки; установить защиту на перезапись этой метки другим устройством. Также здесь будет информация о моделях чипа, которые смогут вместить наше сообщение.
  8. Нажимаем Next.
  9. Теперь поднесем смартфон к метке.
  10. Поздравления! Вы только, что прошили свою первую NFC-метку.

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

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

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

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

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

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

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

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

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

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

Смартфон как способ оплаты

NFC совместима со стандартом ISO 14443 и объединяет множество бесконтактных карт, в том числе банковские карты, поддерживающее MasterCard PayPass или VISA PayWave. Пластиковая карта содержит микропроцессор с ОС и платежным приложением для взаимодействия с данными конкретного клиента.

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

Проблемы NFC:  Как перенести данные с одного Android-устройства на другое | Смартфоны | Блог | Клуб DNS

Чтобы управлять бесконтактными приложениями удаленно, производители смартфонов и поставщики услуг подключаются к TSM — службе, которая обеспечивает доступ к защищенным данным на терминалах с поддержкой NFC. Она удаленно управляет чипами Secure Element в смартфонах, сам смартфон при этом является своего рода модемом, работающим через безопасный канал связи.

При совершении покупок свыше 1000 рублей вас могут попросить ввести PIN-код или поставить подпись на чеке — здесь уже все зависит от банка.

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

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

Kotlin

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

Плата расширения 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-записи.

Читаем 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 } // Обработка массива сообщений. ... } }
}
@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);

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

Заключение

Примечательно то, что технология доступна многим потребителям. Изготовители все чаще интегрируют модуль НФС в выпускаемые мобильные телефоны, не оставляют без внимания и различные аксессуары.

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

Отметим, что тип метки NFC MIFARE Classic не поддерживается Samsung Galaxy S6 и другими устройствами.

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

Что делать в подобной ситуации? Решение проблемы есть – заменить чип НФС. Правда, обойдется такое действие достаточно дорого.

Оцените статью
NFC в смартфонах