RFID UART sur une carte Arduino Due

Bonjour,

J’ai un projet qui est devient trop gourmand j’ai dû passer d’une carte Arduino Méga 2560 à une Arduino Due pour plus de puissance.

Mais je n’arrive à rien avec cette nouvelle carte pour commencer je souhaite faire fonctionner ce code sur une carte Arduino Due :

#include <SoftwareSerial.h>

SoftwareSerial SoftSerial(51, 50); //Tx, Rx
int i = 0;
int out_flag =0;
String badge; // déclaration de la variable pour stocker le badge

void setup() {
  Serial.begin(9600);
  SoftSerial.listen();
  SoftSerial.begin(9600);
  delay(10);
  SoftSerial.write(0x02); //Send the command to RFID, please refer to RFID manual

}

void loop() {
   while (SoftSerial.available() > 0) {
      byte C = SoftSerial.read();
     if (C != 0) {
      if (C<16) Serial.print("0");
      badge += String(C);
      if (i!=3) {
        badge += ",";
      }
      out_flag =1;
      i++;
    }
  }
  if (out_flag >0) {
     out_flag = 0;
     i = 0;
     Serial.println(badge);
     badge="";
  }

}

Merci d’avance :smiley:

Bonjour

pourquoi utiliser SofwareSerial() sur une carte Due qui dispose de 4 ports série matériels ?
Ils sont tous occupés ?

Par ailleurs le matériel raccordé au port série respecte-t-il la limite des 3,3V ?

En fait j'ai écrit ce code pour un Arduino méga je souhaite faire fonctionner ce lecteur de badge sur l’Arduino Duo qui fonctionne sous 5 v.

13.56MHZ RFID Reader/Writer Module V4-- Ultralight

mais j'ai des erreurs du a la bibliothèque, le code ne se téléverse même pas.

J'ai essayé ça soft_uart mais je n'arrive pas à le simplifier pour récupérer juste le num de badge scanner comme au dessus.

Mika32:
... mais j'ai des erreurs du a la bibliothèque, le code ne se téléverse même pas.

Et pour cause, cette bibliothèque n'existe pas pour la carte DUE. Si tu lis les messages fournis par le compilateur, il devrait te dire quelque part que la bibliothèque est introuvable.

Il est effectivement possible de la remplacer par la bibliothèque soft_uart d'antodom, mais c'est beaucoup se compliquer l'existence, car, comme signalé en #1, la carte dispose de plusieurs hardware serial. En fait 5 (Serial, Serial1, Serial2, Serial3 ET Serial4 en ajoutant 3 lignes de code).

D'autre part, avec cette carte, il est préférable d'utiliser int8_t ou int16_t (voire int32_t ou int64_t) plutôt que int car il peut y avoir des confusions sur la taille des variables (int = int16_t sur la DUE) lorsqu'elle communique avec une autre carte.

Et la DUE ne supporte sur ses entrées que des tensions comprises entre 0V et 3.3V. Donc utiliser des "logic level shifters" si nécessaire sur les pins numériques.

En fait j'ai écrit ce code pour un Arduino méga

La MEGA aussi dispose de plusieurs ports matériels.

Bonjour,

Merci à vous pour vos réponses.
Je suis développeur web et du coup complètement novice en arduino et en programmation C.

Si je comprends bien je peux lire des badges avec mon lecteur directement avec l’Arduino Due en utilisant les ports 0(rx) et 1(tx) par exemple mais en utilisant des logic level shifters car mon lecteur est en 5v.

Question :

Auriez-vous de la doc car je ne trouve rien sur le lecteur RFID rx tx Arduino due

Logic level shifters c’est dans le code que cela se fait ou c’est matériel?
Si c'est matériel mon patron ne voudra pas cette solution, on pourrai peut-être le faire avec une bibliothèque?

Merci

La broche TX de la DUE va envoyer du 3.3V, qui sera normalement compris par le lecteur.
La broche RX de la DUE va recevoir du 5V, qui sera dangereux pour la DUE. Il faut au minimum un pont diviseur à résistances.

Si c'est matériel mon patron ne voudra pas cette solution, on pourrai peut-être le faire avec une bibliothèque?

Ton patron devra s'y faire. On ne réduit pas une tension avec du logiciel.

Cela fonctionne avec un arduino méga en utilisant la bibliothèque SoftwareSerial.h on ne peu pas faire comme ça??

Ton patron devra s'y faire.

Ce n'est pas son genre :sweat_smile: il faut que je trouve une solution car mon projet contient déjà beaucoup de matériel.

Je ne vois pas ce que la librairie SoftwareSerial peut apporter en matière de tolérance au 5V.

D'autre part si cette librairie ne se compile pas sur la DUE, le choix est limité : UART matérielle.

A moins que certaines entrées d'un AT91SAM3X8E soient tolérantes au 5V, comme pas mal de STM32, information que je ne vois pas dans la datasheet, tu n'as pas le choix.

Une autre solution consiste à dégraisser le programme et conserver la MEGA.
Mais en l'absence de plus d'infos, que dire ? Tu ne précises même pas quel est le problème, manque de RAM, manque de FLASH ?

Tu dis que tu es développeur WEB. J'ai déjà eu affaire à un développeur WEB pour un projet embarqué, et c'est vrai qu'en général vous autres considérez que les ressources sont infinies, comme sur un PC.

Je dis juste que je suis arrivé à faire fonctionner le lecteur de badge en 5v sur un Arduino méga grâce à cette bibliothèque.

On veut passer sur un arduino due car notre projet lit le badge scanné le compare à une liste de badge autoriser (chiffré) stocké dans un fichier sur la sd d'une carte shield ethernet après il renseigne un autre fichier avec accès autoriser ou refuser avec la date et heure après l'avoir chiffré.

En parallèle un serveur web consulte l'arduino pour récupérer les listes que l'arduino a sur la sd en l'affichant en html puis les vide et met ajout celle des codes autorisés.

Le problème est que si la liste est longue pendant le temps d’échanger avec le serveur web on ne peut plus badgé.

je voulais pas soûler tout le monde avec mon histoire mais voila mon problème.

Je peux poster mon code si tu veux il y a surement mieux que ce que j'ai fait mais je ne suis pas sur que cela résout mon problème

Les informations arrivent au compte-gouttes. Badge RFID, et maintenant SD + Ethernet + chiffrement. Cela commence à faire beaucoup pour une MEGA.

Poster le code, s'il est gros, n'avancera pas à grand chose, à moins qu'une bonne âme veuille se pencher dessus.

Tu as tous les éléments en main.
La DUE n'admettra pas 5V sur son entrée RX. A toi ce convaincre ton boss qu'une adaptation de niveau est nécessaire, et cela impose obligatoirement du hardware, pont diviseur ou autre.

Alternative possible : un lecteur RFID MIFARE RC522 (SPI) s'alimente en 3.3V.

J’ai bien précisé dans mon premier poste :

J'ai un projet qui est devient trop gourmand j'ai dû passer d'une carte Arduino Méga 2560 à une Arduino Due pour plus de puissance.

Mais je n'arrive à rien avec cette nouvelle carte pour commencer je souhaite faire fonctionner ce code sur une carte Arduino Due :

On se doute bien que ce n'est pas juste le lecteur RFID!

Je ne souhaite pas que l’on fasse le travail à ma place je demande seulement de l’aide et des conseils, je travaille étape par étape cela aurait servi à quoi de vous expliquer tout mon projet en détail je n’arrive déjà pas à faire fonctionner le lecteur de badge qui est ma première étape.

En revanche hbachetti je vous trouve très moralisateurs je n’ai en aucun cas à vous rendre des comptes sur la façon de communiquer sur ma problématique, votre façon de répondre en me prend de haut ainsi que mes confrères développeurs me parait déplacé.

Je pense que l'on peut échanger en étant bienveillant les uns envers les autres!

Tout à été dit, il suffit de relire.

  • liaison série matérielle
  • adaptateurs de niveaux

Je ne vois pas quelle aide supplémentaire nous pourrions apporter.

En revanche hbachetti je vous trouve très moralisateurs je n'ai en aucun cas à vous rendre des comptes sur la façon de communiquer sur ma problématique,

Alors deux remarques

  1. tu aura beau faire toutes les incantations possibles la DUE ne supporte pas plus que la tension Vcc sur ses entrées. Si tu as appliqué 5V sur une entrée il y a de très fortes présomptions que tu as flingué la carte.
    C'est matériel et avec le matériel l'erreur se paye cash, il faut vous y faire ou changer d'activité ou embaucher un électronicien qui n'aura pas peur de câbler deux résistances.

  2. Un problème s'expose en une seule fois. Figure toi qu'on est des bénévoles et qu'on n'a pas envie de revenir 50 fois sur le sujet parce que le demandeur donne les informations au compte goutte.

Alors oui tu peux communiquer sur ta problématique comme tu veux et on a rien à dire, entièrement d'accord avec toi.
Mais d'une part tu passes à coté de solutions plus adaptés à ton besoin, tu en a eu un aperçu avec l'utilisation de software Serial complètement inutile tant avec la Mega qu'avec la Due et qui bouffe inutilement de la place en mémoire.
Et d'autre part toi aussi tu n'aura rien à dire si les bénévoles refusent de participer à un projet brouillon.

Avec ta susceptibilité tu scies la branche sur laquelle tu es assis.

Une petite couche supplémentaire :

En revanche hbachetti je vous trouve très moralisateurs je n'ai en aucun cas à vous rendre des comptes sur la façon de communiquer sur ma problématique, votre façon de répondre en me prend de haut ainsi que mes confrères développeurs me parait déplacé.

Donner les informations nécessaires n'est pas à comparer avec rendre des comptes. On rend des comptes uniquement à son supérieur hiérarchique.
Quand on demande de l'aide, fournir toutes les informations, même celles qui paraissent ne rien à voir avec le problème, permet souvent de corriger le tir quand le projet n'est pas sur les bons rails.

Juste un exemple : le fait d'avoir choisi une carte MEGA ou DUE.
S'il s'agit d'un montage destiné à fonctionner en entreprise, il est évident que la fiabilité des connections avec des fils DUPONT sera douteuse.
Si le personnel reste à la porte un matin à cause d'un faux contact, qui va se faire taper sur les doigts ?

Par contre s'il s'agit d'un maquettage et que la version finale est conçue sérieusement sur un PCB industriel, l'utilisation d'une carte de prototypage se justifie.

Ce n'est pas son genre :sweat_smile: il faut que je trouve une solution car mon projet contient déjà beaucoup de matériel.

S'il s'agit d'un montage destiné à fonctionner dans votre entreprise, que le montage soit produit en un ou plusieurs exemplaires, le fait d'ajouter une adaptation de niveau a peu d'impact sur le prix final.

Par contre s'il s'agit d'une étude réalisée dans le but d'être commercialisée, il est évident que le hardware doit être réduit à son minimum.
A mon avis un développeur C / C++ ayant une bonne expérience en embarqué serait plus à même de se contenter d'un petit microcontrôleur pour ce projet. Un ATMEGA2560 suffit probablement.
Personnellement plutôt que de choisir un ARDUINO + Ethernet j'aurais plutôt choisi un ESP8266 ou un ESP32.

Je suppose qu'il s'agit du même projet, qui a donné lieu à de multiples questions depuis le mois de mai.
Je pense qu'un développeur embarqué aurait terminé l'étude en moins d'un mois, et y aurait probablement intégré des tests automatisés.

En conclusion ce projet a besoin de deux ingrédients essentiels : un électronicien, comme le dit 68tjs, car il faudra bien produire une version industrielle, et un développeur embarqué.

Je ne prends personne de haut. Un développeur WEB reste un développeur WEB.
Dans mon entreprise le seul projet embarqué ayant été mené par un développeur WEB a vu sa quantité de mémoire RAM doubler au moment de l'intégration, engendrant du même coup un surcoût, et c'est exactement ce qui est en train de se produire avec votre projet.
A chacun son métier ...

Dernière remarque : s'il s'agit d'une étude réalisée dans le but d'être commercialisée, il serait plus honnête de le signaler. Certains membres du forum répugnent à l'idée de travailler gratuitement pour une entreprise.

Ha oui quand même… :astonished:

Je pensais que

Tout à été dit, il suffit de relire.

Apparemment non…

Je vais pas aller dans la sur enchère, je prône plutôt la bienveillance.

Merci quand même pour votre aide, je voulais juste des informations sans noyer les gens avec la totalité de mon projet, la preuve la problématique du 5v me fait changer mon projet…

Ce projet est pour ma société mais en aucune visée à être commercialisé, je ne travaille pas que sur cela donc oui ça prend du temps et non je ne suis peut-être pas la personne qu'il faut avec les bonnes compétences et le bon matériel mais j'essaye de répondre au mieux à nos problématiques et faciliter le travail de mes collègues…

Je fais aussi du bénévolat en aident d'autres personnes sur des problèmes lier au web et je réponds aux questions les unes après les autres et je reviens autant de fois qu'il faut sur le sujet, je pense que l'on n'a pas la même façon de fonctionné voila tout.

Bonne continuation et Soyons bienveillant les uns avec les autres :wink: .

On ne va pas revenir dessus mais ce sont des réactions "pas adaptées" sur les niveaux électriques qui nous ont braqués.
On va dire que c'était sur le coup de l'énervement passager et on en parlera plus.

Je vais te dire ce qu'un dirigeant de Texas Instrument a écrit il y a une bonne dizaines d'années.
S'il prend un ingénieur débutant et s'il le met sur :

  1. de la programmation pure : il sera autonome au bout de 6 mois
  2. sur de la conception de circuit numériques : il sera autonome au bout de 2 ans
  3. sur de la conception de circuits analogiques : il sera autonome au bout de 4 ans

En soi l'électronique n'est pas plus difficile que la programmation mais elle demande plus d'expérience, quand je parle expérience ce peut-être faire fonctionner une carte en déplaçant de 2 mm une piste sur le circuit imprimé : c'est du vécu, ok la carte était très complexe.

Il faut que tu intègre bien cette réalité.
Les datasheets des microcontroleurs sont assez pénibles à lire mais il faut au minimum consulter les "Electrical characteristics" et bien comprendre la différence entre les valeurs utilisables en service normal et les "Maximum Absolute Rating" qui sont les limites extrêmes que le composant peut supporter pendant un temps court : à traduire par le droit à faire des conneries très courtes.

Pour les niveaux il y a des normes pour que les circuits puissent dialoguer sans difficulté.
Dans notre domaine la norme est la norme CMOS qui définie les niveaux en fonction d'un pourcentage de la tension d'alimentation des circuits.

Chaque entrée d'un composant est protégée de l'électricité statique par des diodes en inverse.
Si tu appliques 5V sur une entrée d'un circuit alimenté en 3,3V la diode de protection haute ne sera plus en inverse mais en direct et le circuit sera alimenté par l'entrée.
Ce mode "connerie" viendra en conflit avec l'alimentation normale et le CI peut passer de vie à trépas.

Une erreur en programmation pure se traduira par la modification d'une portion de code.
Une erreur sur le matériel peut se traduire par un remplissage de poubelle (c'est aussi une des composantes de l'expérience).