Example Code for Firebeetle 2 ESP32-E - Get Gesture Recognition Data

Last revision 2026/03/05

Learn how to use Firebeetle 2 ESP32-E for gesture recognition with AI Vision Sensor. Follow the guide for hardware and software setup, wiring diagrams, and Arduino code to obtain real-time gesture data including ID, score, and keypoint coordinates.

Hardware Preparation

Software Preparation

Wiring Diagram

I2C Wiring Diagram (This connection method is used in all the following examples)

DFR1115-868-I2C wiring diagram

Pin Connection Description:

  • Sensor: SDA Pin --- (Connects to) --- Main Controller: 21/SDA
  • Sensor: SCL Pin --- (Connects to) --- Main Controller: 22/SCL
  • Sensor: - Pin --- (Connects to) --- Main Controller: GND
  • Sensor: + Pin --- (Connects to) --- Main Controller: 3V3

UART Wiring Diagram

DFR1115-868-UART wiring diagram

Pin Connection Description:

  • Sensor: TX Pin --- (Connects to) --- Main Controller: 14/D6
  • Sensor: RX Pin --- (Connects to) --- Main Controller: 13/D7
  • Sensor: - Pin --- (Connects to) --- Main Controller: GND
  • Sensor: + Pin --- (Connects to) --- Main Controller: 3V3

Sample Code 1

Function: Initialize I2C gesture sensor, set to hand mode, print gesture ID, name, score, bounding box and 21 keypoint coordinates.

#include <DFRobot_HumanPose.h>

#define I2C_ADDR 0x3A
DFRobot_HumanPose_I2C humanPose(&Wire, I2C_ADDR);

void setup()
{
  Serial.begin(115200);
  
  while (!humanPose.begin()) {
    Serial.println("Sensor init fail!");
    delay(1000);
  }
  Serial.println("Sensor init success!");
  
  humanPose.setModelType(DFRobot_HumanPose::eHand);
}

void loop()
{
  if (humanPose.getResult() == DFRobot_HumanPose::eOK) {
    while (humanPose.availableResult()) {
      HandResult *result = static_cast<HandResult *>(humanPose.popResult());
      
      Serial.print("Gesture ID: "); Serial.println(result->id);
      Serial.print("Gesture: "); Serial.println(result->name);
      Serial.print("Score: "); Serial.println(result->score);
      
      Serial.println("score: " + String(result->score));
      Serial.println("xLeft: " + String(result->xLeft));
      Serial.println("yTop: " + String(result->yTop));
      Serial.println("width: " + String(result->width));
      Serial.println("height: " + String(result->height));
      Serial.println("wrist: " + String(result->wrist.x) + ", " + String(result->wrist.y));
      Serial.println("thumbCmc: " + String(result->thumbCmc.x) + ", " + String(result->thumbCmc.y));
      Serial.println("thumbMcp: " + String(result->thumbMcp.x) + ", " + String(result->thumbMcp.y));
      Serial.println("thumbIp: " + String(result->thumbIp.x) + ", " + String(result->thumbIp.y));
      Serial.println("thumbTip: " + String(result->thumbTip.x) + ", " + String(result->thumbTip.y));
      Serial.println("indexFingerMcp: " + String(result->indexFingerMcp.x) + ", " + String(result->indexFingerMcp.y));
      Serial.println("indexFingerPip: " + String(result->indexFingerPip.x) + ", " + String(result->indexFingerPip.y));
      Serial.println("indexFingerDip: " + String(result->indexFingerDip.x) + ", " + String(result->indexFingerDip.y));
      Serial.println("indexFingerTip: " + String(result->indexFingerTip.x) + ", " + String(result->indexFingerTip.y));
      Serial.println("middleFingerMcp: " + String(result->middleFingerMcp.x) + ", " + String(result->middleFingerMcp.y));
      Serial.println("middleFingerPip: " + String(result->middleFingerPip.x) + ", " + String(result->middleFingerPip.y));
      Serial.println("middleFingerDip: " + String(result->middleFingerDip.x) + ", " + String(result->middleFingerDip.y));
      Serial.println("middleFingerTip: " + String(result->middleFingerTip.x) + ", " + String(result->middleFingerTip.y));
      Serial.println("ringFingerMcp: " + String(result->ringFingerMcp.x) + ", " + String(result->ringFingerMcp.y));
      Serial.println("ringFingerPip: " + String(result->ringFingerPip.x) + ", " + String(result->ringFingerPip.y));
      Serial.println("ringFingerDip: " + String(result->ringFingerDip.x) + ", " + String(result->ringFingerDip.y));
      Serial.println("ringFingerTip: " + String(result->ringFingerTip.x) + ", " + String(result->ringFingerTip.y));
      Serial.println("pinkyFingerMcp: " + String(result->pinkyFingerMcp.x) + ", " + String(result->pinkyFingerMcp.y));
      Serial.println("pinkyFingerPip: " + String(result->pinkyFingerPip.x) + ", " + String(result->pinkyFingerPip.y));
      Serial.println("pinkyFingerDip: " + String(result->pinkyFingerDip.x) + ", " + String(result->pinkyFingerDip.y));
      Serial.println("pinkyFingerTip: " + String(result->pinkyFingerTip.x) + ", " + String(result->pinkyFingerTip.y));
      
      Serial.println("--------------------------------");
    }
  }
  
  delay(50);
}

Result

After successful initialization, the sensor cyclically detects hands, printing gesture ID, name, confidence, bounding box and 21 keypoint coordinates in real time, updating every 50ms.

SEN0670- Gesture Result 1

[还有一张图片]

Was this article helpful?

TOP