Сканер отпечатков пальцев FPC1020
Обновлений по моему замечательному проекту авторизации без пароля WebAuthn не было уже довольно давно. Проект, при этом, вполне себе жив и продолжается. Последняя проблема, с которой я столкнулся, это то, что сканер отпечатков с интерфейсом UART и микроконтроллером не обеспечивает должной безопасности и нужно подключить его напрямую. Поэтому я заказал в Китае пару сканеров, доставка которых заняла больше полутора месяцев.
Модули, которые я нашел в продаже — FPC1020AM и FPC1020AP, произведенные компанией Fingerprints. Это емкостные сканеры с разрешением 192×192 пикселей при 508 точках на дюйм и интерфейсом SPI. По фотографии понять реальный размер было непросто и я был крайне удивлен, какие они миниатюрные.
Описание модулей можно найти в интернере, так что я не буду описывать их полностью. Напишу лишь, как я их подключал.
Модуль FPC1020AM подключается при помощи гибкого шлейфа с шестнадцативыводным разъемом модели BM10NB(0.8)-16DS-0.4V(51).
Назначение выводов у этого сканера следующее:
Модуль FPC1020AP выполнен в корпусе LGA с контактными площадками с нижней стороны корпуса. Информацию по его подключению найти было не так просто, но в конце концов получилось.
Один из документов описывает размеры корпуса и нумерацию выводов, другой их назначение.
Контактные площадки организованы в матрицу 7×7, строки которой пронумерованы от A до G, а столбцы от 1 до 7.
Внимание, модули требуют напряжение питания 1.8V!
В моем репозитории можно скачать библиотеку для Eagle CAD.
Тестовая плата
Для тестирования обоих модулей я заказал простую печатную плату с выводами и регулятором напряжения.
Схема очень проста — модули напрямую подключены на выводы. На плату можно распаять модули обоих типов. Для напряжения 1.8V используется микросхема LP2985 с кермическими конденсаторами.
Платы были изготовлены при помощи сервиса JLCPCB. Обе платы я распаивал при помощи фена и паяльной пасты. Получилось довольно просто и заработало с первого раза.
Подключение тестовых плат к NodeMCU выглядит следующим образом:
- GND <-> GND
- +3.3V <-> GND
- RST <-> D2 (GPIO 4)
- IRQ <-> D1 (GPIO 5)
- CS <-> D8 (GPIO 15)
- CLK <-> D5 (GPIO 14)
- MOSI <-> D7 (GPIO 13)
- MISO <-> D6 (GPIO 12)
Простой скрипт для Arduino инициализирует шину SPI и получает идентификатор устройства из соответсвующего регистра.
#include "Arduino.h"
#include "SPI.h"
#define FPC_IRQ 5
#define FPC_RST 4
class FPC1020
{
public:
void init()
{
// Chip select
pinMode(SS, OUTPUT);
digitalWrite(SS, HIGH);
// IRQ / data ready
pinMode(FPC_IRQ, INPUT);
digitalWrite(FPC_IRQ, LOW);
// RST
pinMode(FPC_RST, OUTPUT);
}
void reset()
{
digitalWrite(FPC_RST, LOW);
delay(10);
digitalWrite(FPC_RST, HIGH);
}
uint16_t hardware_id() {
digitalWrite(SS, LOW);
SPI.write(0xFC);
uint16_t status = SPI.transfer16(0x0);
digitalWrite(SS, HIGH);
return status;
}
};
FPC1020 fpc;
void setup()
{
Serial.begin(115200);
SPI.begin();
fpc.init();
fpc.reset();
delay(300);
Serial.println("FPC1020 test");
Serial.print("Hardware ID: ");
Serial.println(fpc.hardware_id());
}
void loop()
{
delay(1000);
}
Обе платы выдали правильный Hardware ID = 522 (0×20A), следовательно модули работают и подключены правильно.
Следующим шагом будет получение отпечатка пальца, но для этого я буду использовать уже ESP IDF, так как именно на этом фреймворке я разрабатываю свой авторизатор.