pdf-icon

Arduino 上手教程

2. 设备开发 & 案例程序

5. 拓展模块

6. 应用案例

Hat Finger Arduino 使用教程

1. 准备工作

注意
需要在 GitHub 上下载最新的库版本,库地址: M5-FPC1020A - M5Stack GitHub,请勿在 Arduino Library 中下载。(如有疑问,请参考此教程

2. 注意事项

引脚兼容性
由于每款主机的引脚配置不同,使用前请参考产品文档中的引脚兼容表,并根据实际引脚连接情况修改案例程序。

3. 案例程序

  • 本教程中使用的主控设备为 StickC-Plus2 ,搭配 Hat Finger 模块。本指纹识别模块采用串口的方式通讯,根据实际的电路连接修改程序中的引脚定义,设备堆叠后对应的串口 IO 为 G26 (RX)G0 (TX)
cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
/**
 * @file Unit_Finger_M5StickCPlus.ino
 * @author Zovey (liangzhuowei@m5stack.com)
 * @brief
 * @version 0.1
 * @date 2025-07-04
 *
 * @Hardwares: StickC-Plus2 + Hat Finger
 * @Dependent Library:
 * M5_FPC1020A: https://github.com/m5stack/M5-FPC1020A
 */

#include <M5Unified.h>
#include "M5_FPC1020A.h"

M5_FPC1020A finger;
uint8_t user_id = 0;

bool add_user_process(uint8_t id, uint8_t permission) ;
bool user_check(void);

void setup() {
    M5.begin();
    Serial.begin(115200);
    M5.Display.setRotation(1);
    M5.Display.setTextColor(BLACK);
    M5.Display.setTextSize(1);
    M5.Display.setFont(&fonts::FreeMonoBold9pt7b);
    M5.Display.setCursor(0, 0);
    M5.Display.println("Finger Unit init...");
    if (!finger.begin(&Serial2, 26, 0, 19200)) {
        Serial.println("FPC1020A not found");
        while (1) delay(1);
    }
    M5.Display.fillRect(0, 0, 240, 135, WHITE);
    M5.Display.setCursor(0, 0);
    M5.Display.println("Finger Unit TEST");

    uint8_t userNum = finger.getUserCount();
    Serial.print("userNum:");
    Serial.println(userNum);

    finger.delAllFinger();
    M5.Display.println("All User Deleted");

    M5.Display.println("Btn.A add a user");
    M5.Display.println("Btn.B verify user");
}

uint8_t new_user_id = 1;

void loop() {
    M5.update();
    if (M5.BtnA.wasPressed()) {
        // user id: 1 ~ 0xfff
        if (add_user_process(new_user_id, 1)) {
            Serial.println("add user success");
            M5.Display.println("add user success");
            new_user_id++;
        }
    }

    if (M5.BtnB.wasPressed()) {
        M5.Display.fillRect(0, 0, 240, 135, WHITE);
        M5.Display.setCursor(0, 0);
        if(new_user_id == 1)    M5.Display.printf("There is no id. Please add the user first!\r\n");
        user_check();
    }
}

bool add_user_process(uint8_t id, uint8_t permission) {
    uint8_t a = 40;
    M5.Display.fillRect(0, 0, 240, 135, WHITE);
    M5.Display.setCursor(0, 0);
    M5.Display.println("add finger process:");
    M5.Display.println("put your finger on the sensor");
    for (uint8_t i = 0; i < 6; i++) {
        while (!finger.addFinger(id, permission, i)) {
            Serial.printf("Finger ID: %d Finger Record:%d error\r\n", id, i);
            Serial.println("Retry...");
            delay(1000);
        };
        a += 9;
        M5.Display.scroll(0, -9);
        M5.Display.fillRect(0, a, 240, 135, WHITE);
        M5.Display.setCursor(0, a);
        M5.Display.printf("add finger count:%d/6\r\n", i + 1);
        Serial.printf("Finger ID: %d Finger Record:%d ok\r\n", id, i);
    }
    M5.Display.printf("Finger ID: %d added\r\n", id);
    return true;
}

bool user_check(void){
    while((new_user_id > 1)){
        uint8_t res = finger.available();
        if (res == ACK_SUCCESS) {
            M5.Display.println("Success");
            Serial.println("Success");
            M5.Display.print("User ID: ");
            Serial.print("User ID: ");
            M5.Display.println(finger.getFingerID());
            Serial.println(finger.getFingerID());
            M5.Display.print("User Permission: ");
            Serial.print("User Permission: ");
            M5.Display.println(finger.getFingerPermission());
            Serial.println(finger.getFingerPermission());
            return true;
        } else {
            M5.Display.fillRect(0, 0, 240, 135, WHITE);
            M5.Display.setCursor(0, 0);
            Serial.println("Please put your ID Finger on the sensor");
            M5.Display.println("Please put your ID Finger on the sensor");
            delay(1000);
        }
    }
    return false;
}

4. 指纹识别

  • 在初始页展示了该例程的功能,按下 Btn.A 按键进入指纹录入页面,按下 Btn.B 按键进入指纹识别页面。
  • 进入指纹录入页面后,把需要录入指纹的手指放在传感器上,并等待录入完成。
  • 随后可以进行指纹识别测试,按下 Btn.B 按钮,将手指放在传感器上,并等待识别完成。当出现 Success 等字样时,表示识别成功(此界面需识别成功才可切换)。
On This Page