Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1208 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Acquérir impulsions 5V sur PC

n°369266
Lermite
Posté le 30-03-2022 à 19:24:35  profilanswer
 

Reprise du message précédent :

TotalRecall a écrit :

Tu as tenté le Generic ? [:twixy]


Non parce que j'ignore si c'est le plus adapté à ce que je veux faire, et notamment si un autre ne me mâcherait pas le travail.

mood
Publicité
Posté le 30-03-2022 à 19:24:35  profilanswer
 

n°369267
rat de com​bat
attention rongeur méchant!
Posté le 30-03-2022 à 19:26:04  profilanswer
 

Lermite a écrit :

J'avais cru comprendre que les ESP8266 pouvait être programmé en Lua ou en Python, mais le langage d'Arduino IDE ne semble être aucun des deux [:sovxx]

En effet, le language Arduino c'est un mélange de C et de C++. Si tu n'y connais rien tu vas bien galérer!
 
Il est possible qu'on puisse programmer les ESP en Python aussi, mais je ne saurais t'aider. Par contre si tu maîtrises le Python mais pas le C(++) je te conseille de suivre cette piste.
 
Pour info pour les Arduino il y a un sujet unique: https://forum.hardware.fr/hfr/elect [...] et_4_1.htm

n°369270
Lermite
Posté le 30-03-2022 à 19:37:34  profilanswer
 

rat de combat a écrit :

En effet, le language Arduino c'est un mélange de C et de C++. Si tu n'y connais rien tu vas bien galérer!

Je galérerai mois en C qu'en Lua ou Python vu que j'ignore tout de ces deux derniers.
En C, je suis bien rouillé mais je ne devrais pas avoir trop de mal à m'y remettre. Je vais donc m’accommoder du langage par défaut d'Arduino IDE.
 

rat de combat a écrit :

Pour info pour les Arduino il y a un sujet unique: https://forum.hardware.fr/hfr/elect [...] et_4_1.htm

:jap:  
 
A première vue, vu la structure de code proposée par défaut, il n'est pas possible de faire du passage d'une entrée à l'état haut un évènement qui déclencherait l'exécution d'une fonction.
Si l'on doit se contenter d'une boucle infinie, ça promet un code bien crade  [:tinostar]  
 
Sur ce, m'en vais éplucher le topic Arduino...

n°369271
rat de com​bat
attention rongeur méchant!
Posté le 30-03-2022 à 19:41:01  profilanswer
 

Lermite a écrit :

A première vue, vu la structure de code proposée par défaut, il n'est pas possible de faire du passage d'une entrée à l'état haut un évènement qui déclencherait l'exécution d'une fonction.
Si l'on doit se contenter d'une boucle infinie, ça promet un code bien crade  [:tinostar]

Bah la plupart des codes fonctionnent avec une boucle infinie non? Après Arduino doit permettre les interruptions aussi, mais pour ton histoire un truc avec une variable globale ou une variable locale "static" et une comparaison fera l'affaire. Genre
 

Code :
  1. void loop(void)
  2. {
  3.     static bool etat_ancien;
  4.     bool etat_actuell=get_pin(...);
  5.    
  6.     if(etat_actuell!=etat_ancien && etat_actuell)
  7.     {
  8.         faire_quelque_chose();
  9.     }
  10.     etat_ancien=etat_actuell;

n°369272
Lermite
Posté le 30-03-2022 à 19:45:16  profilanswer
 

rat de combat a écrit :

Bah la plupart des codes fonctionnent avec une boucle infinie non?

Sans doute mais j'ai l'habitude de langages de plus haut niveau, où les boucles infinies sont toujours cachés à mes yeux prudes  :D  
 

rat de combat a écrit :

Après Arduino doit permettre les interruptions aussi, mais pour ton histoire un truc avec une variable globale ou une variable locale "static" et une comparaison fera l'affaire. Genre
 

Code :
  1. void loop(void)
  2. {
  3.     static bool etat_ancien;
  4.     bool etat_actuell=get_pin(...);
  5.    
  6.     if(etat_actuell!=etat_ancien && etat_actuell)
  7.     {
  8.         faire_quelque_chose();
  9.     }
  10.     etat_ancien=etat_actuell;


 
Merci! Ca fera parfaitement l'affaire :jap:  
Mon but est d'avoir un code qui fonctionne, pas un code propre :)


Message édité par Lermite le 30-03-2022 à 19:45:54
n°369314
Lermite
Posté le 31-03-2022 à 11:44:46  profilanswer
 

Je progresse, pas la concrétisation matérielle de mon projet mais ma propre compréhension de comment le mener à bien.
 
J'ai notamment trouvé cette info essentielle, la référence du langage d'Arduino IDE: https://www.arduino.cc/reference/fr/
Je regrette de ne pas y avoir trouvé le moyen de calculer le temps écoulé entre deux évènements.
 
Ca implique de balancer ces évènements en vrac au PC qui devra calculer lui-même ces intervalles mais le délai de transmission et de traitement fausserait le résultat  :(

n°369315
M4vrick
Mad user
Posté le 31-03-2022 à 11:47:55  profilanswer
 

Avec la fonction millis() tu récupères l'horloge du µC, en stockant la valeur entre deux allumages de leds tu as la durée écoulée.
Mais attention si tu laisses ton montage allumé h24, au bout d'un moment millis() revient à zero :o

Message cité 1 fois
Message édité par M4vrick le 31-03-2022 à 11:48:49

---------------
--== M4vr|ck ==--
n°369316
Lermite
Posté le 31-03-2022 à 11:49:53  profilanswer
 

M4vrick a écrit :

Avec la fonction millis() tu récupères l'horloge du µC, en stockant la valeur entre deux allumages de leds tu as la durée écoulée.


Damnit, je continue à m'enfoncer avec mes questions de plus en plus crétines  :pfff:  
 :jap:

n°369317
MossieurPr​opre
I d͟o̩n᷃'̵t͖ give a shit
Posté le 31-03-2022 à 11:49:58  profilanswer
 

Lermite a écrit :

Je progresse, pas la concrétisation matérielle de mon projet mais ma propre compréhension de comment le mener à bien.
 
J'ai notamment trouvé cette info essentielle, la référence du langage d'Arduino IDE: https://www.arduino.cc/reference/fr/
Je regrette de ne pas y avoir trouvé le moyen de calculer le temps écoulé entre deux évènements.
 
Ca implique de balancer ces évènements en vrac au PC qui devra calculer lui-même ces intervalles mais le délai de transmission et de traitement fausserait le résultat  :(


 
Tu peux utiliser milles() pour ça. La fonction retourne ne nombre de millisecondes écoulées depuis le démarrage de l'ESP.
 
Du coup, millis() de l'événement 2 - millis() de l'événement 1 te donne le nombre de millisecondes écoulées entre les 2 événements.
 
Attention cependant, au bout d'un moment ne nombre va overflow (dépasser la capacité de stockage) et repartir à 0, il faut gérer ça. La doc t'en dira un peu plus ;)
 
EDIT : M4vrick'd :o

Message cité 1 fois
Message édité par MossieurPropre le 31-03-2022 à 11:50:56
n°369318
Lermite
Posté le 31-03-2022 à 11:52:31  profilanswer
 

MossieurPropre a écrit :

...Attention cependant, au bout d'un moment ne nombre va overflow (dépasser la capacité de stockage) et repartir à 0, il faut gérer ça. La doc t'en dira un peu plus ;)


Oui, j'ai vu ça. Le délai de remise à zéro est de 50 jours.
J'invaliderai le calcul si le nouveau millis() renvoie 0 ou si l'intervalle calculé est négatif.

mood
Publicité
Posté le 31-03-2022 à 11:52:31  profilanswer
 

n°369348
rat de com​bat
attention rongeur méchant!
Posté le 31-03-2022 à 16:59:11  profilanswer
 

Attention: Il est peu probable que millis() renvoie exactement 0, il faut plutôt tester si la nouvelle valeur est inférieure à l'ancienne. Ou si le calcul sort un résultat négatif, mais attention au type de variables dans ce cas! Avec du uint on ne peut pas avoir du négatif!

n°369350
Lermite
Posté le 31-03-2022 à 17:05:56  profilanswer
 

rat de combat a écrit :

Attention: Il est peu probable que millis() renvoie exactement 0, il faut plutôt tester si la nouvelle valeur est inférieure à l'ancienne. Ou si le calcul sort un résultat négatif, mais attention au type de variables dans ce cas! Avec du uint on ne peut pas avoir du négatif!


Bien vu. Cette fonction retourne un "unsigned long".
 
Ma fonction loop() se présente ainsi pour l'instant:

Code :
  1. void loop()
  2. {
  3.   static long interv;
  4.  
  5.   v1=digitalRead(inPin);
  6.   if ((v1!=v0)&&v1)
  7.   {
  8.     m1=millis(); 
  9.     interv=m1-m0;
  10.     if ((m1!=0)&(interv>0))
  11.       getHttp(3600000/interv);
  12.     v0=v1;
  13.     m1=m0;
  14.   }
  15.   checkWiFi();
  16. }


La conversion en long n'est-elle pas implicite?

Message cité 1 fois
Message édité par Lermite le 31-03-2022 à 17:29:58
n°369363
M4vrick
Mad user
Posté le 31-03-2022 à 19:02:01  profilanswer
 

Lermite a écrit :


Bien vu. Cette fonction retourne un "unsigned long".
 
Ma fonction loop() se présente ainsi pour l'instant:

Code :
  1. void loop()
  2. {
  3.   static long interv;
  4.  
  5.   v1=digitalRead(inPin);
  6.   if ((v1!=v0)&&v1)
  7.   {
  8.     m1=millis(); 
  9.     interv=m1-m0;
  10.     if ((m1!=0)&(interv>0))
  11.       getHttp(3600000/interv);
  12.     v0=v1;
  13.     m1=m0;
  14.   }
  15.   checkWiFi();
  16. }


La conversion en long n'est-elle pas implicite?


 
Tu as compilé ton code?
y'a deux trucs que je ne comprends pas:
 
ton deuxième if n'a pas de {}
Je ne vois nul part une définition de m0, je pense que tu t'es planté dans m1=m0 à la fin et que ca devrait etre l'inverse non?


---------------
--== M4vr|ck ==--
n°369364
rat de com​bat
attention rongeur méchant!
Posté le 31-03-2022 à 19:04:17  profilanswer
 

M4vrick a écrit :

ton deuxième if n'a pas de {}

Une seule instruction après le if -> pas besoin d'accolades. ;)  
 
Sinon j'ai pas regardé le code en détail, pas le temps là. :o

n°369365
Lermite
Posté le 31-03-2022 à 19:07:38  profilanswer
 

M4vrick a écrit :

Tu as compilé ton code?

Oui, mais un code qui compile sans erreur n'est pas forcément un code qui fonctionne  [:tinostar]  

M4vrick a écrit :

y'a deux trucs que je ne comprends pas:
 
ton deuxième if n'a pas de {}

J'ai pour habitude de zapper les {} quand ils ne contiennent qu'une seule ligne.
 

M4vrick a écrit :

Je ne vois nul part une définition de m0,


Elle est simplement hors de la fonction loop(), en entête du code.
 

M4vrick a écrit :

je pense que tu t'es planté dans m1=m0 à la fin et que ca devrait etre l'inverse non?

Ca, c'est bien un méchant bug. Merci  :jap:  

n°369370
Lermite
Posté le 31-03-2022 à 19:30:18  profilanswer
 

Bon, la partie hard semble au point.
Comme j'utilise la broche GPIO2 comme entrée pour le signal du Linky, la led de l'ESP-01S le reproduit via sa propre led.
 
Par contre, côté soft, c'est la misère pour l'instant.
La connexion Wifi est la première étape mais elle ne fonctionne apparemment pas et je peine à comprendre pourquoi.
Je cherche aussi comment afficher le bla bla de Serial.println("bla bla" );
 
Le "Moniteur série" d'Arduino IDE affiche une ligne de hiéroglyphes sur l'appui du bouton reset du programmateur, mais plus rien ensuite.
https://zupimages.net/up/22/13/dfz5.png
 
Quand à mon code qui compile mais ne fonctionne pas, le voici, seulement expurgé du mot de passe du WiFi:
 

Code :
  1. #include <ESP8266WiFi.h>
  2. #include <WiFiClient.h>
  3. #include <ESP8266HTTPClient.h>
  4. int inPin=2;
  5. bool v0,v1;
  6. long m0,m1,interv;
  7. IPAddress staticIP(192,168,1,48);
  8. IPAddress gateway(192,168,1,1);
  9. IPAddress subnet(255,255,255,0);
  10. IPAddress dns(1,1,1,1);
  11. const char* deviceName = "ESP-01S_0";
  12. const char* ssid = "Taniere";
  13. const char* password = "ne_vous_regarde_pas";
  14. HTTPClient http;
  15. WiFiClient client;
  16. bool isWiFiConnected()
  17. {
  18.   return(WiFi.status()==WL_CONNECTED);
  19. }
  20. void WiFiConnect()
  21. {
  22.   WiFi.hostname(deviceName);
  23.   WiFi.config(staticIP, subnet, gateway, dns);
  24.   WiFi.begin(ssid, password);
  25.   while (!isWiFiConnected)
  26.   {
  27.     Serial.println("Attente connexion WiFi" );
  28.     delay(500); 
  29.   } 
  30. }
  31. void checkWiFi()
  32. {
  33.   if (!isWiFiConnected)
  34.     WiFiConnect();
  35. }
  36. void getHttp(int pa)
  37. {
  38.   static int httpCode;
  39.   http.begin(client,"http://192.168.1.39/caverne/setLinkyPuissanceActive.php?pa="+char(pa));
  40.   httpCode = http.GET();
  41.   if ((httpCode>0)&&(httpCode!=200))
  42.     Serial.println(http.getString());   
  43.   http.end();
  44. }
  45. void setup()
  46. {
  47.   v0=false
  48.   m0=0;
  49.   checkWiFi();
  50. }
  51. void loop()
  52. {
  53.   static long interv;
  54.   v1=digitalRead(inPin);
  55.   if ((v1!=v0)&&v1)
  56.   {
  57.     m1=millis(); 
  58.     interv=m1-m0;
  59.     if ((m1!=0)&(interv>0))
  60.       getHttp(3600000/interv);
  61.     v0=v1;
  62.     m0=m1;
  63.   }
  64.   checkWiFi();
  65. }

n°369372
rat de com​bat
attention rongeur méchant!
Posté le 31-03-2022 à 19:34:39  profilanswer
 

Tes hiéroglyphes c'est probablement un soucis de Baudrate mal configuré ou alors il manque une masse quelque part?

n°369373
Lermite
Posté le 31-03-2022 à 19:48:18  profilanswer
 

rat de combat a écrit :

Tes hiéroglyphes c'est probablement un soucis de Baudrate mal configuré ou alors il manque une masse quelque part?


Le baudrate est correct puisque c'est le même que celui utilisé pour le téléversement du code compilé qui lui se passe bien.
 
https://i.ibb.co/5xb40BL/Hieroglyphes.png
 
Quant à la masse manquante, je ne vois pas trop ce que ça pourrait être vu que j'utilise un programmateur tout fait.
J'ai juste pioché trois broches pour les connecter à mon montage: VCC, GND et GPIO2.
 
https://zupimages.net/up/22/13/qrd0.png
 
Devrais-je relier la broche RST à la masse?

n°369374
Lermite
Posté le 31-03-2022 à 19:59:16  profilanswer
 

Je viens de vérifier la tension à cette broche RST, alors que le ESP-01S est connecté à son programmateur.
Elle est par défaut de 3,3V.
Elle passe à 0V le temps que le bouton du programmateur reste enfoncé, celui-là même qui génère la ligne de hiéroglyphes.
 
C'est comme si mon code faisait complètement planter le ESP-01S mais sans aucune info de débugage, trouver ce qui cloche relève de l'impossible  :sweat:

n°369390
Lermite
Posté le 31-03-2022 à 23:49:02  profilanswer
 

J'ai trouvé comment rendre lisibles les hiéroglyphes. C'était bien un problème de baudrate.
Alors que celui par défaut de mon ESP-01S est de 115200 et qu'il permet bien le téléversement du code compilé, la fenêtre de débug n'est elle lisble qu'en 74880, pas plus, pas moins.
Mais ce debug ne m'aide pas pour autant puis qu'il n'affiche que ceci, uniquement après la mise à la masse ponctuelle de RST:

23:37:40.600 ->  
23:37:40.600 ->  ets Jan  8 2013,rst cause:2, boot mode:(3,6)
23:37:40.600 ->  
23:37:40.600 -> load 0x4010f000, len 3460, room 16  
23:37:40.640 -> tail 4
23:37:40.640 -> chksum 0xcc
23:37:40.640 -> load 0x3fff20b8, len 40, room 4  
23:37:40.640 -> tail 4
23:37:40.640 -> chksum 0xc9
23:37:40.640 -> csum 0xc9
23:37:40.640 -> v00048e80
23:37:40.640 -> ~ld
23:37:40.640 ->  
23:37:40.640 ->  
23:37:40.640 -> Hardware WDT Stack Dump - enabled
23:37:40.640 ->  


 
J'ai ajouté une ligne de débug à la fonction setup():

Code :
  1. void setup()
  2. {
  3.   v0=false
  4.   m0=0;
  5.   Serial.println("setup();" );
  6.   checkWiFi();
  7. }


Mais même elle n'apparaît pas, à croire que mon code n'est même pas lancé ou qu'il est bugué au point de faire complètement planter l'ESP.
 
J'ai aussi testé plusieurs "debug levels" mais sans jamais avoir quoi que ce soit de plus d'affiché:
https://zupimages.net/up/22/13/ribc.png
 
Je me réjouissais d'avoir pratiquement mis au point ce projet mais ce dernier problème, aussi bloquant qu'obscur, remet tout en question  :cry:
 
J'en arrive à envisager de renoncer à l'ESP-01S en le remplaçant par un Arduino Uno avec un Shield Ethernet histoire d'avoir le WiFi en moins sur la liste des problèmes à gérer, mais ce n'est hélas pas du tout le même prix.


Message édité par Lermite le 01-04-2022 à 00:07:00
n°369391
rat de com​bat
attention rongeur méchant!
Posté le 01-04-2022 à 00:12:18  profilanswer
 

Va demander sur le sujet Arduino dont j'avais parlé, les experts sont là-bas.

n°369397
TotalRecal​l
Modérateur
Posté le 01-04-2022 à 08:05:00  profilanswer
 

En même temps, dans ton programme plus haut tu n'as jamais initialisé le port série, donc ça ne risque pas de fonctionner.
https://arduino.blaisepascal.fr/bibliotheque-serial/
Bon, pour l'esp il y a peut être des subtilités mais il doit bien y avoir le minimum aussi (Serial.Begin.)

 

Ne le prend pas mal, mais à lire tes questions et tes blocages, tu devrais commencer par des tutos d'initiation.
Parce que là on sent ta frustration et ton énervement a chaque post, alors que ça vient toujours d'un truc que tu n'as pas fait correctement qui nécessite juste 5 minutes de recherches..

Message cité 1 fois
Message édité par TotalRecall le 01-04-2022 à 08:08:21

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°369406
Lermite
Posté le 01-04-2022 à 10:24:54  profilanswer
 

TotalRecall a écrit :

En même temps, dans ton programme plus haut tu n'as jamais initialisé le port série, donc ça ne risque pas de fonctionner.
https://arduino.blaisepascal.fr/bibliotheque-serial/
Bon, pour l'esp il y a peut être des subtilités mais il doit bien y avoir le minimum aussi (Serial.Begin.)

Effectivement  :pfff:  :jap:  
 

TotalRecall a écrit :

Ne le prend pas mal, mais à lire tes questions et tes blocages, tu devrais commencer par des tutos d'initiation.
Parce que là on sent ta frustration et ton énervement a chaque post, alors que ça vient toujours d'un truc que tu n'as pas fait correctement qui nécessite juste 5 minutes de recherches..

Certes  [:tinostar]  
Mais quand rien ne semble fonctionner, il n'est pas toujours évident de savoir quoi chercher comme information.
Je n'en suis pas moins le premier à pester contre mon inexpérience sur ce type de matos.

n°369411
TotalRecal​l
Modérateur
Posté le 01-04-2022 à 11:13:43  profilanswer
 

T'inquiète on comprend :jap:

 

Mais généralement une petite recherche bien orientée "ESP8266 arduino" ou "Arduino port série" aurait suffit à trouver les infos de base en très peu de temps.
Pour le port série un peu de lecture en plus t'aurait permis de deviner le pourquoi des hiéroglyphes, et éventuellement de trouver le bon baud rate ("default baud rate serial esp8266" ), même si le coup des 74880 est une bizarrerie (il me semble que ça vient d'un souci d'horloge à l'initialisation, un rapport avec l'horloge qui peut être en 26 ou 40MHz, ça devrait plutôt être 115200 le standard).

 

Mais l'important c'est de progresser et de s'en sortir à la fin :o

 

Tu nous diras si le Serial.Begin() fonctionne directement sur ESP8266 ;).

Message cité 1 fois
Message édité par TotalRecall le 01-04-2022 à 11:14:46

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°369412
Lermite
Posté le 01-04-2022 à 11:20:07  profilanswer
 

TotalRecall a écrit :

T'inquiète on comprend :jap:
 
Mais généralement une petite recherche bien orientée "ESP8266 arduino" ou "Arduino port série" aurait suffit à trouver les infos de base en très peu de temps.
Pour le port série un peu de lecture en plus t'aurait permis de deviner le pourquoi des hiéroglyphes, et éventuellement de trouver le bon baud rate ("default baud rate serial esp8266" ), même si le coup des 74880 est une bizarrerie (il me semble que ça vient d'un souci d'horloge à l'initialisation, ça devrait plutôt être 115200).
 
Mais l'important c'est de progresser et de s'en sortir à la fin :o
 
Tu nous diras si le Serial.Begin() fonctionne directement sur ESP8266 ;).

Le fait est qu'après un assainissement de mon code (qui n'avait rien d'un luxe) et l'ajout du Serial.begin(115200); j'ai eu un beau débug tout propre à la seule exception de la toute première ligne mais s'agissant de l'initialisation du bidule, ça ne prête pas à conséquence vu que tout le reste est en clair.
 
Le baudrate à 74880 n'est nécessaire que pour décoder cette première ligne, notamment quand mon code plante d'entrée.
Bref, mon ESP-01S semble s'initialiser à 74880 avant de passer et rester à 115200.
 
Sur ce, il faut que je replonge dans mon code puisqu'il ne fonctionne à nouveau plus, mais c'est clairement ma faute ce coup-là  [:tinostar]  

n°369413
TotalRecal​l
Modérateur
Posté le 01-04-2022 à 11:29:40  profilanswer
 

Rien à voir avec l'ESP, mais si tu es développeur je suppose que tu maitrises les outils de contrôle de code source. Je te conseille d'y avoir recours, ça facilite la chasse aux régressions. Tu peux utiliser un truc en ligne comme Github, ou t'installer en local un Tortoise Git ou Tortoise SVN par exemple.

 

Et côté IDE, si tu maitrises Visual Studio il y a un chouette plugin pour faire de l'Arduino : Visual Micro. Pour moi c'est beaucoup mieux que l'IDE Arduino, mais forcément il faut savoir se repérer dans un vrai IDE, alors que celui pour Arduino est plutôt un jouet.

 


edit : Autre chose : en lisant tes messages j'avais tiqué là dessus

Lermite a écrit :


Non parce que j'ignore si c'est le plus adapté à ce que je veux faire, et notamment si un autre ne me mâcherait pas le travail.


Peut être qu'entre temps tu as réalisé ça, mais le choix de la Board ne change quasiment rien au code que tu as écris la plupart du temps et ne te mâchera jamais le travail, ça modifie juste la façon dont le programme est compilé et uploadé en fonction des spécificités de la plateforme cible.
Quand tu commences à travailler à bas niveau ou à utiliser des fonctions avancées du µC, ça peut avoir des conséquences, mais tant que tu utilises des trucs haut niveau non.


Message édité par TotalRecall le 01-04-2022 à 11:36:41

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°369449
Lermite
Posté le 01-04-2022 à 18:19:17  profilanswer
 

Ca aura été laborieux mais tout fonctionne parfaitement!   [:lapanne:1] :sol:  
 
Un extrait où j'ai ponctuellement mis en route un chauffage électrique de 2 kW:

18:13:14.185 -> pa = 485
18:13:21.626 -> pa = 482
18:13:29.071 -> pa = 484
18:13:36.551 -> pa = 480
18:13:43.976 -> pa = 484
18:13:51.411 -> pa = 486
18:13:58.911 -> pa = 480
18:14:06.306 -> pa = 485
18:14:13.786 -> pa = 482
18:14:21.271 -> pa = 480
18:14:26.576 -> pa = 679
18:14:28.116 -> pa = 2304
18:14:29.696 -> pa = 2309
18:14:31.241 -> pa = 2288
18:14:32.841 -> pa = 2294
18:14:38.566 -> pa = 626
18:14:45.951 -> pa = 487
18:14:53.401 -> pa = 485


Il ne me reste à qu'à mettre le montage au "propre" puis à générer la courbe sur PC.
 
Merci à tous pour votre aide salvatrice :jap:  
 

n°369805
Lermite
Posté le 06-04-2022 à 12:50:51  profilanswer
 

J'ai oublié de revenir ici pour conclure ce topic en présentant le résultat du bricolage en question.
 
Le petit circuit gérant l'interface entre le phototransistor scotché au Linky et le ESP-01S:
 
https://i.ibb.co/rvtg46R/20220404-155016-8-4-300.jpg
 
Le schéma hideux, au cas où l'un d'entre vous serait assez taré pour le reproduire:
 
https://i.ibb.co/Js6Xs8L/20220404-142646-8-4-300.jpg
 
Le code actuel du ESP-01S:
 

Code :
  1. #include <ESP8266WiFi.h>
  2. #include <WiFiClient.h>
  3. #include <ESP8266HTTPClient.h>
  4. int inPin=2; // GPIO2
  5. bool e0,e1; // valeurs de l'entrée GPIO2
  6. long m0,m1; // instants en ms
  7. int ne=0; // nb d'impulsions agrégées
  8. IPAddress staticIP(192,168,1,48);
  9. IPAddress gateway(192,168,1,1);
  10. IPAddress subnet(255,255,255,0);
  11. const char* deviceName = "ESP01S";
  12. const char* ssid = "Taniere";
  13. const char* password = "mot de passe WiFi";
  14. const int intMin=3000; // intervalle minimal en ms
  15. HTTPClient http;
  16. WiFiClient client;
  17. bool isWiFiConnected()
  18. {
  19.   return(WiFi.status()==WL_CONNECTED);
  20. }
  21. void WiFiConnect()
  22. {
  23.   WiFi.setAutoConnect(false);
  24.   WiFi.disconnect();
  25.   WiFi.mode(WIFI_STA);
  26.   WiFi.hostname(deviceName);
  27.   if (!WiFi.config(staticIP, subnet, gateway))
  28.     Serial.println("WiFi.config() failed" );
  29.   WiFi.begin(ssid, password);
  30.   while (!isWiFiConnected())
  31.   {
  32.     Serial.println("Attente connexion WiFi" );
  33.     delay(500); 
  34.   }
  35.   Serial.println("WiFi connecté !!!" );
  36.   WiFi.setAutoConnect(true);
  37. }
  38. void checkWiFi()
  39. {
  40.   if (!isWiFiConnected())
  41.     WiFiConnect();
  42. }
  43. void getHttp(int pa)
  44. {
  45.   static int httpCode;
  46.   String url="http://192.168.1.39/caverne/setLinkyPuissanceActive.php?pa="+String(pa);
  47.   http.begin(client,url);
  48.   httpCode = http.GET();
  49.   if ((httpCode>0)&&(httpCode!=200))
  50.     Serial.println(http.getString());   
  51.   http.end();
  52. }
  53. void setup()
  54. {
  55.   e0=true
  56.   m0=0;
  57.   Serial.begin(115200);
  58.   delay(300);
  59.   pinMode(inPin,INPUT);
  60.   checkWiFi();
  61. }
  62. void loop()
  63. {
  64.   static long interv;
  65.   static int pa;
  66.   e1=digitalRead(inPin);
  67.   if ((e1!=e0)&&!e1) // si passage de l'entrée à l'état bas
  68.   {
  69.     ne++;
  70.     m1=long(millis()); 
  71.     interv=m1-m0;
  72.     if (interv>=intMin)
  73.     {
  74.       if ((m0>0)&&(interv>0)) // piteuse tentative de gérer la remise à zéro de millis() tous les 50 jours
  75.       {
  76.         pa=ne*3600000/interv;
  77.         Serial.println("pa = "+String(pa));   
  78.         getHttp(pa);
  79.       }
  80.       m0=m1;
  81.       ne=0;
  82.     }   
  83.   }
  84.   e0=e1;
  85. }


 
Une petite optimisation reste à faire: l’agrégation des valeurs mesurées pour les envoyer groupées au serveur, pour limiter le nombre de requêtes http sans limiter le nombre de mesures.
 
La courbe obtenue, celle en jaune/vert parmi les données de ma station météo:
 
https://zupimages.net/up/22/14/5jeg.png

n°369830
TotalRecal​l
Modérateur
Posté le 06-04-2022 à 16:50:31  profilanswer
 

Bah pour un débutant tu t'en es bien sorti, et vite [:implosion du tibia]
:jap:


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°369831
Lermite
Posté le 06-04-2022 à 16:51:12  profilanswer
 

TotalRecall a écrit :

Bah pour un débutant tu t'en es bien sorti, et vite [:implosion du tibia]
:jap:


Merci mais il n'y a que sur le ESP8266 que j'étais un noob total, sans la moindre expérience.
Le reste, je le maîtrisais, la partie sur PC du moins parce qu'en électronique, je suis plus approximatif  :whistle:  
 
Si j'ai finalement pu mater l'ESP-01S, c'est uniquement grâce à vous ici et le topic Arduino.
Sans cette assistance salvatrice, je ne serais sans doute arrivé à rien.
 
C'est donc à vous que le mérite de ce bricolage revient avant tout  :jap:
 
Ce bricolage est en tout cas un succès au-delà de mes espérances puisqu'il me permet au final de distinguer et quantifier la consommation des appareils chez moi: réfrigérateur, congélateur, chauffe-eau, machine à pain, sèche-cheveux, plaque à induction, fours, etc....
Ca me donne plusieurs pistes pour réduire ma consommation.
La première est déjà concrétisée: coller un programmateur au chauffe-eau pour qu'il ne fonctionne plus que lorsqu'il est vraiment utile.


Message édité par Lermite le 06-04-2022 à 16:59:11
n°369832
TotalRecal​l
Modérateur
Posté le 06-04-2022 à 16:58:55  profilanswer
 

Et ça fait toujours plaisir d'aider, on est là pour ça :)

 

C'est quoi le bitonio noir en bas à droite du PCB ? Un disjoncteur ?
edit : ou plus connement un interrupteur marche/arret pour le tout [:slackerbitch]

Message cité 1 fois
Message édité par TotalRecall le 06-04-2022 à 17:00:51

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°369833
Lermite
Posté le 06-04-2022 à 17:02:32  profilanswer
 

TotalRecall a écrit :

Le petit poussoir à gauche est relié à la broche RST de l'ESP. Il est utile pour le réinitialiser sans forcément couper puis rétablir son alimentation.

Ce petit bouton est bien utile finalement parce que comme je m'y attendais, ma tentative de gérer la remise à zéro de millis() est un échec. Un simple appui sur ce bouton permet ainsi de passer outre mon incompétence en remettant sur les rails l'ESP-01S pour cinquante jours avant le prochain plantage nécessitant un nouvel appui  [:tinostar]


Message édité par Lermite le 11-05-2022 à 21:08:28
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
commande de contacteur par PC portablePas de terre pour un chargeur de PC portable : problèmes possibles ?
MAJ : Réparation kit enceintes PC Corsair SP2500 programmeur CH341A 5v / 3.3v ?
Question ? J'ai récupéré 5 Pc fixe dans une poubelleEcran PC Viewsonic avec panne bizarre
Projet PC intégré au bureauModules SONOFF 5V 7-32V
Soudure radiateur PC portableConseils pour un nano PC avec un but spécifique
Plus de sujets relatifs à : Acquérir impulsions 5V sur PC


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR