top of page

Programmer un micro-contrôleur pour envoyer des données vers FizziQ Web en USB

Dernière mise à jour : il y a 6 jours


Cette page explique comment programmer un microcontrôleur pour transmettre des mesures de capteurs à FizziQ Web par USB. Le microcontrôleur envoie des lignes de texte dans un format reconnu par FizziQ Web. Les données peuvent ensuite être affichées, enregistrées et analysées dans le cahier d’expérience.

Ce guide traite uniquement le cas de la connexion USB Serial.


Objectif

Dans ce guide, vous allez apprendre à :

  1. comprendre le format USB attendu par FizziQ Web ;

  2. programmer un microcontrôleur pour envoyer des mesures ;

  3. utiliser les bonnes légendes de capteurs ;

  4. envoyer plusieurs capteurs sur plusieurs canaux ;

  5. corriger les erreurs les plus fréquentes.


Prérequis

Pour réaliser cette activité, il faut :

  1. un microcontrôleur avec port USB ou port série USB ;

  2. un ou plusieurs capteurs ;

  3. un câble USB de données ;

  4. FizziQ Web ouvert dans un navigateur compatible ;

  5. un environnement de programmation adapté au microcontrôleur.

Exemples de matériels compatibles :

  1. Arduino Uno, Nano ou Mega ;

  2. ESP32 ou ESP8266 ;

  3. micro:bit ;

  4. Teensy ;

  5. Raspberry Pi Pico.


Comprendre le principe

FizziQ Web ne lit pas directement le capteur. Il lit les lignes de texte envoyées par le microcontrôleur par le port USB.

Votre programme doit donc :

  1. lire la valeur du capteur ;

  2. convertir cette valeur dans une unité utile ;

  3. envoyer une ligne dans le bon format ;

  4. recommencer à intervalle régulier.


Comprendre le format USB attendu par FizziQ Web

En USB, le format à utiliser est :

FZ[CANAL]:[LEGENDE]:[VALEUR]

Exemples :

FZ0:tem:25.3FZ0:hum:65.2FZ1:pre:1013.25FZ2:lum:450


Structure d’un message

Chaque ligne contient :

  1. FZ, le préfixe obligatoire ;

  2. un numéro de canal de 0 à 5 ;

  3. une légende de capteur ;

  4. une valeur numérique.

Exemple :

FZ0:tem:25.3

Ici :

  1. FZ0 désigne le canal 0 ;

  2. tem désigne une température ;

  3. 25.3 est la valeur mesurée.


Connaitre les légendes de capteurs reconnues

FizziQ Web reconnait un ensemble standardisé de légendes associées à des grandeurs physiques mesurées par des capteurs. Chaque légende correspond à une abréviation précise et à une unité physique associée. Voici les principales légendes reconnues pour débuter.


  • tem : Température (°C) - Mesure la température ambiante ou celle d’un objet à l’aide d’un thermomètre ou d’une sonde thermique.

  • pre : Pression atmosphérique (hPa) - Mesure la pression de l’air, généralement à l’aide d’un capteur barométrique.

  • hum : Humidité relative (%) - Mesure la quantité de vapeur d’eau présente dans l’air.

  • lum : Luminosité (lux) - Mesure l’intensité lumineuse reçue par un capteur optique.

  • acc : Accélération (m/s2) - Mesure l’accélération d’un objet dans l’espace sur un ou plusieurs axes.

  • dis : Distance (mm) - Mesure la distance entre le capteur et un obstacle à l’aide d’ultrasons, infrarouge ou laser.

  • son : Température d’une sonde (°C) - Mesure la température à l’aide d’une sonde externe.

  • co2 : Dioxyde de carbone (ppm) - Mesure la concentration de dioxyde de carbone dans l’air.

  • o2 : Oxygène (%) - Mesure la concentration d’oxygène dans l’air.

  • ph : pH (sans unité) - Mesure l’acidité ou l’alcalinité d’une solution.

  • uv : Indice ultraviolet (UV) - Mesure l’intensité du rayonnement ultraviolet.

  • tvo : Composés organiques volatils totaux (ppb) - Mesure la concentration de composés organiques volatils présents dans l’air.

  • inf : Température infrarouge (°C) - Mesure la température d’un objet à distance sans contact.

  • wei : Masse ou poids (kg) - Mesure la masse à l’aide d’un capteur de pesée.

  • ten : Tension électrique (V) - Mesure une tension électrique continue.

  • int : Intensité électrique (A) - Mesure le courant électrique circulant dans un circuit.

  • bou : Direction du compas (deg) - Mesure l’orientation magnétique en degrés.

  • mag : Champ magnétique (mT) - Mesure l’intensité du champ magnétique.

  • pou : Pouls (bpm) - Mesure la fréquence cardiaque en battements par minute.

  • rot : Rotation (rpm) - Mesure une vitesse de rotation.

  • niv : Niveau sonore (dB) - Mesure l’intensité du son dans l’environnement.

  • pm2 : Particules fines PM2.5 (µg/m3) - Mesure la concentration de particules fines en suspension dans l’air.

  • vac : Tension alternative (V) - Mesure une tension électrique alternative.

  • cv : Conductivité électrique (mS/cm) - Mesure la capacité d’un liquide à conduire le courant électrique.

  • cp : Capacité électrique (µA) - Mesure une capacité ou une charge électrique.

  • rs : Résistance électrique (µA ou unité dépendante du capteur) - Mesure une résistance électrique.

  • an : Signal analogique (sans unité définie) - Mesure une valeur analogique brute.

  • wat : Puissance électrique (W) - Mesure une puissance électrique.

  • sp : Spectre lumineux (%) - Mesure la distribution spectrale d’une source lumineuse.

  • red : Canal rouge (sans unité) - Mesure l’intensité lumineuse dans la bande rouge.

  • ext : Mesure externe personnalisée - Permet l’ajout d’une donnée spécifique définie par l’utilisateur.

  • unk : Mesure inconnue - Utilisée lorsque le type de mesure n’est pas identifié.


La détection des légendes n’est pas sensible aux majuscules/minuscules :

Par exemple, Tem, tem ou TEM seront reconnus de la même manière.


Utiliser plusieurs canaux

FizziQ Web gère 6 canaux, de 0 à 5. Cela permet de distinguer plusieurs capteurs du même type.

Exemple avec trois capteurs de température

FZ0:tem:25.3FZ1:tem:22.1FZ2:tem:28.5

Dans FizziQ Web, ces trois capteurs seront reconnus comme trois sources distinctes.


Étape 1 : préparer le matériel

Avant de programmer le microcontrôleur :

  1. branchez le capteur ;

  2. vérifiez le câblage ;

  3. connectez le microcontrôleur à l’ordinateur avec un câble USB de données ;

  4. vérifiez que le microcontrôleur est détecté par l’ordinateur.


Étape 2 : envoyer un premier message de test

Avant d’utiliser un vrai capteur, commencez par envoyer une valeur fixe.

Exemple minimal

void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.println("FZ0:tem:25.3");
  delay(1000);
}

Ce premier test permet de vérifier que FizziQ Web reçoit bien un message correctement formaté.


Étape 3 : configurer correctement le port série

Pour une connexion USB stable, utilisez de préférence :

  1. un baud rate de 115200 ;

  2. 8 bits de données ;

  3. 1 bit d’arrêt ;

  4. aucune parité.

Exemple de configuration

void setup() {
  Serial.begin(115200);

  while (!Serial) {
    ;
  }

  delay(1000);
  Serial.println("# Microcontroleur FizziQ Ready");
}

Les lignes commençant par # servent au débogage.


Étape 4 : programmer un Arduino

Exemple simple avec une température

void setup() {
  Serial.begin(115200);
}

void loop() {
  float temperature = 25.3;

  Serial.print("FZ0:tem:");
  Serial.println(temperature, 2);

  delay(1000);
}

Exemple avec plusieurs capteurs

#define TEMP_PIN A0
#define LIGHT_PIN A1

void setup() {
  Serial.begin(115200);
}

void loop() {
  int rawTemp = analogRead(TEMP_PIN);
  int rawLight = analogRead(LIGHT_PIN);

  float temperature = rawTemp * (5.0 / 1023.0) * 100.0;
  float lux = map(rawLight, 0, 1023, 0, 1000);

  Serial.print("FZ0:tem:");
  Serial.println(temperature, 2);

delay(100);

  Serial.print("FZ0:lum:");
  Serial.println(lux, 1);

  delay(100);
}

Étape 5 : programmer un ESP32

L’ESP32 est bien adapté à FizziQ Web en USB car il dispose d’un port série rapide et de nombreuses entrées.

Exemple simple ESP32

#define TEMP_PIN 34
#define LIGHT_PIN 35

void setup() {
  Serial.begin(115200);
}

void loop() {
  int rawTemp = analogRead(TEMP_PIN);
  int rawLight = analogRead(LIGHT_PIN);

  float voltage = (rawTemp / 4095.0) * 3.3;
  float temperature = voltage * 100.0;
  float lux = map(rawLight, 0, 4095, 0, 1000);

  Serial.print("FZ0:tem:");
  Serial.println(temperature, 2);

  delay(500);

  Serial.print("FZ0:lum:");
  Serial.println(lux, 1);

  delay(500);
}

Étape 6 : programmer une micro:bit en USB

La micro:bit peut aussi transmettre des mesures simples à FizziQ Web par USB.

Exemple JavaScript MakeCode

basic.forever(function () {
    let temp = input.temperature()
    serial.writeLine("FZ0:tem:" + temp)

    basic.pause(500)

    let lum = input.lightLevel()
    serial.writeLine("FZ0:lum:" + lum)

    basic.pause(500)
})

Exemple Python micro:bit

from microbit import *

while True:
    print("FZ0:tem:" + str(temperature()))
    sleep(100)
    print("FZ0:lum:" + str(display.read_light_level() * 4))
    sleep(100)

Étape 7 : utiliser un vrai capteur

Une fois le premier test validé, remplacez la valeur fixe par une mesure réelle.

Exemple avec DHT22

#include <DHT.h>

#define DHTPIN 2
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(115200);
  dht.begin();
}

void loop() {
  float temp = dht.readTemperature();
  float hum = dht.readHumidity();

  if (!isnan(temp)) {
    Serial.print("FZ0:tem:");
    Serial.println(temp, 2);
  }

  delay(500);

  if (!isnan(hum)) {
    Serial.print("FZ0:hum:");
    Serial.println(hum, 1);
  }

  delay(500);
}

Exemple avec BMP280

#include <Adafruit_BMP280.h>

Adafruit_BMP280 bmp;

void setup() {
  Serial.begin(115200);
  bmp.begin(0x76);
}

void loop() {
  float temp = bmp.readTemperature();
  float pressure = bmp.readPressure() / 100.0;

  Serial.print("FZ0:tem:");
  Serial.println(temp, 2);

 delay(500);

  Serial.print("FZ0:pre:");
  Serial.println(pressure, 2);

  delay(500);
}

Étape 8 : choisir la bonne fréquence d’envoi

Il ne faut pas envoyer trop vite.

Recommandation

  1. idéal : 500 à 1000 ms ;

  2. acceptable : 100 à 2000 ms ;

  3. trop rapide : moins de 100 ms ;

  4. trop lent : plus de 5000 ms.

Exemple

#define SEND_INTERVAL 500
unsigned long lastSendTime = 0;

void loop() {
  unsigned long currentTime = millis();

  if (currentTime - lastSendTime >= SEND_INTERVAL) {
    lastSendTime = currentTime;
    Serial.println("FZ0:tem:25.3");
  }
}

Étape 9 : vérifier les valeurs avant l’envoi

Avant d’envoyer une mesure, vérifiez qu’elle est plausible.

Exemple

float temp = readTemperature();

if (!isnan(temp) && temp > -50 && temp < 150) {
  Serial.print("FZ0:tem:");
  Serial.println(temp, 2);
} else {
  Serial.println("# ERROR: Invalid temperature");
}

Cette vérification évite d’afficher des valeurs aberrantes dans FizziQ Web.


Bonnes pratiques

Commencer par un seul capteur

Pour un premier test :

  1. utilisez un seul capteur ;

  2. n’envoyez qu’une seule grandeur ;

  3. vérifiez d’abord le format du message.


Utiliser des messages courts

Des messages simples sont plus robustes :

  1. FZ0:tem:25.3

  2. FZ0:lum:450

  3. FZ0:dis:15.2

Tester avec le moniteur série

Avant FizziQ Web :

  1. ouvrez le moniteur série ;

  2. réglez le débit sur 115200 ;

  3. vérifiez que chaque ligne est correcte ;

  4. vérifiez qu’une nouvelle ligne est bien envoyée à chaque mesure.


Utiliser des messages de débogage

Les lignes commençant par # sont utiles pour suivre le programme.

Exemples :

Serial.println("# Sensor ready");
Serial.println("# ERROR: Sensor not found");

Résoudre un problème de connexion USB

Aucune donnée n’apparait dans FizziQ Web

Les causes les plus fréquentes sont :

  1. le format est incorrect ;

  2. le préfixe FZ manque ;

  3. le baud rate est incorrect ;

  4. les données sont envoyées trop vite

  5. aucune fin de ligne n’est envoyée.

Pour corriger :

  1. utilisez Serial.println() ;

  2. vérifiez que la ligne commence par FZ0:, FZ1: ou équivalent ;

  3. testez d’abord avec une valeur fixe ;

  4. insérer un delai d'au moins 50 ms entre l'envoi des données pour assurer leur traitement;

  5. vérifiez le débit 115200.


Les capteurs sont détectés mais les valeurs sont incohérentes

Les causes les plus fréquentes sont :

  1. la conversion est fausse ;

  2. le capteur n’est pas calibré ;

  3. il existe du bruit électrique ;

  4. l’alimentation est instable.

Pour corriger :

  1. relisez la documentation du capteur ;

  2. comparez avec une mesure de référence ;

  3. faites une moyenne sur plusieurs mesures ;

  4. vérifiez le câblage.


Certains messages manquent

Les causes les plus fréquentes sont :

  1. les envois sont trop rapides ;

  2. le buffer série se remplit ;

  3. trop de capteurs sont envoyés en même temps ;

  4. les messages sont trop longs.

Pour corriger :

  1. augmentez l’intervalle d’envoi ;

  2. envoyez moins de données ;

  3. réduisez la longueur des messages ;

  4. insérer un delai entre l'envoi des données pour assurer leur traitement;

  5. testez chaque capteur séparément.


Le port USB ne s’ouvre pas

Les causes les plus fréquentes sont :

  1. un autre logiciel utilise déjà le port ;

  2. le câble USB ne transmet pas les données ;

  3. le port sélectionné n’est pas le bon ;

  4. le pilote n’est pas installé.

Pour corriger :

  1. fermez le moniteur série de l’Arduino IDE ;

  2. changez de câble USB ;

  3. essayez un autre port USB ;

  4. vérifiez que le microcontrôleur est bien détecté par l’ordinateur.


Le microcontrôleur redémarre

Les causes les plus fréquentes sont :

  1. une alimentation insuffisante ;

  2. un court-circuit ;

  3. une surcharge mémoire ;

  4. une boucle trop lourde.

Pour corriger :

  1. vérifiez l’alimentation ;

  2. simplifiez le programme ;

  3. testez un capteur à la fois ;

  4. vérifiez le montage.


Exemple d’activité en classe

Vous pouvez réaliser une petite station météo avec :

  1. un microcontrôleur ;

  2. un capteur de température ;

  3. un capteur d’humidité ;

  4. un capteur de lumière.

Le programme envoie par exemple :

FZ0:tem:23.4FZ0:hum:58.1FZ0:lum:420


Dans FizziQ Web, les élèves peuvent ensuite :

  1. visualiser les mesures ;

  2. enregistrer les données ;

  3. tracer un graphique ;

  4. comparer plusieurs situations expérimentales.


Ce que vous avez appris

Vous savez maintenant :

  1. utiliser le format USB reconnu par FizziQ Web ;

  2. programmer un microcontrôleur pour envoyer des mesures ;

  3. utiliser des légendes correctes ;

  4. envoyer plusieurs capteurs sur plusieurs canaux ;

  5. régler la fréquence d’envoi ;

  6. corriger les erreurs les plus courantes.


FAQ

Quel format faut-il utiliser en USB ?

Il faut utiliser le format :

FZ[CANAL]:[LEGENDE]:[VALEUR]

Exemple :

FZ0:tem:25.3


Combien de canaux sont disponibles ?

FizziQ Web gère 6 canaux, de 0 à 5.


Faut-il une bibliothèque spéciale pour envoyer les données ?

Non. Pour l’envoi simple, aucune bibliothèque particulière n’est nécessaire. Les bibliothèques servent surtout à lire certains capteurs.


Quelle fréquence d’envoi choisir ?

Pour la plupart des usages en classe, 500 à 1000 ms est une très bonne valeur.


Comment vérifier que le programme fonctionne ?

Commencez par le moniteur série et vérifiez que les lignes envoyées respectent exactement le format attendu.


Peut-on envoyer plusieurs capteurs ?

Oui. Il suffit d’envoyer plusieurs lignes, avec la même légende ou des légendes différentes, et d’utiliser les canaux si nécessaire.


Voir aussi

  • Connecter FizziQ Connect à FizziQ Web

  • Utiliser des capteurs externes dans FizziQ Web

  • Créer un tableau de données dans FizziQ Web

  • Tracer un graphique dans FizziQ Web

  • Enregistrer des mesures dans le cahier d’expérience

 
 
 

Posts récents

Voir tout
Connecter un boîtier FizziQ Connect à FizziQ Web

←  Retour à la documentation FizziQ Web FizziQ Connect est un microcontrôleur dédié à l’ExAO. Il permet de recueillir des mesures avec des capteurs externes compatibles, puis de transmettre ces donnée

 
 
 

Commentaires


bottom of page