Sample data timeout from IMU and ADC sensors on ESP32-S3-EYE

Question/Issue:
Trying to read IMU data from ESP32-S3-EYE via edge-impulse-daemon failed with sample data timeout message

Context/Use case:
Have downloaded the firmware from Alex’s github at GitHub - figueiredoAF/edge_impulse_esp32s3eye_ingestion_sdk: Edge Impulse C/C++ ingestion sdk adapted to run on Espressif ESP32-S3-Eye and tried to use the IMU sensor (qma7981) onboard of ESP32-S3-EYE via edge impulse CLI.

Steps Taken:

  1. Go to GitHub - figueiredoAF/edge_impulse_esp32s3eye_ingestion_sdk: Edge Impulse C/C++ ingestion sdk adapted to run on Espressif ESP32-S3-Eye and git clone the project to my drive.
  2. Install ESP IDF4.4
  3. Made some minor changes including comment out all code in .\LIS3HDTR_ESP_IDF\CMakeLists.txt to unselect LIS3HDTR, then include the following code in .\QMA7981\CMakeLists.txt to make sure QMA7891 is compiled and linked for the edge impulse firmware:
if(IDF_TARGET STREQUAL "esp32" OR IDF_TARGET STREQUAL "esp8266" OR IDF_TARGET STREQUAL "esp32s3")
  set(COMPONENT_SRCS
    qma7981.c  
    )

  set(COMPONENT_REQUIRES bus)

  set(COMPONENT_ADD_INCLUDEDIRS
    .
    ../bus/include
    )
  register_component()
endif()
  1. Go to the root directory of the project and type in idf.py fullclean followed by idf.py build. No compile error encountered.
  2. Connect ESP32-S3-EYE to my PC, learned it is COM68 in my PC, and type idf.py -p COM68 flash
  3. Open Serial Monitor in Arduino with the following messages which means the board is running.
13:43:21.759 -> Hello from Edge Impulse Device SDK.
13:43:21.759 -> Compiled on Jun 26 2025 11:28:37
13:43:21.759 -> e[0;32mI (633) i2c_bus: i2c0 bus initede[0m
13:43:21.759 -> e[0;33mW (633) qma7981: ID : 90e[0m
13:43:21.759 -> Type AT+HELP to see a list of commands.
13:43:22.044 -> >
  1. Close Serial Monitor, from ESP-IDF 4.4 PowerShell, go to the root directory of the project, and I typed in edge-impulse-dameon, with the following messages:
Edge Impulse serial daemon v1.33.0
(node:26484) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
Endpoints:
    Websocket: wss://remote-mgmt.edgeimpulse.com
    API:       https://studio.edgeimpulse.com
    Ingestion: https://ingestion.edgeimpulse.com

[SER] Connecting to COM68
[SER] Serial is connected, trying to read config...
[SER] Retrieved configuration
[SER] Device is running AT command version 1.8.0

[SER] Device is not connected to remote management API, will use daemon
[WS ] Connecting to wss://remote-mgmt.edgeimpulse.com
[WS ] Connected to wss://remote-mgmt.edgeimpulse.com
[WS ] Device "mictest" is now connected to project "Desktop_cleaner". To connect to another project, run `edge-impulse-daemon --clean`.
[WS ] Go to https://studio.edgeimpulse.com/studio/728716/acquisition/training to build your machine learning model!
  1. I was directed to my Edge Impulse Account of device “mictest”, acquire audio sample from the web interface. The following messages show up on CLI, which means built-in mic is working. Actually I tried camera too and it is working too.
[WS ] Incoming sampling request {
  path: '/api/training/data',
  label: 'imu',
  length: 3000,
  interval: 0.0625,
  hmacKey: '7fcad46a2a360102bea4cd2f4d42394a',
  sensor: 'Built-in microphone'
}
[SER] Configured upload settings
[SER] Sampling started
[SER] Sampling done
[SER] Device not connected to WiFi directly, reading from buffer (bytes 0 - 98548, expecting to read ~131397 bytes...
[SER] Reading 32% complete...
[SER] Reading 81% complete...
[SER] Reading from buffer OK
[SER] File is 98548 bytes after decoding
[SER] Uploading to https://ingestion.edgeimpulse.com/api/training/data
[SER] Uploading to https://ingestion.edgeimpulse.com/api/training/data OK

Then I switched to IMU sensor and repeating the procedures to sample some data.

Expected Outcome:
I expected to read some IMU data and get it uploaded to EI automatically.

Actual Outcome:
The actual outcome:

[WS ] Incoming sampling request {
  path: '/api/training/data',
  label: 'qma7981',
  length: 3000,
  interval: 50,
  hmacKey: '7fcad46a2a360102bea4cd2f4d42394a',
  sensor: 'Inertial'
}
[SER] Configured upload settings
[SER] Sampling started
[WS ] Failed to sample data Timeout when waiting for >  (timeout: 60000) AT+SAMPLESTART=Inertial

Reproducibility:

  • [x ] Always

Environment:

  • Platform: [ESP32-S3-EYE]
  • Build Environment Details: [ESP IDF4.4]
  • OS Version: [Windows 11]
  • Edge Impulse Version (Firmware): [1.3.3]
  • Edge Impulse CLI Version: [No sure how to find it but the AT command version is 1.8.0]

Hello, @kwleung-cityu !
ESP32-S3-EYE is not officially supported by Edge Impulse, so your decision to address this issue in the 3rd part Github repository is correct! We cannot provide help debugging 3rd part code.

One thing that I can mention is that you can send AT commands to the device directly over serial, to see the list of available commands, send AT+HELP. Then you should be able to make sampling request with AT command and observe the output. The timeout means that the board either hangs or outputs something entirely different from what serial daemon is expecting.