http_post_imu.ino

Arduino Nicla Vision · Archivo : http_post_imu.ino · Lenguaje : Arduino · Uso : Envoyer l’IMU vers un serveur HTTP en Wi-Fi

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);
}

← Volver a la ficha