đŻ Introduction
La librairie SchreinSerialParser est un analyseur de trames sĂ©rie robuste pour Arduino, conçu pour parser des messages au format <[controlName|propertyName|value]&checksum>. Elle offre une gestion d’erreurs avancĂ©e, des callbacks et une validation de checksum.

Installation de la BibliothĂšque
- Téléchargez les fichiers
.het.cpp - CrĂ©ez un dossierÂ
SchreinSerialParser dans votre dossierÂlibraries/Arduino - Copiez les fichiers dans ce dossier
- RedĂ©marrez l’IDE Arduino
đŠ Installation
Structure des fichiers
SchreinSerialParser/
âââ examples/
â âââ Basic_Usage
â âââ Basic_Usage.ino
âââ src/
â âââ SchreinSerialParser.h
â âââ SchreinSerialParser.cpp
â
â
âââ library.json
âââ README.md
âââ library.properties
âââ keywords.txtInclusion dans le projet
#include "SchreinSerialParser.h"đ§ Initialisation
CrĂ©ation de l’instance
// Avec Serial standard
SchreinSerialParser parser(Serial);
// Avec Serial1, Serial2, etc.
SchreinSerialParser parser(Serial1);
// Avec SoftwareSerial
SoftwareSerial mySerial(10, 11);
SchreinSerialParser parser(mySerial);đ Utilisation Basique
Exemple minimal
#include "SchreinSerialParser.h"
SchreinSerialParser parser(Serial);
void setup() {
Serial.begin(9600);
parser.enableChecksum(true); // Optionnel
}
void loop() {
parser.loop(); // à appeler réguliÚrement
if (parser.isFrameAvailable()) {
String value = parser.getValue("motor", "speed");
if (value != "") {
Serial.println("Vitesse: " + value);
}
parser.resetFrame();
}
}đĄ Format des Trames
Structure de la trame
<[controlName|propertyName|value]&checksum>Exemples de trames valides
<[motor|speed|255]&04>
<[led|state|on]&1A>
<[sensor|temperature|23.5]&FF>đ ïž API ComplĂšte
Méthodes Principales
đ Gestion du cycle de vie
void loop(); // Ă appeler dans loop() principal
bool isFrameAvailable() const;
void resetFrame();đš RĂ©ception de donnĂ©es
String getValue(const String &controlName, const String &key);đ€ Envoi de donnĂ©es
// Création de commande
String cmd = SchreinSerialParser::command("motor", "speed", "255");
// Envoi simple
parser.sendFrame(cmd);
// Envoi multiple
String frames[] = {
parser.command("motor", "speed", "255"),
parser.command("led", "state", "on")
};
parser.sendFrames(frames, 2);âïž Configuration
// Timeout (défaut: 1000ms)
parser.setTimeout(2000);
// Activation checksum (défaut: false)
parser.enableChecksum(true);
// Taille du buffer (défaut: 256)
parser.setBufferSize(512);đïž Callbacks
// Gestion d'erreurs
parser.onError([](String error) {
Serial.println("â Erreur: " + error);
});
// Données brutes reçues
parser.onDataReceived([](String data) {
Serial.println("đ„ DonnĂ©e: " + data);
});
// Frame parsée
parser.onFrameParsed([](String controlName, String key, String value) {
Serial.println(controlName + "." + key + " = " + value);
});đ DĂ©bogage
debugOutput()
// Affichage dans le moniteur série
parser.debugOutput("receiveMessage"); // Message brut reçu
parser.debugOutput("parsedFrame"); // Frame parsée
parser.debugOutput("completeFrame"); // Frame complĂšte
parser.debugOutput("error"); // DerniĂšre erreur
// Récupération comme String
String debugInfo = parser.debugOutput("parsedFrame", true);Codes d’erreur
ErrorCode::NO_ERROR // Aucune erreur
ErrorCode::BUFFER_OVERFLOW // Buffer trop petit
ErrorCode::INVALID_FRAME // Format de trame invalide
ErrorCode::TIMEOUT // Timeout dépassé
ErrorCode::CHECKSUM_ERROR // Checksum invalideđ Exemples Complets
Exemple 1: Communication Bidirectionnelle
#include "SchreinSerialParser.h"
SchreinSerialParser parser(Serial);
void setup() {
Serial.begin(9600);
parser.onFrameParsed(handleParsedFrame);
parser.onError(handleError);
}
void loop() {
parser.loop();
// Envoi périodique
static unsigned long lastSend = 0;
if (millis() - lastSend > 5000) {
String cmd = parser.command("sensor", "request", "data");
parser.sendFrame(cmd);
lastSend = millis();
}
}
void handleParsedFrame(String controlName, String key, String value) {
Serial.println("đŻ Frame reçue:");
Serial.println(" Control: " + controlName);
Serial.println(" Key: " + key);
Serial.println(" Value: " + value);
if (controlName == "sensor" && key == "temperature") {
float temp = value.toFloat();
// Traitement de la température...
}
}
void handleError(String error) {
Serial.println("đ„ Erreur: " + error);
}Exemple 2: ContrĂŽle Moteur
#include "SchreinSerialParser.h"
SchreinSerialParser parser(Serial);
void setup() {
Serial.begin(115200);
parser.enableChecksum(true);
}
void loop() {
parser.loop();
if (parser.isFrameAvailable()) {
String speed = parser.getValue("motor", "speed");
String direction = parser.getValue("motor", "direction");
if (speed != "") {
int motorSpeed = speed.toInt();
controlMotor(motorSpeed);
}
if (direction != "") {
setMotorDirection(direction);
}
parser.resetFrame();
}
}
void controlMotor(int speed) {
// Implémentation contrÎle moteur
analogWrite(9, speed);
}â ïž Bonnes Pratiques
â Ă faire
- Toujours appeler
parser.loop()dans la boucle principale - Vérifier
isFrameAvailable()avant de lire les données - Appeler
resetFrame()aprÚs traitement - Utiliser les callbacks pour une architecture événementielle
- Activer le checksum pour les communications critiques
â Ă Ă©viter
- Ne pas bloquer dans
loop()principal - Ne pas oublier de libérer avec
resetFrame() - Ăviter les dĂ©lais longs qui causent des timeouts
đ§ DĂ©pannage
ProblĂšmes courants

Test de communication
void testCommunication() {
// Test d'envoi/réception
String testFrame = parser.command("test", "ping", "hello");
parser.sendFrame(testFrame);
// Vérification debug
Serial.println(parser.debugOutput("receiveMessage", true));
}đ Performance
- Buffer configurable selon les besoins
- Timeout adaptable Ă l’application
- Gestion mémoire optimisée
- Callbacks non-bloquants
Cette documentation couvre l’ensemble des fonctionnalitĂ©s de la librairie SchreinSerialParser. La structure modulaire et les callbacks permettent une intĂ©gration flexible dans divers projets Arduino.