Как прочитать билет на метро и автобус с помощью Arduino
Мы с вами уже подробно рассматривали подключение считывателя бесконтактных RFID-меток к Arduino. Теперь давайте посмотрим, что же можно прочитать с билетов на наземный транспорт или метро и сделаем домашний автомат для проверки срока действия билетов и количества оставшихся поездок.
Нам понадобится:
- Arduino (или совместимая плата);
- считыватель RFID RC522;
- макетная плата;
- соединительные провода;
- бесконтактные билеты на транспорт;
- компьютер с Arduino IDE.
Инструкция по чтению данных с билетов МосГорТранса
1Схема подключения RFID-RC522 к Arduino
Подключим RFID-RC522 к Arduino по приведённой схеме.
2Установка библиотеки для работы с RFID-RC522
Скачаем библиотеку для работы с RC522. Установим её, разархивировав в директорию Arduino IDE\libraries
3 Скетч для вывода данныхRFID-билета
Запустим Arduino IDE и откроем из примеров библиотеки скетч, который считывает с RFID-карточки данные и выводит в последовательный порт: Файл Образцы MFRC522 DumpInfo. Загрузим этот скетч в память Arduino.
4Считываем данные с билета метро или наземного транспорта
Откроем монитор последовательного порта (Ctrl+Shift+M). Теперь возьмём любой билет и приложим к считывателю RFID-RC522. В текстовом поле появилась информация о версии прошивки, типе билета, а также содержимое памяти билета (дамп).
5Спецификация бесконтактных карттипа Mifare Ultralight
Мы видим, что тип билета – Mifare Ultralight. На данный тип устройств существует подробная спецификация (datasheet), которую легко можно найти в интернете.
Из спецификации видно, что первые четыре страницы (Page) билета содержат стандартную информацию: уникальный номер (SN или UID), байты защиты от записи (Lock Bytes) и единожды программируемые ячейки (One Time Programmed, OTP). Остальные ячейки памяти билета (страницы с 4 по 15) хранят произвольные данные.
Байты защиты от записи (Lock Bytes), равные во всех билетах F0 00, говорят нам о том, что страницы с 4 по 7 защищены от записи, а страницы памяти с 8 по 15 могут быть перезаписаны.
Но сами байты защиты от записи не заблокированы, поэтому можно снять защиту страниц с 4 по 7 от записи, установив значение Lock Bytes равным 00 00.
6Информация, которая записана на билет МосГорТранс
Давайте попробуем разобраться, что же зашифровано в нашем билете в ячейках памяти с 4 по 15 страницы. На рисунке показаны данные, которые содержит бесконтактный билет метро.
Страница (Page) | Байты | Что записано | Примечание |
---|---|---|---|
4 | 2,3 | Первая часть номера билета, напечатанного на обратной стороне. | Только для чтения. |
5 | 0,1,2 | Вторая часть номера билета. | Только для чтения. |
6 | |||
7 | 0,1,2,3 | Дублирует страницу 6. | |
8 | 0,1 | Дата покупки билета. | Выражается в днях, прошедших с 01.01.1992. В данном случае 0x222F = 8751 дней, т.е. билет был куплен 17.12.2015. |
8 | 2 | Срок действия билета в днях. | В примере 0x5A = 90 дней. |
9 | 1 | Количество оставшихся поездок. | В некоторых случаях, например, на именных социальных картах – количество сделанных поездок. |
10 | 0,1,2,3 | Контрольная сумма. | |
11 | 0,1 | Дата последнего прохода через турникет. | Аналогично дате покупки. |
12-15 | 0,1,2,3 | Дублирование предыдущих четырёх страниц. |
PS. Спасибо за материалы, описанные блогером dark-simpson.