RS232 & Wemos D1 Mini

Bonjour à tous,

Je rencontre actuellement un problème de communication entre mon Wemos D1 Mini et une balance industrielle.

Le problème : Je n’arrive pas à capter le retour de la balance avec mon Wemos D1 Mini.

Le cablage :

Le code :

(...) void setup() { Serial.begin(9600); Serial1.begin(9600); }

void loop() {
(…)
if (Serial1.available() > 0) {
retour = Serial1.readString();
}
}

Le code est le plus simple possible.

Ce qui marche :

  • J’ai codé un petit programme en Python sur mon RaspberryPi qui va envoyer de la donnée (et j’arrive bien à réceptionner avec mon Wemos D1 mini.
  • En reliant la balance indus via le port RS232 à mon poste et en ouvrant Hyperterminal, tout est lu correctement (la balance est configurée pour balancer de la data en continu).

Autres éléments à savoir :
Le protocole de comm de la balance est le suivant : 9600bps 8 bit, pas de parité, 1 bit de stop (donc les valeurs par défaut du Serial.begin(9600)).
Je ne suis pas du tout un crac en élec…peut-être ai-je omis de placer une résistance quelque part ?

Merci !

Bonjour

deux remarques :

1)sur les cartes Wemos/Lolin D1 Mini les broches Rx et Tx sont déjà reliées à la puce faisant l'interface USB. Venir greffer la dessus un autre ensemble de liaison Rx et Tx ne marche pas à tous les coups.)

tester une liaison SoftSerial avec une librairie adaptée aux ESP8266 de manière a avoir un second port série dédié : GitHub - plerup/espsoftwareserial: Implementation of the Arduino software serial for ESP8266

je ne comprend pas ce que tu tentes avec Serial1 sur cette carte D1 Mini qui ne dispose pas de deux ports série matériels complets.

  1. je ne connais pas pas la petite carte avec le Max232 , alimetée en 5V elle envoie sans doute un signal Tx entre 0 et 5V ce qui n'est pas recommandé pour une entrée Rx officiellement limitée à 3,3V côté D1 Mini
    Certains ESP9266 supportent 5V sur leurs entrées GPIO mais ce n'est pas garanti par le fabricant.

Merci de ton retour. Alors j'essaie un peu tout..à la base j'avais testé avec un Serial.read (et non pas Serial1.read).

Effectivement ça pourrait être un problème de voltage. Tu aurais en tête un microcontrôleur qui supporte les échanges en 5V ?

readString() est une fonction pour les fainéants. :smiling_imp:

Déjà que je ne l'aimais pas trop, là je viens de vérifier son code source et j'ai bien l'impression qu'elle comporte une grosse faille : si la réception série est continue, sans interruption de plus d'une seconde (timeout par défaut de Serial) et sans caractère nul, la saleté d'objet String va se remplir jusqu'à tout faire péter.

[Edit]

Peut-être pas tout péter, si la classe String gère proprement une taille maxi au-delà de laquelle l'instance ne grossit plus. Mais quand même, selon ce qui arrive sur la liaison série, il est possible de ne jamais sortir de la fonction readString() car elle contient un bon gros while

String Stream::readString() {
    String ret;
    int c = timedRead();
    while(c >= 0) {
        ret += (char) c;
        c = timedRead();
    }
    return ret;
}

Essaye de charger l'exemple Serial_Gateway fournit avec ma lib WiFiTerm

Merci bricoleau pour ton retour.

Cependant, cela ne solutionne pas ma problématique.

Je joins à ce post trois photos. La première photo est la carte temporaire où est soudée l’ESP et le RS232 (face avant). Deuxième face arrière. Troisième, l’afficheur de la balance indus dont le cable série est connecté au RS232 (cablage en 2-3-5).

J’ai testé ta biblio et ton exemple associé, il fonctionne pour de la communication entre le moniteur série et le navigateur web. Ce que je saisis dans mon moniteur série s’affiche dans mon navigateur et inversement.

Cependant, toujours pas de retour de la balance. La balance est configurée pour envoyer de manière continue le poids (tous les 1/4 de seconde environ). J’ai vérifié cela via HyperTerminal sur mon poste informatique portable (Windows).

Du coup, j’ai l’impression d’avoir tout essayé et que la solution doit être bête…

Une idée ? Merci bien

Photos :

EDIT : J’ai inversé les connections RX/TX…ça marche ! Merci je vais adapter pour mes besoins.

Pour préciser :
Une liaison série bidirectionnelle permet à deux et seulement deux équipements de communiquer entre eux.

Le wemos n'a qu'un seul port série hardware.
Tu ne peux pas l'utiliser simultanément pour communiquer entre le wemos et le PC (terminal série), et pour communiquer entre le wemos et ta balance.

Si ton wemos est simultanément relié au PC via un cable usb et à la balance via le RS232, tu crées un conflit sur la liaison série.

Quand tu dis que ça marche après avoir inversé RX/TX, j'ai plutôt l'impression que le TX du RS232 étant sur le TX du wemos, tu bypasses le wemos. Et donc que les données envoyées par la balance arrivent directement dans le terminal série "comme si" c'était le wemos qui les avait envoyées. Autant enlever le wemos du dispositif.

Le Serial gateway de wifiTerm suppose que tu alimentes le wemos directement, sans passer par un cable usb relié au PC. Le wemos sert alors de terminal, via sa page web.

En effet, je vais affiner un peu ma façon de faire pour obtenir quelque chose de plus pérenne. Ce n'est qu'une pré-version en attente d'un produit plus adapté. Merci pour les informations, j'en prends bonne note.