http_post_imu.ino

Arduino Nicla Vision · Fichier : http_post_imu.ino · Langage : Arduino · Usage : Envoyer l’IMU vers un serveur HTTP en Wi-Fi

La Nicla Vision devient sonde connectée : chaque seconde, la trame JSON des accélérations est postée en HTTP vers un serveur du réseau local via le module Wi-Fi embarqué. Un `nc -l -p 8080` suffit pour valider la chaîne capteur → réseau.

Matériel requis

Une Arduino Nicla Vision (STM32H7 double cœur M7+M4, 23×23 mm) avec caméra GC2145 2 MP, IMU LSM6DSOX, micro PDM, capteur ToF (famille VL53Lx), module sans fil ESP32 (Wi-Fi/BLE) et LED RGB (LEDR=23, LEDG=24, LEDB=25). Un réseau Wi-Fi 2,4 GHz (le module ne voit pas le 5 GHz), un serveur ou un PC sur le même réseau, l’adresse IP de destination.

Câblage

Aucun câblage. Placer la carte dans la zone de couverture ; l’antenne embarquée réduit la portée derrière un boîtier métal.

Fonctionnement

WiFi.begin établit la liaison ; WiFiClient ouvre la socket TCP, la requête POST est écrite à la main (en-têtes + corps JSON de 48 octets). Content-Length doit coller au corps, d’où le snprintf dimensionné.

Exécution

Programmation via Arduino IDE (core ArduinoCore-mbed, target NICLA_VISION) sur le port USB-C ; bibliothèques Camera, PDM, Arduino_LSM6DSOX, WiFiNINA et ArduinoBLE fournies.

Variantes

Passer en HTTPS (WiFiSSLClient), batcher 60 mesures par requête pour économiser le radio, ou brancher le flux sur MQTT/Arduino Cloud au lieu de HTTP brut.

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

← Retour à la fiche