NodeMcu ESP8266

Bonjour à tous
NodeMcu ESP8266

Depuis 3 ans 1/2, j'ai un montage expérimental qui fonctionne bien. (Je ne suis pas un pro, je bidouille)

  • Module NodeMCU-ESP8266.
  • Port série moniteur 115200 b/s.
  • Port série 1200 b/s 7E1 pour lecture du compteur Linky.
  • Relève de l'heure sur le Web et mise à jour toutes les 5 mn (client d'un serveur NTP).
  • 2 contacts secs "surveillés".
  • Mesure d'une température "1 fil" DS 18B20.
  • envoi des données sur mon site (base MySQL / FREE) toutes les 15 mn.
  • Lecture des données à l'instant "t" sur une page Web locale (192.168.xx.yy) en wifi.
    Lorsque le moniteur série est raccordé, l'affichage des variables m'indique que tout se passe bien.

Pour "corser" un peu le sujet, j'ai voulu y ajouter un lecteur de pression atmosphérique BMP 280 ( I2C-biblio Adafruit)
Résultat :

  • Le moniteur de contrôle affiche bien toutes les informations souhaitées y compris la PA.
  • Loop fonctionne normalement. (durée 3 sec environ et sans erreurs)
  • Le problème : La page Web locale est très difficile à afficher, s'affiche une fois de temps en temps.
    Parfois s'affiche immédiatement, Parfois s'affiche immédiatement mais n'est pas rafraichie (délai fixé à 5 sec)
    Parfois impossible à obtenir même après 20 tentatives. Un reset facilite l'obtention de la page.
    Parfois, partiellement ( le début uniquement).

Mon idée, mes questions :

  • Problème de chronologie des évènements, de gestion des interruptions ?
  • J'aurais bien voulu arrêter le bus I2C lorsqu'il n'est pas nécessaire mais je ne sais pas faire !
  • J'aimerais bien avoir un petit "coup de pouce" pour savoir d'où ça vient ?
  • Je ne sais pas utiliser le débogage, existe-il une aide pour cela ?

D'autres idées ?
Merci

MySQL n'est pas encore mis à jour.
http://geryko.free.fr/arduino.php

I2C : La bibliothèque wire pour l'ESP8266 se trouve ici, mais je ne vois aucune instruction pour l'arrêter. Pourquoi voudrais-tu l'arrêter ?

Je ne connais pas le php, mais sans le code Arduino, difficile d'aider...

+1

si le ralentissement est consécutif à l'ajout du BMP280 il faut voir comment son interrogation se situe dans l'ensemble.

debug ? dans l'IDE Arduino, pour ESP8266 il y a bien la ligne 'Debug level' et une floppée d'options
Dans ton cas 'HTTP_SERVER' est à essayer ou peut être 'WiFi' ,...ou 'Core' ... sans garantie sur l'utilité des infos obtenues pour résoudre le problème

Bonsoir lesept et al1fch,

Merci pour vos réponses. Pas facile d'appréhender ce problème

@lesept : Arrêter I2C car je pense que c'est lui qui gêne, prend du temps et génère des interruptions prioritaires ???

@al1fch Ce n'est pas vraiment un ralentissement. Loop travaille normalement.
C'est la page web locale ne s'affiche pas ou rarement sur le PC qui s'y connecte.
server.handleClient(); // qui contient la page étant à priori l'envoi de la page au client.
Cette page est absente ou tronquée, .... ?
Je pourrais joindre le void loop() { mais il faut que le je nettoie car à force de le triturer il est illlisible ....

Je vais encore tester d'autres combinaisons, l'ordre les lectures des entrées/capteurs, modifier des temporisations ....
Cela fait déjà 10 jours que je suis la dessus.
Bien à vous.

sur un esp8266 le travail du WiFi, donc du serveur , entre en concurrence avec le reste de l'application, avec un probable ralentissment de la réponse à la requête du client, c'est à ce ralentissement que je pensais
server.handleClient(); traite la requête du client et déclenche l'envoi de la page.... en utilisant le temps restant disponible , temps résultant peut être faible et morcelé.

L'esp8266 n'est pas un foudre de guerre pour l'envoi des pages HTML, si en plus on lui met des bâtons dans les roues en l'interrompant fréquement....il fait ce qu'il peut et le navigateur n'y trouve pas son compte.

je n'utilise pas le BM280 mais voit dans sa librairie faite par Adafruit une commande de mise en pause , c'est peut être à utiliser pour libérer du 'temps de calcul' et , en marche, il semble y avoir diffétentes cadences de travail.

Ajouter des lignes contenant

yield();

par endroits permet à l'ESP8266 de respirer un peu, c'est à dire de lui donner du temps pour faire avancer les tâches de background comme la gestion du wifi, de la stack TCP/IP, etc. Ca pourrait régler le problème...

oui, sauf à l'intérieur des routines d'interruption !

Bonsoir à tous,

Oui, j'avais déjà essayé 1 ou 2 yield(); Peut-être pas assez ?

Par ailleurs, j'ai trouvé une autre piste à explorer.
Le fonctionnement semble bon mais il faut encore que je creuse un peu car je n'ai pas d'explication claire.
a) Le fait d'ajouter 2 lignes dans ma pas web aggrave fortement le problème.
b) Le fait de supprimer 6 lignes (de java-script) dans ma page web apporte un bon fonctionnement.

Cela confirme vos suggestions et je dois approcher du but final.

Laissez-moi un peu de temps pour essayer d'y voir clair.
Je vous tiens au courant.
Merci.

Bonsoir à tous,

Le point de la situation.

  • J'ai ajouté quelques yield(); jusqu'à 5 ou 6 sans succès. Je les ai donc retirés.
  • J'ai ajouté/modifié quelques delay(xxx); modifié l'ordre des procédures, sans vraiment apporter de solution claire.
  • la solution la plus radicale a été de supprimer des lignes de ma page Web ( 8 lignes de visual basic = 774 caractères)
    ça fonctionnait mais je sentais que je me trouvais sur une corde raide, en équilibre. Explications ? ??
    Problème de répartition de temps ? que je ne sais pas traiter ?
    J'ai vu que d'autres avaient rencontré ce problème mais sans laisser d'explications.

En "fouinant" un peu plus, je me suis rendu compte que de temps en temps, un peu trop, j'avais des erreurs de
réception de trames Linky. Le signal fourni par l'optocoupleur était un peu faible et limite. (vu a l'oscilloscope environ 2V)

Après y avoir remédié : tout semble fonctionner correctement.

  • concernant les 8 lignes supprimées, pas vraiment d'explications.
  • concernant le signal Linky, un conseil, faire bien attention. Bien mettre en forme le signal ou mettre un potentiomètre de réglage car j'avais allongé mon câble (bobine de 40 m environ) pour travailler sur table et de ce fait ... ! ! ! !
    Dans quelques jours, les liens que j'ai mis sur mon 1er message devraient être mis à jour.

Merci à tous,

Bonjour,
Vous avez regardé comment est envoyée votre page html ? Un dysfonctionnement lié à la taille fait tout de suite penser à un débordement de buffer. En plus, avec TCP, il y a la limite de charge utile de 1460 octets de charge utile par paquet. Est ce bien géré ? Enfin, les lignes (VB ou js ?) dans votre page ne sont peut-être pas anodines ? Que faisaient-elles ? Ce n'est jamais bon de rester sur une explication mystérieuse.
Bonne bidouille
MicroQuettas

Bonsoir à tous,

Moi non plus je n'aime pas rester sur un doute mais je fais ce que je peux !
@MicroQuettas Merci pour ton intérêt.

Quelques précisions si cela intéresse :

  • J'ai surtout pensé à un problème de chronologie mais effectivement il pourrait s'agir d'un débordement ?
  • La limite de charge utile de 1460 octets utile par paquet TCP me concerne-t-elle ? C'est le boulot de TCP ? ou des couches inférieures (OSI)
  • Voici à quelques octets près la taille de ma page Web : 2275 octets (y compris le javascript 520 octets))
    En supprimant le JS je descends donc à 1755 et là ça fonctionne bien.

Le JS pour information.

"<SCRIPT language= "javascript"> <!-- \n";
"var cejour = new Date()\n var jour = cejour.getDate()\n var mois = cejour.getMonth()+1\n";
"var annee = cejour.getFullYear()\n var heure = cejour.getHours()\n var minute = cejour.getMinutes()\n";
"var seconde = cejour.getSeconds()\n if (seconde<10)seconde = "0"+seconde\n";
"if (mois<10) mois = "0"+ mois\n if (minute<10)minute = "0"+minute\n";
"document.write("     "+ jour +"/"+ mois + "/"+ annee+ " "+ heure +":"+ minute +":"+ seconde)\n";
"";

Bonsoir

La limite de charge utile de 1460 octets utile par paquet TCP me concerne-t-elle ? C'est le boulot de TCP ? ou des couches inférieures (OSI)

ce boulot consommant du temps de calcul ça peut finir par te concerner !!
l'ESP8266 ne peut pas être au four et au moulin.....et à tous les étages des couches à la fois

Bonjour,

Je n'ai que des connaissances élémentaires en JavaScript, mais le vôtre me chagrine :

  • vous ouvrez une balise html de commentaire ("") pas (?). Les navigateurs modernes n'ont plus besoin que le code du script soit placé en commentaire html. Il suffit de placer le code entre les balises d'ouverture et fermeture du script (respectivement <script ....> et ),
  • j'utilise sans problème les balises d'ouverture et de fermeture suivantes :
  • vous avez mis SCRIPT en majuscules. Vérifiez si c'est licite,
  • êtes vous sûr du reste du script ? C'est pointu et ça ne dit rien quand ça plante. Regardez l'instruction "alert", bien pratique pour debugger le JavaScript.

Le commentaire ouvert et (jamais ?) refermé expliquerait bien un patinage du navigateur... En tel cas, le problème serait sur le client, pas sur l'ESP serveur.
Bonne bidouille
MicroQuettas

Bonsoir les amis,

Je vous remercie pour toutes vos remarques mais je rappelle que je ne suis pas un pro.
J'essaie d'en tenir compte et de toujours apprendre malgré mon "grand" âge. J'ai même eu "droit" au vaccin prioritaire !

  • Je me doute bien qu'il faut de temps pour gérer la transmission et le protocole mais je ne vois pas très bien
    comment un utilisateur peut gérer cela. J'ai survolé l'étude du TCP/IP cela fait maintenant 25 ans environ.

  • Même chose pour le JS.
    A l'époque, le livre que je possédais préconisait de mettre le JS dans des balises de commentaires comme je l'ai fait.
    ( pour le cas où le navigateur n'aurait pas pas su interpréter le JS)
    Effectivement il manque la fermeture de la balise commentaire : "document.write(...+ seconde) \n "; et " //--> ";
    (effacement par mégarde depuis quelques années ?) mais cela n'a jamais posé de problème.
    "SCRIPT" était bien en majuscules.

Pour l'instant, je peux dire que ça fonctionne. J'ai même remplacé le JS (date et heure du navigateur) par un calcul
"maison" pour retrouver la date sur mon serveur NTP à partir du temps UNIX. (avec changement d'heure automatique été/hiver). Ce dernier ne fournissant que l'heure GMT. ("europe.pool.ntp.org").

J'ai fait le maxi sur ce problème, obligé de "mettre la poussière sous le tapis" sans avoir trouvé d'explication claire.
Désolé. Je ne vais pas y passer l'année".
Voici le résultat en plus des 2 liens sur mon post N° 1 Merci à tous. Je reste à l'écoute.

Si quelqu'un veut aussi s'amuser, je fournis le fichier zip et le schéma réalisé (en l'état, )

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.