http_post_imu.ino
La Nicla Vision se vuelve sonda conectada: cada segundo, la trama JSON de aceleraciones se envía por HTTP a un servidor de la red local vía el módulo Wi-Fi embarcado. Un `nc -l -p 8080` basta para validar la cadena sensor → red.
Hardware
Una Arduino Nicla Vision (STM32H7 M7+M4, 23×23 mm) con cámara GC2145, IMU LSM6DSOX, micrófono PDM, ToF (VL53Lx), módulo ESP32 Wi-Fi/BLE y LED RGB (LEDR/G/B). Una red Wi-Fi de 2,4 GHz (el módulo no ve 5 GHz), un servidor o PC en la misma red, la IP de destino.
Cableado
Sin cableado. Colocar la placa en cobertura; la antena embarcada pierde alcance tras una caja metálica.
Funcionamiento
WiFi.begin establece el enlace; WiFiClient abre el socket TCP y la petición POST se escribe a mano (cabeceras + cuerpo JSON de 48 bytes). Content-Length debe cuadrar con el cuerpo, de ahí el snprintf dimensionado.
Ejecución
Programación desde Arduino IDE (core ArduinoCore-mbed) por USB-C; librerías Camera, PDM, LSM6DSOX, WiFiNINA y ArduinoBLE.
Variantes
Pasar a HTTPS (WiFiSSLClient), agrupar 60 medidas por petición para ahorrar radio, o conectar el flujo a MQTT/Arduino Cloud en vez de HTTP crudo.
http_post_imu.ino
// Passerelle Wi-Fi : une ligne JSON d'IMU postée chaque seconde.
#include <WiFiNINA.h>
#include <Arduino_LSM6DSOX.h>
const char *SSID = "votre-reseau";
const char *PASS = "votre-cle";
const char *SERVEUR = "192.168.1.42";
const int PORT = 8080;
WiFiClient client;
void setup() {
Serial.begin(115200);
WiFi.begin(SSID, PASS);
while (WiFi.status() != WL_CONNECTED) { delay(500); }
if (!IMU.begin()) { while (1) { ; } }
}
void loop() {
float ax, ay, az;
if (IMU.accelerationAvailable()) {
IMU.readAcceleration(ax, ay, az);
if (client.connect(SERVEUR, PORT)) {
client.print("POST /imu HTTP/1.1\r\nHost: ");
client.print(SERVEUR);
client.print("\r\nContent-Type: application/json");
client.print("\r\nContent-Length: 48\r\n\r\n");
char corps[49];
snprintf(corps, sizeof(corps),
"{\"ax\":%.3f,\"ay\":%.3f,\"az\":%.3f}", ax, ay, az);
client.print(corps);
client.stop();
Serial.println("POST envoyé");
} else {
Serial.println("Serveur injoignable");
}
}
delay(1000);
}