http_post_imu.ino
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);
}