Bonjour
je cherche a envoyer plusieurs valeurs entre une mega pro mini et une ESP32 en liaison série.
pour une valeur pas de problème, mais plusieurs, je ne sais pas comment séparer les valeurs sur la slave.
Serial.println(valeur01);
Serial.println(valeur02);
etc..
sur la mega en maitre
int valeur01= Serial.read();
Serial.print(valeur01);
comment récupérer la (valeur02) ?
je pense qu'il faut un séparateur de genre ("/n"), mais j'ai pas tout compris
merci
Le mieux est de mettre tes variables dans une structure, de les envoyer avec par exemple: Serial1.write((byte )&donneesAtransmettre, sizeof donneesAtransmettre);
et de les recevoir avec: Serial1.readBytes((byte)&donneesAtransmettre, sizeof donneesAtransmettre);
Quand on fait de la transmission en binaire sur voie série il est important de prévoir un moyen de synchro (par exemple si on prend la première communication en cours de route ou si un octet venait à être perdu) donc prévoir dans le protocole un en tête particulier par exemple
Attention aussi aux deux architectures différentes (avr et esp). Il n’y a pas de garantie de compatibilité des tailles de type (un float ça va aller un peu par chance mais vous auriez un souci avec un int ou un double. Par exemple Un int serait sur 16 bits d’un côté et 32 bits de l’autre). L’usage des types à taille fixe comme int16_t etc est à recommander.
Enfin il faut aussi faire attention à la la façon dont le compilateur va organiser les octets dans la structure. Ici on sera en little endian des deux côtés donc ça va mais il serait bon d’utiliser l’attribut ((packed)) sur la structure pour optimiser le nombre d’octets à transmettre et s’assurer de leur ordre.
Sur les conseils de @J-M-L, j'ai optimisé la structure des données pour permettre la transmission entre un Arduino et un ESP32 post #2.
Côté Arduino, c'est un Mega avec Serial1 et côté ESP32 c'est Serial2 Tx 17 et Rx 16.
Ca ne fonctionne pas.
j'ai pris soin de rajouter la modif pour ESP32 DevKit V1: #define RXD2 16 #define TXD2 17
Serial1.begin(9600, SERIAL_8N1, RXD2, TXD2);
avec ce code ça marche mais je ne sait pas comment récupérer plusieurs valeurs.
// master//
void setup() {
Serial.begin(115200);
}
void loop() {
for ( int i = 0; i < 360; i++){
Serial.println(i);
delay(100);
}
}
ouf c'est bon pour la paire d'exemples du [post #2.
selection de la mauvaise carte dans l'ide.
reste a l'intégrer dans mon code pour la détection de module FrSky
un grand merci " jpbbricole " c'est trop cool. super réactif
ps: c'est pas encore gagné, mais je vais pouvoir avancer.
Il y a une polémique sur ce sujet à propos de est-ce que l'EPS32 est tolérant au 5V sur les pin E/S.
Paraîtrai que le PDG d'Espressif l'aurai dit?
Dans ce montage de liaison entre le Mega et l'ESP32, la liaison est directe et tout fonctionne.
Bien sûre il ne faut alimenter l'ESP32 qu'en 3.3V, sauf par l'USB qui est en 5V.
Et j'ajouterais que la première question à se poser dans ce genre de montage, est l'utilité du couple ARDUINO ESP32.
Souvent il est beaucoup plus intéressant et surtout plus sûr de larguer l'ARDUINO, conserver uniquement l'ESP32, quitte à ajouter un ou plusieurs expander du genre MCP23017 si l'on manque d'entrées / sorties.
bonjour, je suis en face du même problème. j'ai une liaison entre un Arduino UNO et un esp12-e en liaison série. je doit transmettre 6 valeur différente entre l'esp et le UNO. 3 valeur bool et 3 valeur uint8_t.
j'ai essayé ta méthode avec les byte. j'arrive effectivement a faire la communication entre les deux carte grâce au soft sériel. par contre les valeur que je reçois sur la UNO de l'esp sont totalement erroné et aléatoire. comment je pourrait rendre cette communication opérationnel ?. si tu a besoin des deux code je peut te les envoyer sans problème
J'ai fait l'essai entre un ESP32 Serial2, le master et un UNO, le slave, je n'ai pas d'esp12-e.
Dans le UNO avec SoftwareSerial à 9600 (Rx 3, Tx 4), à 115200, j'avais parfois des erreurs et tout se déroule sans problème.