Example Code for Arduino - Detecting Gesture with ID=1
Last revision 2026/03/05
FireBeetle 2 ESP32-E enables gesture detection with the AI Vision Posture Sensor. Setup includes hardware, Arduino IDE, and library guide. Follow the I2C wiring and use provided sample code for detecting learned gestures and controlling the onboard LED.
Hardware Preparation
- Gravity: AI Posture and Gesture Sensor (SKU: SEN0670) ×1
- FireBeetle 2 ESP32‑E (SKU: DFR0654)
- USB Type‑C cable ×1
- PC ×1
Software Preparation
- Programming environment: Click to download Arduino IDE
- Download and install the sensor library: DFRobot_HumanPose
- Please click here to view: How to install a library?
Wiring Diagram
I²C Connection (The following examples all use I²C communication)

Connection Description:
| Sensor Pin: VCC | Connect to | Main Controller Pin: 5V |
|---|---|---|
| Sensor Pin: GND | Connect to | Main Controller Pin: GND |
| Sensor Pin: C | Connect to | Main Controller Pin: 22/SCL |
| Sensor Pin: D | Connect to | Main Controller Pin: 21/SDA |
UART Connection

Connection Description:
| Sensor Pin: VCC | Connect to | Main Controller Pin: 5V |
|---|---|---|
| Sensor Pin: GND | Connect to | Main Controller Pin: GND |
| Sensor Pin: R | Connect to | Main Controller Pin: 26/D3 |
| Sensor Pin: T | Connect to | Main Controller Pin: 25/D2 |
Note:
- The default communication method of the sensor is I²C. If you need to switch to UART, use the on‑board DIP switch to change the communication method.
- After switching, the sensor must be powered off and on again for the change to take effect.
Sample Code
Function: Drive gesture sensor over I2C, light on LED and print log when gesture ID=1 is detected.
Example Code:
#include <DFRobot_HumanPose.h>
// I2C communication
const uint8_t I2C_ADDR = 0x3A;
DFRobot_HumanPose_I2C humanPose(&Wire, I2C_ADDR);
void setup() {
Serial.begin(115200);
// Initialise the sensor
while (!humanPose.begin()) {
Serial.println("Sensor initialisation failed!");
delay(1000);
}
Serial.println("Sensor initialisation successful!");
// Set hand detection mode
humanPose.setModelType(DFRobot_HumanPose::eHand);
// Reduce false recognition: increase confidence threshold
humanPose.setConfidence(80);
humanPose.setLearnSimilarity(80);
// Initialise LED
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
}
void loop() {
bool ledState = LOW; // Default: LED off
if (humanPose.getResult() == DFRobot_HumanPose::eOK) {
while (humanPose.availableResult()) {
Result *result = humanPose.popResult();
if (!result) continue;
// ==========================================
// ? LED turns on only for ID=1
// ==========================================
if (result->id == 1 && result->score >= 80) {
ledState = HIGH;
Serial.print("✅ Recognised gesture with ID=1: ");
Serial.println(result->name);
}
}
}
// Control the LED
digitalWrite(LED_BUILTIN, ledState);
delay(100);
}
Result
Open the serial monitor and set the baud rate to 115200. When the sensor recognizes a gesture with ID=1 in the learned list and the recognition confidence is not less than 80, the LED light on the main control board will light up, and the serial port will output the recognized gesture ID and name.
For example, if the ID=1 gesture name learned in the upper computer is' yes', after successful recognition, the serial port will print:
✅ Recognized ID=1 gesture: yes
When no gesture is recognized, the recognized gesture ID is not 1, or the confidence level is below the set threshold, the LED light remains off.

Was this article helpful?
