ESP32 avec lecteur empreinte et écran 2.42" - Nano-ordinateur, microcontrôleurs, FPGA - Electronique, domotique, DIY
Marsh Posté le 26-07-2022 à 12:53:26
Lt Ripley a écrit : Où donc brancher les 2 restants ?? (SDA et SCK) |
Sur les broches SPI de ton ESP - attend, est-ce que ce truc à une interface SPI? Sinon faut une lib' qui fait ça en soft et choisir les broches en fonction.
Citation : Autre question, le lecteur d'empreinte accepte 3,6 à 6v, mon alim délivre 6,15, puis-je baisser un peu avec une résistance ? |
6,15V? En tout cas non, pas avec une résistance, ça ne fonctionne pas du tout pour les charges qui consomment parfois plus et parfois moins comme les modules électroniques. Il te faut un régulateur de tension (linéaire ou à découpage, mais pour cette application/ce courant linéaire sera très bien; par contre il faut qu'il soit "low drop" probablement) ET surtout un convertisseur de niveaux pour ton interface série aussi. Autrement dit si ton ESP tourne en 3,3V et ton bidule empreintes en 5V il faut convertir, sinon dans un sens (ESP->bidule) ça ne va pas fonctionner (ou si selon les seuils) et surtout dans l'autre sens (bidule->ESP) l'ESP risque de fumer (à moins qu'il soit tolérant 5V?).
EDIT: C'est du SPI plutôt, même si dans le titre de l'afficheur ils disent SPI et I2C. C'est pas très clair. Je peux regarder plus en détails ce soir.
Marsh Posté le 26-07-2022 à 13:51:30
Merci
Oui c'est obscure pour le SSD1309, il y a beaucoup plus de docs et tutos pour le 1306 mais il ne fait que 0.96"
J'ai compris que cet afficheur SSD1309 est SPI et peut être converti en I2C en déplaçant une résistance ou deux
J'ai pas du tout pensé que le 5V du lecteur risquait de fumer l'ESP faut que je me renseigne
Sur la page Ali (lecteur) ils disent 3,6 - 6 v / 3,3v. Du coup pour bien faire les choses je voulais mettre une alim mais ça va peut être être l'ESP qui va fournir le jus s'il tient le coup avec l'écran aussi
L'ESP fait du SPI, avec une lib effectivement, j'ai un précédent projet qui tourne avec un lecteur rfid (badge) et je vois que j'ai câblé le SCK en 18 et le SDA en 21 ! (35 et 42). Ça devrait être bon !
Dans le code tu fais juste ça, tu spécifies pas de port
Code :
|
Voici le schéma de mon ESP (ça aussi j'en ai chié pour l'avoir à l'époque il y a 2 ans, le mec (super bien noté) sur ebay en a vendu 5000 et n'a pas pu me le fournir ni le nom exact de la board pour l'IDE).
Marsh Posté le 26-07-2022 à 18:44:58
Oui, souvent ces contrôleurs LCD/OLED supportent plusieurs interfaces à choisir avec deux/trois broches de configuration. Il faudrait voir comment est câblé ton module. Dans le doute SPI c'est mieux que I2C car plus rapide.
Pour ton lecteur d'empreintes la doc Ali n'est pas claire, mais si le truc tourne avec 3,3V autant l'alimenter avec cette tension tout comme le ESP, ainsi pas de soucis de niveau logiques etc.
Marsh Posté le 29-07-2022 à 18:33:47
J'ai reçu le matos
Le lecteur j'arrive pas à le faire marcher, ni avec le 3.3v de l'ESP ni avec le 6v de mon alim (qui sert pour le servomoteur). Tu as raison rat de combat je vois sur 2 threads internet qu'il faut un logic level shifter pour le TX, je viens de commander celui ci : https://www.ebay.fr/itm/294171715974?
Marsh Posté le 29-07-2022 à 18:46:34
Ton lien est rempli de cochonneries tracking, tu pourrais éditer stp (virer tout après le point d'interrogation).
Le 108-bidule de ton lien fera le boulot mais tu le paye bien cher. Un truc à base de MOSFET aurait suffit (initialement "inventé" pour l'I2C mais fonctionnera très bien pour d'autres signaux), m'enfin bon...
EDIT: En attendant tu pourrais mesurer le courant que tire ton lecteur, si c'est 0,00 il y a un soucis. Tu te mets sur mA DC. Si le courant est non-nul ça pourrait bien être le soucis des niveaux de tension, mais à ta place je mettrais quand même un régulateur pour ne pas rester sur la limite maximale au niveau tension (il faudrait voir si les 6V c'est "absolute maximum" ou "recommanded operation condition" ou similaire. Et puis ton 108 il ne supporte pas 6V, donc tu auras encore un soucis...
EDIT2: Attention pour le régulateur de tension, le bon vieux 7805 ne fera pas l'affaire, 6V en entrée ne suffiront pas pour 5V en sortie!
Marsh Posté le 29-07-2022 à 18:55:12
Ah merde chui con quand même
Bon il me faut un régulateur de tension maintenant
Marsh Posté le 29-07-2022 à 18:59:29
méthode HB: Tu fous une diode SILICIUM (genre 1N400x ou 1N4148) en série avec ton bidule, tu auras 0,7V de chute de tension. Mais c'est HB et il y a un risque de tout faire griller...
edit: Tu pourrais aussi alimenter le truc en 6V (en prenant en compte ce que je disais) et passer sur un autre adaptateur de niveaux (cherche "I2C level shifter MOSFET" ) qui lui n'aura aucun soucis avec les 6V.
Marsh Posté le 29-07-2022 à 19:00:27
Putain ça me gonfle on trouve plus rien sur ebay à part des chinois. Tu peux me conseiller un site stp rat de combat pour un régulateur ?
Marsh Posté le 29-07-2022 à 19:02:00
Alors pour une référence de régulateur désolé, j'ai rien en tête qui conviendrait, mais je peux me renseigner.
Les sites tu peux regarder ici où j'en parlais: https://forum.hardware.fr/hfr/elect [...] tm#t376416
Marsh Posté le 29-07-2022 à 19:21:22
Je veux bien que tu regardes si tu peux me dégoter un truc
Je vois ça chez farnell (en stock), 150 mA (mon lecteur demande 140 en crête)
Je branche le vin le vout et les 2 moins sur le GND ?
Marsh Posté le 29-07-2022 à 19:38:06
C'est pas évident ton histoire. Soit les régul ne supportent que 6V maxi en entrée (et il ne faut jamais aller au maximum), soit il leur faut >6V en entrée pour sortir 5V. Ton exemple p.ex. a une chute de tension de typ. 1,8V, donc ça ne fera pas l'affaire! Et dans tout les cas si tu veux souder ça sur perfboard ou similaire tu vas t'amuser... Et il ne faut pas oublier les condensateurs indispensables en entrée et sortie, se référer à la doc.
Si tu veux un régulateur demande sur blabla où traînent les ingé, sinon tente le truc de la diode (à tes risques). Ou achète un convertisseur de niveaux à base de MOSFET et alimente ton lecteur en 6V (mais comme je disais, faudrait savoir si c'est pas "absolute max" ).
Marsh Posté le 29-07-2022 à 20:09:24
Merci rat de combat !
Quelle quiche je suis en elec
Je crois que je vais mettre une alim dédiée pour le lecteur (5v) en parallèle de celle en 6v pour le servo.
Ah ben je peux prendre du 5v sur le chargeur USB qui alimente l'ESP !
Problem solved (j'ai bon ?)
Marsh Posté le 30-07-2022 à 01:23:20
Ah ben si le ESP à un régulateur 3,3V interne et est alimenté en 5V oui en effet, c'est la meilleure solution.
Donc pour résumer:
5V sur le lecteur, 5V sur le ESP (qui a un régulateur interne) et un 108-bidule entre le lecteur et l'ESP pour convertir les niveaux de tensions de l'interface série. Attention à bien brancher ton 108-bidule par contre, si t'as le moindre doute regarde la doc ou demande ici, car il me semble (pas envie de vérifier là ) que il y a un côté 3,3V et un côté 5V donc vaut mieux pas se tromper... Et attention à ce que les _deux_ tensions soient présentes, à moins que ce truc supporte de ne pas être alimenté d'un côté.
Marsh Posté le 30-07-2022 à 01:31:06
Bon, j'ai quand même vérifié: Le TXS0108E (j'arriverai jamais à m'en souvenir ) veut Vcca<=Vccb, autrement dit les 5V faut les mettre du côté "B". Et si je lis bien la doc il ne devrait pas y avoir de soucis si une des deux tensions manque ou autrement dit on peut activer les deux tensions (3,3V et 5V) dans n'importe quel ordre (ce qui n'est pas toujours le cas avec ces convertisseurs de niveau!).
Marsh Posté le 30-07-2022 à 08:37:34
Merci
Oui c'est ce que j'ai vu, le 5v sur B et le 3.3v sur A, et on fait comme on veut
Marsh Posté le 30-07-2022 à 09:09:27
Je viens de parvenir à faire marcher mon écran SSD1309 2,42" oled, je pose la soluce ici ça pourra en aider d'autres :
Librairie U8G2
CS en D5
DC en 33
RES en 32
SDA en 23 (mosi)
SCK en D18
3.3v de l'ESP
L'erreur c'est de mettre le SDA sur le pin SDA de l'esp, il faut le mettre sur le pin mosi.
Marsh Posté le 30-07-2022 à 15:06:24
Lt Ripley a écrit : L'erreur c'est de mettre le SDA sur le pin SDA de l'esp, il faut le mettre sur le pin mosi. |
Oui, c'est la description de cet afficheur qui n'est pas très clair et le nom des broches non plus...
Pour info:
I2C: SDA (serial data), SCL (serial clock)
SPI: SCK (serial clock), MOSI (master output, slave input), MISO (master input, slave output), CS (chip select)
Ton afficheur fonctionne en SPI et pas en I2C, donc en réalité la broche "SDA" c'est MOSI donc faut la brancher sur MOSI.
edit: Je me suis encore emmélé les pinceaux avec MOSI et MISO.
Marsh Posté le 30-07-2022 à 20:12:43
Ah ok.
Alors MISO/MOSI c'est comme TX/RX faut les croiser si j'ai compris
Sur mon 108-bidule je crois que je dois faire les soudures des pins du coté de la puce j'ai bon ?
Edit : ah j'ai vu ton edit
Marsh Posté le 30-07-2022 à 21:15:03
Non, justement faut pas les croiser... Je me trompe régulièrement.
J'ai pas compris pour ta question sur le 108.
Marsh Posté le 30-07-2022 à 21:21:01
ReplyMarsh Posté le 05-08-2022 à 16:58:13
Bon j'arrive pas à faire fonctionner le lecteur d'empreinte avec le convertisseur de niveau logique non plus
Je mets le 3.3v de l'esp sur va, le 5v du lecteur sur vb, leur gnd (des 3.3v et 5v) sur gnd , ensuite rx tx de l'esp sur a1 a2 et rx tx du lecteur sur b1 b2, en croisant rx tx ou pas, marche pas.
J'ai essayé un autre lecteur (J'en ai acheté 2 en même temps des fois que).
J'ai aussi essayé avec oe connecté au gnd, ou au 3.3v, suivant ce que je vois sur le web...
Marsh Posté le 05-08-2022 à 17:15:46
Tu as un multimètre?
OE doit être connecté à - attend, faut que je vérifie - Vcca.
EDIT: Tu as des CH340G ou des convertisseurs USB-série 3,3V similaires?
Marsh Posté le 05-08-2022 à 17:23:12
Oui j'ai un multimètre (pas cher mais je trouve niquel depuis 10 ans il fonctionne niquel (pour les voltages en tous cas, je fais rien d'autre avec ))
Ok je connecte oe au 3.3v
J'ai pas de CH340G ni autre convertisseur USB-série mais si besoin j'en achète un
Marsh Posté le 05-08-2022 à 18:10:37
Ok pour le multi. Voilà ce que je propose: Tu prend ton 108-bidule et tu enlèves tout les câbles. Tu connectes uniquement le 3,3V, le 5V et les deux masses ainsi que OE sur 3,3V. Ensuite tu mesures la tension sur A1, B1, A2, B2. Tu dois avoir 3,3V ou 5V (A ou B). Si c'est le cas tu prend un fil et tu relies A1 à la masse, tu dois avoir 0V sur B1. Idem dans le sens inverse. Ainsi tu testes systématiquement toutes les voies du 108.
Et pour les convertisseurs USB-série, c'est utile d'en avoir 2,3 en stock. Par contre fais gaffe à bien prendre des trucs qui peuvent se configurer en 3,3V ou 5V; c'est le cas avec CERTAINS convertisseurs à base de CH340G notamment. Et vérifie la situation au niveau driver si tu es sous Windows.
EDIT: Tu peux aussi mesurer les broches TX de ton ESP et de ton lecteur, le UART est à l'état haut (3,3V/5V) au repos.
Marsh Posté le 05-08-2022 à 19:13:55
Merci
Je vais faire ça bientôt.
J'ai essayé une autre lib avec un autre code, j'ai toujours "Did not find sensor :("
Je vais aussi essayer Softwareserial car j'utilise jusque là Hardwareserial ce qui n'est pas par défaut dans les codes que j'ai essayé
Marsh Posté le 05-08-2022 à 19:16:22
Tu as bien configuré le baudrate et tout ça? (Baudrate, parité, nombre de bits stop)
Marsh Posté le 05-08-2022 à 19:20:45
Le baudrate je pense qu'il est négocié (à 57600). J'ai aussi essayé en spécifiant 9600.
La parité et les bits stop je ne sais pas ce que c'est, il n'en est pas fait mention dans les tutos que j'ai étudiés
Marsh Posté le 05-08-2022 à 19:24:52
A ma connaissance il n'y a pas de négociation auto des paramètres pour du UART, contrairement p.ex. à l'Ethernet (un poil plus complexe ).
Parité et Bits stop -> https://fr.wikipedia.org/wiki/UART
EDIT: Internet me dit que par défaut ce truc prend bien 57600. Pour le reste tente le classique: 8 bits par octet, aucune parité, 1 bit stop.
Marsh Posté le 05-08-2022 à 19:25:53
Je pense que c'est géré par la lib, je vais regarder ton lien
Marsh Posté le 05-08-2022 à 19:35:11
Si c'est une lib spécifique pour ce truc oui ça doit être bon. Je suppose que tu n'as pas de scope? Si tu commandes des machins USB-UART sur Ali ou Ebay regarde aussi "24MHz logic analyzer". C'est un petit boîtier qui vaut 10€ environ et fonctionne avec Sigrok (FOSS). Ca ne remplace pas un scope mais c'est très utile et pas cher.
Marsh Posté le 06-08-2022 à 19:50:53
YEAH ! J'ai réussi a le faire reconnaitre ! J'ai tenté un dernier truc avant de tester les voltages.
Sur les pins 12 et 13, au "hasard" (et non les pins TX/RX) mais en les spécifiant pour le .begin, et avec pourtant la lib HardwareSerial et non SoftwareSerial (ça n'a pas voulu, il trouvait pas un truc à la compilation, il a même fallu que je vire cette lib pour que ça compile à nouveau avec HardawareSerial ). Avec le 3.3v de l'ESP32.
Code :
|
J'ai mis 8h environ
Merci rat de combat pour tes analyses et conseils, tu m'as appris pas mal de trucs.
J'ai fait mes essais sous Windows avec Visual Studio Code + PIO et aussi sous linux Mint avec Arduino IDE.
Mais 3.3v ça me semble être vraiment le strict minimum, je me tâte à le faire tourner en 5v avec le TXS0108E
Bon, c'est les vacances j'y vais mollo là !
Merci encore
PS : Réussi à stocker une empreinte.
Marsh Posté le 06-08-2022 à 19:56:40
Je vais peut être me commander un CH340G et un 24mhz logic analyzer on sait jamais
Marsh Posté le 06-08-2022 à 20:04:55
Pour le CH340G prend un lot de 5 directement, ça ne coûte pas cher et tu auras du rab' si tu en fumes un ou si un jour il t'en faut deux...
Marsh Posté le 07-08-2022 à 19:47:56
La vache, j'ai passé la journée pour faire à peu près ce que je voulais. Les dev de lib ils s'emmerdent pas ils mettent des boucles while : "Boucle tant que t'as pas lu d'empreinte" mais du coup l'ESP fait plus rien d'autre, notamment l'écran qui reste figé. Bizarrement l'ESP recevait et exécutait bien les ordres de la page web (servomoteur (ouvrir / fermer le coffre (quand il sera fabriqué, je dois avoir l'acier début septembre))). J'en ai chiééééééééé
Pis bien sur apparemment quand tu enroll une empreinte dans le lecteur, tu lui dis ID 1 en fait il stocke dans 0
Me suis trompé il gère l'ID lui même, il attend pas un chiffre mais n'importe quelle touche pour lancer la procédure (librairie FPM. Avec Adafruit c'est différent il demande dans quel ID tu veux enregistrer l'empreinte mais j'arrive pas à faire détecter le lecteur avec cette lib)
Marsh Posté le 18-08-2022 à 17:26:14
Salut
Bon ça marche pas mal mais c'est quand même l'enfer avec ce code pour le capteur d'empreinte : l'ESP reste coincé dedans, La boucle loop du main n'est même plus exécutée ! J'en bave et ça refinit toujours par me faire chier
Voici ce code. À mon avis le yield n'est pas pris en compte, je crois que c'est parcequ'il n'est pas dans le main, j'ai mis le code dans une classe. Le code est tel qu'il est donné par le dev, à part lignes 12 à 16 c'est moi, pour justement palier à ce problème
Avez vous une idée de ce qu'il faut faire ? Pour pouvoir faire autre chose que cette boucle while infernale. (le problème c'est que si on boucle pas au moins 20 fois le capteur ne voit pas d'empreinte donc ce while me semble nécessaire (j'ai fait des essais notamment boucler depuis la loop() , sans succès).
Bizarrement, ma page web elle fonctionne bien, elle donne bien des ordres au servomoteur
Code :
|
Marsh Posté le 18-08-2022 à 18:02:54
Question bête mais c'est quoi yield()?
Sinon tu initialises bien ta variable p pour que ta boucle démarre? Tu peux aussi passer par un do {} while();.
Et puis tu peux bien sûr rajouter un timeout dans le while, genre
Code :
|
(à adapter)
Sinon le principe est toujours le même: Une seule boucle while() (dans le cas d'Arduino la fonction loop()) et on "décompose" chaque tâche en petits morceaux qu'on mets à la suite. Sinon faudrait passer par un OS mais c'est pas le même niveau de difficultés.
Marsh Posté le 18-08-2022 à 18:28:27
rat de combat a écrit : Question bête mais c'est quoi yield()? Si c'est une vraie question : un truc censé justement rendre la main et permettre a d'autres trucs de s'exécuter
|
Thank you
Marsh Posté le 18-08-2022 à 19:08:26
La vache, ça marche ! J'avais dû faire une erreur avec des {}. J'ai viré cette boucle immonde de la mort qui tue, je boucle depuis le main : dans loop j'appelle le code que j'ai posté, qui est une methode dans ma classe, et si FPM_OK je descends dans le code.
Tout ça, à la base, pour avoir le capteur d'empreinte prêt sans attendre la connexion au WiFi : J'allume mon truc, je colle mon empreinte et le coffre s'ouvre. Et avec cette boucle de merde impossible de connaitre le status du WiFi (et l'IP au passage) autrement qu'en monopolisant avant toute chose L'ESP (encore une fois, les devs font chier avec leurs exemples ) avec une boucle infinie tant que WiFi.status() != WL_CONNECTED. Car ma boucle loop ne se faisait pas.
Je suis très content, merci rat de combat de m'avoir mis sur la piste : "un seul while" il faut que je m'en rappelle bien !
Marsh Posté le 26-07-2022 à 11:18:06
Salut à tous
J'attaque mon 3e projet avec un ESP32 : un petit coffre fort (Non je ne suis pas millionnaire )
J'ai une question, pour l'écran (SSD1309 2,42" en SPI, 7 fils) il faut le courant d'alimentation donc 2 fils, ok.
Ensuite on le déclare comme ceci :
Donc 3 fils supplémentaires, ici sur les pins 10,9,8
Où donc brancher les 2 restants ?? (SDA et SCK)
Voici l'écran : https://fr.aliexpress.com/item/3295 [...] pt=glo2fra
Autre question, le lecteur d'empreinte accepte 3,6 à 6v, mon alim délivre 6,15, puis-je baisser un peu avec une résistance ? Comme ceci c'est correct ? (6-1)/0.12 = 42 ohms (il consomme 120mA).
Le lecteur FPM10A : https://fr.aliexpress.com/item/3283 [...] pt=glo2fra
Message édité par Lt Ripley le 26-07-2022 à 12:10:59
---------------
Mes apps | Viens coder | Mon topal de vente