Il faut définir une interface (protocole / API) pour que la Raspberry Pi et l'Arduino, qui communiquent en I2C, puisse se comprendre.
Cahier des charges
- Demander la mesure de tout les capteurs en une fois
- Demander la mesure d'un capteur spécifique
- Si le capteur demandé n'existe pas, renvoyer une séquence d'erreur que la Raspberry peut comprendre
- Demander d'énumérer les capteurs qui existent
- Autres?
Proposition
La Raspberry Pi envoie une instruction sur un byte contentant 2 parties codées sur 4 bits:
- La commande
- L'index du capteur (si applicable)
commandes
0001 xxxx demander la mesure du capteur `xxxx`
0010 0000 demander la mesure de tous les capteurs
0011 0000 demander d'énumérer tous les capteurs
0100 0000 demander le nombre de capteurs présents
L'Arduino renvoie:
- Une distance en cm (
int 16 bits). On sépare le int en 2 bytes pour l'envoyer par I2C et puis on le reassemble sur la Pi. Si une erreur survient (e.g. le capteur n’existe pas) on renvoie 0.
- n-fois 2 bytes (une fois par capteur)
- n-fois 1 byte avec l'indice du capteur. On pourrait coder 2 capteurs par byte, mais alors il faut gérer le cas d'un nombre impaire de capteurs.
- un byte contenant le nombre n de capteurs présent sur l'Arduino, ceci permet de savoir combien de bytes seront envoyés quand on demande les mesures de tous les capteurs
Ceci n'est qu'une proposition, la discussion est ouverte pour d'autres alternatives.
Il faut définir une interface (protocole / API) pour que la Raspberry Pi et l'Arduino, qui communiquent en I2C, puisse se comprendre.
Cahier des charges
Proposition
La Raspberry Pi envoie une instruction sur un byte contentant 2 parties codées sur 4 bits:
commandes
L'Arduino renvoie:
int 16 bits). On sépare le int en 2 bytes pour l'envoyer par I2C et puis on le reassemble sur la Pi. Si une erreur survient (e.g. le capteur n’existe pas) on renvoie0.Ceci n'est qu'une proposition, la discussion est ouverte pour d'autres alternatives.