ESP32 avec lecteur empreinte et écran 2.42"

ESP32 avec lecteur empreinte et écran 2.42" - Nano-ordinateur, microcontrôleurs, FPGA - Electronique, domotique, DIY

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 :D )
 
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 :
 

Code :
  1. U8G2_SSD1309_128X64_NONAME0_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);


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
https://i.imgur.com/s7CagKg.png
https://i.imgur.com/i1e0DRP.png
 
 
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
https://i.imgur.com/G5KLkUo.png

Message cité 1 fois
Message édité par Lt Ripley le 26-07-2022 à 12:10:59

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 26-07-2022 à 11:18:06   

Reply

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. :o Je peux regarder plus en détails ce soir.


Message édité par rat de combat le 26-07-2022 à 12:56:48
Reply

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 :
  1. #include <SPI.h>
  2. puis
  3. SPI.begin();


 
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).
 
https://i.imgur.com/rfVR09l.png


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

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.

Reply

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?
 
 [:taill]


Message édité par Lt Ripley le 29-07-2022 à 18:52:31

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

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!


Message édité par rat de combat le 29-07-2022 à 18:53:17
Reply

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


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

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.


Message édité par rat de combat le 29-07-2022 à 19:00:47
Reply

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 ?


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

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

Reply

Marsh Posté le 29-07-2022 à 19:02:00   

Reply

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)
 
https://i.imgur.com/YMCZBEE.png
 
Je branche le vin le vout et les 2 moins sur le GND ?
 
https://i.imgur.com/swgOuyX.png


Message édité par Lt Ripley le 29-07-2022 à 19:21:42

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

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" ).

Reply

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 ?)


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

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. :whistle:

 

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à :o ) 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é.


Message édité par rat de combat le 30-07-2022 à 01:25:11
Reply

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 :o ) 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!).

Reply

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
 
 [:prab]


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

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.


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

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. :o


Message édité par rat de combat le 30-07-2022 à 15:36:02
Reply

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


Message édité par Lt Ripley le 30-07-2022 à 20:13:59

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 30-07-2022 à 21:15:03    

Non, justement faut pas les croiser... Je me trompe régulièrement. :o  
 
J'ai pas compris pour ta question sur le 108. :o

Reply

Marsh Posté le 30-07-2022 à 21:21:01    

Je fais comme ça ?
 
https://i.imgur.com/7Yx2Jau.png
 
ou comme ça ?
 
https://i.imgur.com/V3eZSvI.png


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 30-07-2022 à 21:27:01    

Comme tu veux. :o

Reply

Marsh 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...
 
https://i.imgur.com/vvd8YR1.png


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 05-08-2022 à 17:15:46    

Tu as un multimètre?

 

OE doit être connecté à - attend, faut que je vérifie :o - Vcca.

 

EDIT: Tu as des CH340G ou des convertisseurs USB-série 3,3V similaires?


Message édité par rat de combat le 05-08-2022 à 17:18:39
Reply

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 :whistle: ))
 
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


Message édité par Lt Ripley le 05-08-2022 à 17:28:05

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

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. :o

 

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.


Message édité par rat de combat le 05-08-2022 à 18:12:57
Reply

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é


Message édité par Lt Ripley le 05-08-2022 à 19:14:16

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 05-08-2022 à 19:16:22    

Tu as bien configuré le baudrate et tout ça? (Baudrate, parité, nombre de bits stop)

Reply

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


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

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 :o ).

 

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.


Message édité par rat de combat le 05-08-2022 à 19:26:49
Reply

Marsh Posté le 05-08-2022 à 19:25:53    

Je pense que c'est géré par la lib, je vais regarder ton lien


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

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.

Reply

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.
 
https://i.imgur.com/87EL6Rv.png
 
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 [:emmett8] ).  Avec le 3.3v de l'ESP32.
 

Code :
  1. fserial.begin(57600, SERIAL_8N1, 12, 13);


 
J'ai mis 8h environ [:jean_covid:5]  
 
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à ! [:alipse]  
 
Merci encore
 
PS : Réussi à stocker une empreinte.


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

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


---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

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...

Reply

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ééééééééé [:deouss]  
 
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)


Message édité par Lt Ripley le 08-08-2022 à 18:45:05

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

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 [:wipeout 2097:6]  [:lol_yvele]  
 
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 :
  1. while (p != FPM_OK) {
  2.        
  3.        p = finger2.getImage();
  4.        
  5.        switch (p) {
  6.            case FPM_OK:
  7.                Serial.println("Image taken" );
  8.                break;
  9.            case FPM_NOFINGER:
  10.                Serial.print("." );
  11.  
  12.                currentMillis = millis();
  13.                if (currentMillis - previousMillis > millisInterval)  {
  14.                    ecranPtr->displaySecs();
  15.                    previousMillis = currentMillis;
  16.                }
  17.                
  18.                break;
  19.  
  20.            case FPM_PACKETRECIEVEERR:
  21.                Serial.println("Communication error" );
  22.                break;
  23.            case FPM_IMAGEFAIL:
  24.                Serial.println("Imaging error" );
  25.                break;
  26.            case FPM_TIMEOUT:
  27.                Serial.println("Timeout!" );
  28.                break;
  29.            case FPM_READ_ERROR:
  30.                Serial.println("Got wrong PID or length!" );
  31.                break;
  32.            default:
  33.                Serial.println("Unknown error" );
  34.                break;
  35.        }
  36.        yield();
  37.    }


Message édité par Lt Ripley le 18-08-2022 à 17:27:10

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le 18-08-2022 à 18:02:54    

Question bête mais c'est quoi yield()? :o  
 
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 :
  1. uint8_t attempts=0
  2. while (p!=FPM_OK && attempts++<100)
  3. { ... }
  4. if(attempts==100 && p!=FPM_OK)
  5.     printf("timeout!" )


(à 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.

Reply

Marsh Posté le 18-08-2022 à 18:28:27    

rat de combat a écrit :

Question bête mais c'est quoi yield()? :o   Si c'est une vraie question : un truc censé justement rendre la main et permettre a d'autres trucs de s'exécuter
 
Sinon tu initialises bien ta variable p pour que ta boucle démarre? Tu peux aussi passer par un do {} while();.  Oui c'est bon puisque j'arrive pas à en sortir :o  :D  
 
Et puis tu peux bien sûr rajouter un timeout dans le while, genre   J'ai fait un essai comme ça, il fallait au moins 20 tours pour que le capteur voit une empreinte, ça prenait une bonne seconde, un peu trop à mon gout, mais je vais refaire des essais

Code :
  1. uint8_t attempts=0
  2. while (p!=FPM_OK && attempts++<100)
  3. { ... }
  4. if(attempts==100 && p!=FPM_OK)
  5.     printf("timeout!" )


(à 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. Ah ok merci, faut que je re-essaye des trucs (décomposer le code du dev en plusieurs methodes et plus une seule)


 
Thank you

Message cité 1 fois
Message édité par Lt Ripley le 18-08-2022 à 18:30:43

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

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 :o ) 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 !


Message édité par Lt Ripley le 18-08-2022 à 19:08:44

---------------
Mes apps  |  Viens coder  |  Mon topal de vente
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed