Uso de XIAO_ESP32S3_Sense como sensor de IA
Este wiki proporciona una guía paso a paso sobre cómo configurar la salida de un modelo en SenseCraft AI y usar el XIAO ESP32S3 Sense como un sensor de IA. Siguiendo estas instrucciones, aprenderás cómo conectar el XIAO ESP32S3 Sense a tu ordenador, seleccionar el método de salida adecuado y obtener los datos del modelo utilizando diferentes protocolos de comunicación como UART, I2C y SPI.
Requisitos previos
Sección titulada «Requisitos previos»Antes de continuar, asegúrate de tener lo siguiente:
- XIAO ESP32S3 Sense
- Una placa XIAO adicional (por ejemplo, XIAO ESP32C3) para recibir los datos del modelo
- Cable de datos USB-C para conectar el XIAO ESP32S3 Sense a tu ordenador
- Arduino IDE con la biblioteca Seeed_Arduino_SSCMA instalada
| XIAO ESP32S3 Sense |
|---|
![]() |
Paso 1. Accede al espacio de trabajo de XIAO ESP32S3 Sense y conecta el dispositivo
Sección titulada «Paso 1. Accede al espacio de trabajo de XIAO ESP32S3 Sense y conecta el dispositivo»Accede al espacio de trabajo de XIAO ESP32S3 Sense a través de SenseCraft AI > Models > Workspace > XIAO ESP32S3 Sense, o utiliza el enlace directo al espacio de trabajo.

Usando el cable USB-C, conecta tu placa XIAO ESP32S3 Sense a tu ordenador. Una vez conectada, haz clic en el botón Connect situado en la esquina superior izquierda de la página del espacio de trabajo.

Paso 2. Asegúrate de que haya un modelo cargado en el XIAO ESP32S3 Sense
Sección titulada «Paso 2. Asegúrate de que haya un modelo cargado en el XIAO ESP32S3 Sense»Antes de continuar, asegúrate de que tu placa XIAO ESP32S3 Sense tenga cargado un modelo entrenado. Si aún no has cargado un modelo, consulta la documentación de SenseCraft AI sobre cómo entrenar y desplegar modelos en tu dispositivo.
Si quieres utilizar tu propio modelo entrenado, puedes consultar los dos wikis siguientes.
Paso 3. Prepara el método y el programa que quieres utilizar
Sección titulada «Paso 3. Prepara el método y el programa que quieres utilizar»XIAO admite la salida de resultados del modelo mediante UART, IIC o SPI; puedes elegir cómo quieres sacar los resultados según la situación real.
Opción 1. Comunicación UART
Sección titulada «Opción 1. Comunicación UART»Conecta los pines TX y RX de las dos placas XIAO entre sí. Para el XIAO ESP32S3 Sense como sensor de IA (ya modelado), los pines de salida se definen como:
- TX: GPIO43
- RX: GPIO44

Descarga la biblioteca Seeed_Arduino_SSCMA desde GitHub y añádela a tu entorno de Arduino.
Utiliza el código del siguiente ejemplo:
#include <Seeed_Arduino_SSCMA.h>
#ifdef ESP32#include <HardwareSerial.h>
// Define two Serial devices mapped to the two internal UARTsHardwareSerial atSerial(0);
#else#define atSerial Serial1#endif
SSCMA AI;
void setup(){ Serial.begin(9600); AI.begin(&atSerial);}
void loop(){ if (!AI.invoke(1,false,true)) { Serial.println("invoke success"); Serial.print("perf: prepocess="); Serial.print(AI.perf().prepocess); Serial.print(", inference="); Serial.print(AI.perf().inference); Serial.print(", postpocess="); Serial.println(AI.perf().postprocess);
for (int i = 0; i < AI.boxes().size(); i++) { Serial.print("Box["); Serial.print(i); Serial.print("] target="); Serial.print(AI.boxes()[i].target); Serial.print(", score="); Serial.print(AI.boxes()[i].score); Serial.print(", x="); Serial.print(AI.boxes()[i].x); Serial.print(", y="); Serial.print(AI.boxes()[i].y); Serial.print(", w="); Serial.print(AI.boxes()[i].w); Serial.print(", h="); Serial.println(AI.boxes()[i].h); } for (int i = 0; i < AI.classes().size(); i++) { Serial.print("Class["); Serial.print(i); Serial.print("] target="); Serial.print(AI.classes()[i].target); Serial.print(", score="); Serial.println(AI.classes()[i].score); } for (int i = 0; i < AI.points().size(); i++) { Serial.print("Point["); Serial.print(i); Serial.print("]: target="); Serial.print(AI.points()[i].target); Serial.print(", score="); Serial.print(AI.points()[i].score); Serial.print(", x="); Serial.print(AI.points()[i].x); Serial.print(", y="); Serial.println(AI.points()[i].y); } for (int i = 0; i < AI.keypoints().size(); i++) { Serial.print("keypoint["); Serial.print(i); Serial.print("] target="); Serial.print(AI.keypoints()[i].box.target); Serial.print(", score="); Serial.print(AI.keypoints()[i].box.score); Serial.print(", box:[x="); Serial.print(AI.keypoints()[i].box.x); Serial.print(", y="); Serial.print(AI.keypoints()[i].box.y); Serial.print(", w="); Serial.print(AI.keypoints()[i].box.w); Serial.print(", h="); Serial.print(AI.keypoints()[i].box.h); Serial.print("], points:["); for (int j = 0; j < AI.keypoints()[i].points.size(); j++) { Serial.print("["); Serial.print(AI.keypoints()[i].points[j].x); Serial.print(","); Serial.print(AI.keypoints()[i].points[j].y); Serial.print("],"); } Serial.println("]"); } if(!AI.last_image().isEmpty()) { Serial.print("Last image:"); Serial.println(AI.last_image().c_str()); } }}Si todo va bien, verás el mensaje de salida del resultado del modelo como se muestra a continuación.

Opción 2. Comunicación I2C
Sección titulada «Opción 2. Comunicación I2C»Conecta los pines SDA y SCL de las dos placas XIAO entre sí. Para el XIAO ESP32S3 Sense como sensor de IA (ya modelado), los pines de salida se definen como:
- SDA: GPIO5 (con resistencia de pull-up)
- SCL: GPIO6 (con resistencia de pull-up)
- Dirección esclava I2C a
0x62

Descarga la biblioteca Seeed_Arduino_SSCMA desde GitHub y añádela a tu entorno de Arduino.
Utiliza el código del siguiente ejemplo:
#include <Seeed_Arduino_SSCMA.h>#include <Wire.h>
SSCMA AI;
void setup(){ Wire.begin(); AI.begin(&Wire); Serial.begin(9600);}
void loop(){ if (!AI.invoke()) { Serial.println("invoke success"); Serial.print("perf: prepocess="); Serial.print(AI.perf().prepocess); Serial.print(", inference="); Serial.print(AI.perf().inference); Serial.print(", postpocess="); Serial.println(AI.perf().postprocess);
for (int i = 0; i < AI.boxes().size(); i++) { Serial.print("Box["); Serial.print(i); Serial.print("] target="); Serial.print(AI.boxes()[i].target); Serial.print(", score="); Serial.print(AI.boxes()[i].score); Serial.print(", x="); Serial.print(AI.boxes()[i].x); Serial.print(", y="); Serial.print(AI.boxes()[i].y); Serial.print(", w="); Serial.print(AI.boxes()[i].w); Serial.print(", h="); Serial.println(AI.boxes()[i].h); } for (int i = 0; i < AI.classes().size(); i++) { Serial.print("Class["); Serial.print(i); Serial.print("] target="); Serial.print(AI.classes()[i].target); Serial.print(", score="); Serial.println(AI.classes()[i].score); } for (int i = 0; i < AI.points().size(); i++) { Serial.print("Point["); Serial.print(i); Serial.print("]: target="); Serial.print(AI.points()[i].target); Serial.print(", score="); Serial.print(AI.points()[i].score); Serial.print(", x="); Serial.print(AI.points()[i].x); Serial.print(", y="); Serial.println(AI.points()[i].y); } for (int i = 0; i < AI.keypoints().size(); i++) { Serial.print("keypoint["); Serial.print(i); Serial.print("] target="); Serial.print(AI.keypoints()[i].box.target); Serial.print(", score="); Serial.print(AI.keypoints()[i].box.score); Serial.print(", box:[x="); Serial.print(AI.keypoints()[i].box.x); Serial.print(", y="); Serial.print(AI.keypoints()[i].box.y); Serial.print(", w="); Serial.print(AI.keypoints()[i].box.w); Serial.print(", h="); Serial.print(AI.keypoints()[i].box.h); Serial.print("], points:["); for (int j = 0; j < AI.keypoints()[i].points.size(); j++) { Serial.print("["); Serial.print(AI.keypoints()[i].points[j].x); Serial.print(","); Serial.print(AI.keypoints()[i].points[j].y); Serial.print("],"); } Serial.println("]"); } }}Si todo va bien, verás el mensaje de salida del resultado del modelo como se muestra a continuación.

Opción 3. Comunicación SPI
Sección titulada «Opción 3. Comunicación SPI»- Conecta entre sí los siguientes pines de las dos placas XIAO. Para el sensor de IA (ya modelado) XIAO ESP32S3 Sense, los pines de salida se definen como:
- MOSI: GPIO9 (con resistencia pull-up)
- MISO: GPIO8
- SCLK: GPIO7 (con resistencia pull-up)
- CS: GPIO4 (con resistencia pull-up)

- Descarga la biblioteca Seeed_Arduino_SSCMA desde GitHub y añádela a tu entorno de Arduino.
- Modifica el código de los ejemplos proporcionados para utilizar la comunicación SPI.
#include <Seeed_Arduino_SSCMA.h>#include <SPI.h>
SSCMA AI;
void setup(){ SPI.begin(SCK, MISO, MOSI, -1); AI.begin(&SPI, D3, -1, -1); Serial.begin(9600);}
void loop(){ if (!AI.invoke()) { Serial.println("invoke success"); Serial.print("perf: prepocess="); Serial.print(AI.perf().prepocess); Serial.print(", inference="); Serial.print(AI.perf().inference); Serial.print(", postpocess="); Serial.println(AI.perf().postprocess);
for (int i = 0; i < AI.boxes().size(); i++) { Serial.print("Box["); Serial.print(i); Serial.print("] target="); Serial.print(AI.boxes()[i].target); Serial.print(", score="); Serial.print(AI.boxes()[i].score); Serial.print(", x="); Serial.print(AI.boxes()[i].x); Serial.print(", y="); Serial.print(AI.boxes()[i].y); Serial.print(", w="); Serial.print(AI.boxes()[i].w); Serial.print(", h="); Serial.println(AI.boxes()[i].h); } for (int i = 0; i < AI.classes().size(); i++) { Serial.print("Class["); Serial.print(i); Serial.print("] target="); Serial.print(AI.classes()[i].target); Serial.print(", score="); Serial.println(AI.classes()[i].score); } for (int i = 0; i < AI.points().size(); i++) { Serial.print("Point["); Serial.print(i); Serial.print("]: target="); Serial.print(AI.points()[i].target); Serial.print(", score="); Serial.print(AI.points()[i].score); Serial.print(", x="); Serial.print(AI.points()[i].x); Serial.print(", y="); Serial.println(AI.points()[i].y); } for (int i = 0; i < AI.keypoints().size(); i++) { Serial.print("keypoint["); Serial.print(i); Serial.print("] target="); Serial.print(AI.keypoints()[i].box.target); Serial.print(", score="); Serial.print(AI.keypoints()[i].box.score); Serial.print(", box:[x="); Serial.print(AI.keypoints()[i].box.x); Serial.print(", y="); Serial.print(AI.keypoints()[i].box.y); Serial.print(", w="); Serial.print(AI.keypoints()[i].box.w); Serial.print(", h="); Serial.print(AI.keypoints()[i].box.h); Serial.print("], points:["); for (int j = 0; j < AI.keypoints()[i].points.size(); j++) { Serial.print("["); Serial.print(AI.keypoints()[i].points[j].x); Serial.print(","); Serial.print(AI.keypoints()[i].points[j].y); Serial.print("],"); } Serial.println("]"); } }}Si todo va bien, verás el mensaje de salida del resultado del modelo como se muestra a continuación.

Paso 4: Carga el código y ejecútalo
Sección titulada «Paso 4: Carga el código y ejecútalo»Abre el código de ejemplo apropiado en el IDE de Arduino según el protocolo de comunicación que hayas elegido. Verifica y sube el código a la placa XIAO receptora. Abre el monitor serie en el IDE de Arduino para ver los datos del modelo recibidos.

Conclusión
Sección titulada «Conclusión»Siguiendo esta guía paso a paso, has configurado correctamente la salida de un modelo en SenseCraft AI y has utilizado la XIAO ESP32S3 Sense como un sensor de IA. Ahora puedes obtener los datos del modelo utilizando diferentes protocolos de comunicación como UART, I2C o SPI, según los requisitos de tu proyecto.
Recuerda consultar el código de ejemplo proporcionado y realizar las modificaciones necesarias según tu configuración específica y la elección del protocolo de comunicación.
Si encuentras algún problema o tienes más preguntas, consulta la documentación de Seeed Studio o solicita ayuda en los foros de la comunidad.
¡Disfruta de la sensorización con tu XIAO ESP32S3 Sense y SenseCraft AI!
Soporte técnico y debate sobre productos
Sección titulada «Soporte técnico y debate sobre productos»Gracias por elegir nuestros productos. Estamos aquí para ofrecerte diferentes tipos de soporte y garantizar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para adaptarnos a diferentes preferencias y necesidades.
