Bonjour à tous, je souhaiterai communiquer de la data entre un arduino et un raspberry et l'identifier :
je dois retourner la température, l’humidité
Je peux le faire via cette example :
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.write(45); // send a byte with the value 45
int bytesSent = Serial.write("hello"); //send the string "hello" and return the length of the string.
}
Le soucis est que je ne peux pas concaténer des variables + des chaines donc je ne sais pas identifier qui est quoi a la réception. Auriez vous une idée de comment faire cela ?
Car actuellement en retour sur mon raspberry j'ai :
27
8
28
9
27
8
donc je ne peux pas identifier qui est temperature qui est humiditee
Dans ton code actuel, tu envoies plusieurs bytes d'informations à la suite sans mettre de séparateur (caractère inséré entre chaque information qui ne sera jamais présent dans l'information).
Comment ton raspberry arrive-t-il à séparer ces informations avec un retour à la ligne comme on le voit dans ton exemple?
As-tu ajouté une contrainte de temps ?
Le soucis est que je ne peux pas concaténer des variables + des chaines
C'est pourtant ce que tu fais en envoyant en deux fois un byte (45) suivi d'une suite de bytes correspondant aux caractères de la chaîne 'hello'.
doit faire l'affaire(et python a tout ce qu'il faut pour recevoir des chaines de caractères -pyserial- , les découper (split) , verifier qu'une ligne est correcte : commence par '{', finit par '}', a des mots clefs.....)
Vous ne devriez pas tenter de transmettre en binaire
a) le debugging est compliqué.
b) si c'est pour optimiser, pourquoi transmettre à 9600 bauds -le RPi va jusqu'à 115200 bauds ...)
c) le fonctionnement en cas d'erreur -ou au démarrage- est abominable.
f) les températures et humidités sont acquises par des capteurs lents.... Autant detecter /filtrer, côté RPi, les éventuelles erreurs de transmission par une redondance certaine.
PS: si, malgré tout, vous souhaitez transmettre à toute vitesse, il faut que le programme sur RPI
a) donne un ordre de départ
b) attendre les octets, en espèrant ne pas en perdre
PS: si , malgré tout, et pour un usage plus adapté, vous souhaitez transmettre à des cadences infernales, Capturing an analog signal with Arduino and python | Freedom Embedded continue de susciter une admiration justifiée (fait, en plus, et en moins de 100 lignes commentées de C++ et python, découvrir pyserial et matplotlib)
Merci pour vos réponses, effectivement dbrion06 je n'ai pas besoin de transmettre la data en permenance je suis passé par des fonctions que je peux appeler à la demande de ce côté la pas de soucis.
Si je comprend bien tu transmets sous format "json" la data et python s'occupera de parse la data désiré ?