Example Code for Arduino-Register five-dimensional face (I2C)

Last revision 2025/12/17

After burning the code, follow the steps of serial port print data to register five-dimensional face, which are straight, look up, look down, look left, and look right. Only one face is registered each time. If you need to register multiple faces, you can press the RST button to register other faces again.

Hardware Preparation

  • DFRduino UNO R3 (or similar) x 1
  • Gravity: 3D Face Recognition Module - UART&I2C x1

Software Preparation

Wiring Diagram

Turn the dial switch for switching communication mode to the I2C end

Arduino connection diagram

Other Preparation Work

Turn the dial switch for switching communication mode to the I2C end. Ensure the power supply meets the module's requirements (use Arduino's analog port or I2C interface VCC).

Sample Code

 /*!
  * @file  faceRecognition.ino
  * @brief  face recognition demo
  * @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
  * @license The MIT License (MIT)
  * @author ZhixinLiu([email protected])
  * @version V1.0
  * @date 2023-12-07
  * @url https://github.com/DFRobot/DFRobot_3DFace
  */

#include "DFRobot_3DFace.h"

#define I2C_COMMUNICATION  //use I2C for communication, but use the serial port for communication if the line of codes were masked

#ifdef  I2C_COMMUNICATION
  DFRobot_3DFace_I2C face(&Wire ,DEVICE_ADDR);
#else
/* ---------------------------------------------------------------------------------------------------------------------
 *    board   |             MCU                | Leonardo/Mega2560/M0 |    UNO    | ESP8266 | ESP32 |  microbit  |   m0  |
 *     VCC    |            3.3V/5V             |        VCC           |    VCC    |   VCC   |  VCC  |     X      |  vcc  |
 *     GND    |              GND               |        GND           |    GND    |   GND   |  GND  |     X      |  gnd  |
 *     RX     |              TX                |     Serial1 TX1      |     5     |   5/D6  |  D2   |     X      |  tx1  |
 *     TX     |              RX                |     Serial1 RX1      |     4     |   4/D7  |  D3   |     X      |  rx1  |
 * ----------------------------------------------------------------------------------------------------------------------*/
/* Baud rate cannot be changed */
  #if defined(ARDUINO_AVR_UNO) || defined(ESP8266)
    SoftwareSerial mySerial(4, 5);
    DFRobot_3DFace_UART face(&mySerial ,57600);
  #elif defined(ESP32)
    DFRobot_3DFace_UART face(&Serial1 ,57600 ,/*rx*/D2 ,/*tx*/D3);
  #else
    DFRobot_3DFace_UART face(&Serial1 ,57600);
  #endif
#endif

void setup()
{
  Serial.begin(115200);
  while(!Serial);
  randomSeed(analogRead(A0));
  while(!face.begin()){
    Serial.println("NO Deivces !");
    delay(1000);
  } Serial.println("Device connected!");


  sUserData_t data = face.getFaceMessage();
  if(data.result == true){
    Serial.print("user number = ");
    Serial.println(data.user_count);
  }

  char rName[40] = {0};
  Serial.println("face resgistering !");
  Serial.println("Please look straight into the camera.");
  sFaceReg_t faceReg = face.directRegistration();
  if(faceReg.result){
    Serial.print("register      direction = ");
    Serial.println(faceReg.direction);
    Serial.println("Direct view record success");
    Serial.println("Please look up.");
    faceReg = face.lookUpRegistration();
  }
  if(faceReg.result){
    Serial.print("register      direction = ");
    Serial.println(faceReg.direction);
    Serial.println("look up record success");
    Serial.println("Please look down.");
    faceReg = face.lookDownRegistration();
  }
  if(faceReg.result){
    Serial.print("register      direction = ");
    Serial.println(faceReg.direction);
    Serial.println("look down record success");
    Serial.println("Please look to the left.");
    faceReg = face.turnLeftRegistration();
  }
  if(faceReg.result){
    Serial.print("register      direction = ");
    Serial.println(faceReg.direction);
    Serial.println("look left record success");
    Serial.println("Please look to the right.");
    uint16_t randNumber = random(analogRead(A0));
    sprintf(rName, "fiveName%d", randNumber);
    faceReg = face.turnRightRegistration(rName);
  }

  if(faceReg.result){
    Serial.println("five face resgistering success!");
    Serial.print("regiseter     user name = ");
    Serial.println(rName);
    Serial.print("regiseter     user id = ");
    Serial.println(faceReg.userID);
  }else{
    Serial.print("five face resgistering faild cause = ");
    Serial.println(face.anaysisCode((eResponseCode_t)faceReg.errorCode));
  }
}

void loop()
{
  delay(1000);
}

Result

Register a five-dimensional face according to the serial port printing data steps. Each step will provide feedback on whether the recognition is successful.

Arduino serial port printing data diagram

Additional Information

Turn the dial switch for switching communication mode to the I2C end.

Was this article helpful?

TOP