Bonjour a tous,
Je cherche a faire un truc qui me semblait tout bete et je dois faire une erreur stupide quelque part.
Je travaille sur une ESP32 type Woom.
cette carte dispose d'un seul port USB, hors j'ai besoin de 2 ports USB pour pouvoir communiquer avec un programme et en meme temps debugger sur l'interface IDE. Le probleme est que je n'ai qu'une prise USB.
J'ai donc pris un convertisseur RS232/USB que j'ai connecte sur les broches 21 et 22.
Voici le code de declaration:
lorsque je connecte un ordinateur sur l'adaptateur RS285/USB et que j'ouvre l'IDE arduino et que je selectionne 115200, je recois bien des donnees mais c'est illisible. j'immagine que je recois quelque chose qui n'est pas en ascii... comment remedier a ce probleme?
Bonjour,
VotreTX du module RS232/USB doit être connecté sur 22 et le RX sur 21. Serial3.begin(baud-rate, protocol, RX pin, TX pin) ;
Je n'ai jamais essayé de connecter un deuxième adaptateur série sur ESP32 ni sur un autre
µC ... J'ai juste connecté des modules qui dialoguent en mode UART. Donc je ne suis pas sûr de cette solution si toutefois vous avez fait une inversion
L'ESP32 dispose de 3 ports série matériels, inutile d'en créer un supplémentaire.
UART
RX IO
TX IO
CTS
RTS
UART0
GPIO3
GPIO1
N/A
N/A
UART1
GPIO9
GPIO10
GPIO6
GPIO11
UART2
GPIO16
GPIO17
GPIO8
GPIO7
Tu peux prendre Serial2 comme ceci :
#define RXD2 16
#define TXD2 17
void setup() {
// Note the format for setting a serial port is as follows: Serial2.begin(baud-rate, protocol, RX pin, TX pin);
Serial.begin(115200);
Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
}
void loop() {
while (Serial2.available()) {
Serial.print(char(Serial2.read()));
}
}
RXD2 est connecté au TX de ton module convertisseur, TXD2 au RX.
Attention, ces numéros sont ceux des GPIO, ils peuvent être sérigraphiés différemment sur ta carte (par exemple RX2, TX2)
Bonus : les RXn et TXn peuvent être positionnés sur d'autres GPIO que ceux proposés par défaut (parfois proposés sur la serigraphie de la carte ou sur certains dessins de "Pinout" !
(TXn et TXn c'est 'où on veut' hormis les quelques GPIO spécifiques)
un exemple ou Serial2 (ou Serial1) peuvent déboucher sur les GPIO 19 et GPIO22 (choix arbitraire)
Sont connus du compilateur dans le cas de l'ESP32 'classique' :
Serial (associé à l'UART0) , Serial1 (associé à l'UART1) et Serial2 (associé à l'UART2)
En complément les fichiers de définition des diverses cartes peuvent contenir des positionnements par défaut de RX1, TX1 et parfois RX2 et TX2
HardwareSerial Serial3(1);
Ce type de ligne est inutile si on se contente des dénominations disponibles Serial Serial1 et Serial2,
ça revient il me semble à créer "Serial3" et à lui attribuer l'UART 1 ( associé initialement au Serial1 prédéfini )...........Intérêt ?
Bonjour Philippe, Merci pour cette reponse, Si j'avais effectivement inverse RX et TX, je ne recevrai rien sur le port USB nouvellement cree. ce n'est pas le cas, j'ai bien des donnees qui arrivent, elles sont juste illisibles. (comme lorsque les vitesses de port sont differentes, sauf que la, je suis bien a 115200). Je continue de chercher et vous tiens informe si je trouve la raison.
Bonjour Lesept, merci pour ces infos interessantes, je vais essayer de connecter ve nouveau port USB en GPIO09 et GPIO10, cela devrait effectivement me permettre d'utiliser Serial1. toutefois, je ne pense pas que cela solutionne le probleme de lisibilite des caracteres recus. l'emetteur est a 115200, il doit peut etre etre a une vitesse differente pour permettre une communication correct au travers d'un port USB.
Au pire je peux faire ca avec une connection RS485 entre 2 cartes et utiliser la seconde carte pour le debuger le prog (ce prog utilise deja Serial0 et Serial2, cela ne me laisse donc que Serial1 ou creer un Serial3 comme je l'ai fait).
J'essaye en utilisant les entrees Serial1 natives mais je pense vraiment que c'est plus un probleme de vitesse de port que de branchement.
quoi qu'il en soit, merci pour ton aide.
Merci al1fch,
effectivement, aucun interet lorsque l'on a les informations precises de la carte et que l'on connait les numeros associes aux Serialn. j'utilise Serial0 et serial2 j'avais initialement reaffecte Serial1 avec Serial1.begin(115200, SERIAL_8N1, 22, 21); mais, comme cela ne fonctionnait pas, j'ai essaye avec Serial3 pour voir si cela changeait quelque chose, mais le resultat est le meme. toujours une communication mais je recois du code et pas des caracteres. Lorsque j'envoie Bonjour, je recois quelque chose dans l'interface IDE Arduino connectee sur l'USB cree mais c'est illisible.
Je suis donc totalement d'accord avec toi, la creation du COM 3 est totalement inutile dans ce cas. c'etait juste un test.
Merci pour ton aide.
PS desole pour l'absence de ponctuation, j'habite en Thailande et je suis sur un clavier QWERTY.
Je continue a chercher pourquoi cela ne fonctionne pas comme je l'imaginai et je vous tiens informe si je trouve quelque chose concernant l'ajout d'un port USB fonctionnel sur une ESP32.
Si tu reçois quelque chose, tu peux détecter ta vitesse comme ceci :
void setup() {
Serial.begin(115200);
delay(100);
Serial.println();
Serial1.begin(0, SERIAL_8N1, -1, -1, true, 11000UL); // Passing 0 for baudrate to detect it, the last parameter is a timeout in ms
unsigned long detectedBaudRate = Serial1.baudRate();
if(detectedBaudRate) {
Serial.printf("Detected baudrate is %lu\n", detectedBaudRate);
} else {
Serial.println("No baudrate detected, Serial1 will not work!");
}
}
Pay attention: the baudrate returned by baudRate() may be rounded, eg 115200 returns 115201