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

- 24 mars
- 8 min de lecture
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 à :
comprendre le format USB attendu par FizziQ Web ;
programmer un microcontrôleur pour envoyer des mesures ;
utiliser les bonnes légendes de capteurs ;
envoyer plusieurs capteurs sur plusieurs canaux ;
corriger les erreurs les plus fréquentes.
Prérequis
Pour réaliser cette activité, il faut :
un microcontrôleur avec port USB ou port série USB ;
un ou plusieurs capteurs ;
un câble USB de données ;
FizziQ Web ouvert dans un navigateur compatible ;
un environnement de programmation adapté au microcontrôleur.
Exemples de matériels compatibles :
Arduino Uno, Nano ou Mega ;
ESP32 ou ESP8266 ;
micro:bit ;
Teensy ;
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 :
lire la valeur du capteur ;
convertir cette valeur dans une unité utile ;
envoyer une ligne dans le bon format ;
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 :
FZ, le préfixe obligatoire ;
un numéro de canal de 0 à 5 ;
une légende de capteur ;
une valeur numérique.
Exemple :
FZ0:tem:25.3
Ici :
FZ0 désigne le canal 0 ;
tem désigne une température ;
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 :
branchez le capteur ;
vérifiez le câblage ;
connectez le microcontrôleur à l’ordinateur avec un câble USB de données ;
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 :
un baud rate de 115200 ;
8 bits de données ;
1 bit d’arrêt ;
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
idéal : 500 à 1000 ms ;
acceptable : 100 à 2000 ms ;
trop rapide : moins de 100 ms ;
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 :
utilisez un seul capteur ;
n’envoyez qu’une seule grandeur ;
vérifiez d’abord le format du message.
Utiliser des messages courts
Des messages simples sont plus robustes :
FZ0:tem:25.3
FZ0:lum:450
FZ0:dis:15.2
Tester avec le moniteur série
Avant FizziQ Web :
ouvrez le moniteur série ;
réglez le débit sur 115200 ;
vérifiez que chaque ligne est correcte ;
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 :
le format est incorrect ;
le préfixe FZ manque ;
le baud rate est incorrect ;
les données sont envoyées trop vite
aucune fin de ligne n’est envoyée.
Pour corriger :
utilisez Serial.println() ;
vérifiez que la ligne commence par FZ0:, FZ1: ou équivalent ;
testez d’abord avec une valeur fixe ;
insérer un delai d'au moins 50 ms entre l'envoi des données pour assurer leur traitement;
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 :
la conversion est fausse ;
le capteur n’est pas calibré ;
il existe du bruit électrique ;
l’alimentation est instable.
Pour corriger :
relisez la documentation du capteur ;
comparez avec une mesure de référence ;
faites une moyenne sur plusieurs mesures ;
vérifiez le câblage.
Certains messages manquent
Les causes les plus fréquentes sont :
les envois sont trop rapides ;
le buffer série se remplit ;
trop de capteurs sont envoyés en même temps ;
les messages sont trop longs.
Pour corriger :
augmentez l’intervalle d’envoi ;
envoyez moins de données ;
réduisez la longueur des messages ;
insérer un delai entre l'envoi des données pour assurer leur traitement;
testez chaque capteur séparément.
Le port USB ne s’ouvre pas
Les causes les plus fréquentes sont :
un autre logiciel utilise déjà le port ;
le câble USB ne transmet pas les données ;
le port sélectionné n’est pas le bon ;
le pilote n’est pas installé.
Pour corriger :
fermez le moniteur série de l’Arduino IDE ;
changez de câble USB ;
essayez un autre port USB ;
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 :
une alimentation insuffisante ;
un court-circuit ;
une surcharge mémoire ;
une boucle trop lourde.
Pour corriger :
vérifiez l’alimentation ;
simplifiez le programme ;
testez un capteur à la fois ;
vérifiez le montage.
Exemple d’activité en classe
Vous pouvez réaliser une petite station météo avec :
un microcontrôleur ;
un capteur de température ;
un capteur d’humidité ;
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 :
visualiser les mesures ;
enregistrer les données ;
tracer un graphique ;
comparer plusieurs situations expérimentales.
Ce que vous avez appris
Vous savez maintenant :
utiliser le format USB reconnu par FizziQ Web ;
programmer un microcontrôleur pour envoyer des mesures ;
utiliser des légendes correctes ;
envoyer plusieurs capteurs sur plusieurs canaux ;
régler la fréquence d’envoi ;
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

Commentaires