Afin de comprendre au mieux ma facture EDF, je recherche depuis un petit bout de temps une solution pour remonter les informations téléinfo de mon compteur vers mon système domotique ou juste un site de graph en ligne, mais sans toutes les fonctionnalités des sketch Wifinfo de Charles Hallard.
Mais voilà, après de nombreuses recherches sur internet, impossible de trouver la bonne solution et j'ai besoin de votre éclaircissement pour mieux comprendre.
J'ai pu valider que toute la partie électronique fonctionne correctement que ce soit avec Wifinfo (merci Charles), ou avec le script ci-dessous et sur un arduino Uno, j'ai bien les informations qui remontent :
Mais voilà, dès que je m'attaque à la partie ESP8266 (Nodemcu ou Wemos D1), en utilisant ce script, j'ai mon Wemos qui part en vrille en mode crash, et les autres sketch ne me remontent aucune information. J'ai bien fait attention concernant l'écoute du port Serial qui doit être configuré en 1200 bauds, parité pair et sur 7 bits (donc avec un putty), mais je n'ai aucune information qui remonte. Voici le script de base sur lequel j'ai tester et sans résultat.
Le branchement se fait bien sur la PIN D7
Je n'arrive à comprendre ce que je fais de mal. Après je sais que c'est assez particulier ce type de configuration vis à vis du port série, mais rien à faire dans ma lecture.
Quand l'ESP8266 plante il envoie un message d'erreur
tu as peut être une indication du genre "watchdog reset"
en effet ton code de test enfile des Serial.print() sans laisser l'ESP8266 'respirer'
Il faut laisser du temps à la partie WiFi qui tourne en tâche de fond en parallèle avec ton sketch, faute de quoi le WiFi provoque un reset via le chien de garde.
Un delay de temps à autre permet cela
( le delay() avec un ESP8266 n'est pas bloquant, c'est juste une pause de loop(), mise à profit à profit par compilateur pour laisser jouer un peu le WiFi)
Içi dans le sketch c'est un *yield()*en fin de boucle qui est utilisé dans le même but
bonjour
Je ne suis qu'un débutant. Je ne peut malheureusement pas aider pour le code.
Par contre j'ai installé sans soucis, et ça fonctionne très bien cette version. https://forum.arduino.cc/index.php?topic=565222.0
Je pense que cela correspond a ce que tu cherche c'est a la fois simple et complet.
Au pire, en ligne un peu plus en avant dans les posts tu trouvera une autre version du même auteur encore plus simple testée et fonctionnelle.
Bonne bricole Alain
En plus de ce qui a été dit sur les timeout, cette partie n'est pas clair :
weado:
J'ai bien fait attention concernant l'écoute du port Serial qui doit être configuré en 1200 bauds, parité pair et sur 7 bits (donc avec un putty), mais je n'ai aucune information qui remonte.
Putty est pour PC ... qu'est est le rapport avec un ESP ?
Il faut donc que tu teste que ton compteur émet bien des trames avec un PC ou un PI quelconque. Il est possible que la téléinfo ne soit simplement pas activée ou n'envoie que l'entête. C'est un parametre qui ne peut etre changer que par EDF il me semble et certains compteurs ont été installé sans qui soit mis.
@destroyedlolo : Pas de soucis, je reçois bien et valider avec un arduino Uno et le premier sketch du premier post. J'utilise Putty pour écouter le port Serie car j'ai brancher mon ESP sur mon PC et vu que l'écoute doit se faire sur le même paramétrage que le téléinfo (1200 bauds, parité paire ...), c'est la raison pour laquelle j'utilise Putty, car le monitor de l'arduino IDE ne permet pas une tel configuration (peut être que je me trompe aussi).
@Alain-alph et @al1fch pour la partie "Wireless-TeleInfo-ESP8266", j'ai d'ores et déjà vu ces différents projets proposés, mais je n'ai pas le niveau aujourd'hui me permettant d'en extraire uniquement mon besoin qui est de faire un bout de programme pour récupérer l'information de la puissance instantanée (PAPP) pour l'envoyer via HTTP(S) sur un autre système et maîtriser un peu le système (comme beaucoup de personne ici).
Je vais essayer avec les informations fournies de @al1fch et avec la version "Arduino_Softserial_JSON" de Charles (qui est simple à voir le contenu). Je vous tiens au courant et partagerai le code une fois terminé (rapidement je l'espère )
Je vois que tu cherches à émettre des informations sur Serial1, à des fins de debug je suppose ?
Serial1 possède uniquement le TX.
Le TX est connecté à GPIO2, soit la pin D4 sur un NODEMCU ou WEMOS D1.
Je suppose que tu sais que ce TX fonctionne en 3.3V et qu'il te faut un convertisseur USB ?
vu que l'écoute doit se faire sur le même paramétrage que le téléinfo
Je ne comprends pas cette remarque.
Qu'est ce qui empêche d'émettre vers le PC des informations à une vitesse et parité différentes de celles du téléinfo ?
Le code présent dans la fonction loop(), bien que très simple, a un gros défaut : il est basé sur des boucles while() dont la sortie dépend de ce qui est reçu sur la ligne série.
Autant dire qu'à l'échelle de temps arduino, le while peut durer très longtemps, ce qui n'est pas compatible avec un ESP qui a besoin de récupérer régulièrement la main pour gérer le WIFI.
Le code ci-dessous fait la même chose mais sans while : nous disposons déjà d'une boucle avec la fonction loop(). Il suffit juste de coder la logique de fonctionnement sur plusieurs itérations de loop().
Cela devrait fonctionner bien mieux sous ESP
void loop()
{
static bool trame_en_cours = false; //static pour conserver la valeur entre deux loop()
if (cptSerial->available())
{
char charIn = cptSerial->read() & 0x7F;
if (trame_en_cours == false && charIn == startFrame)
{
trame_en_cours = true;
}
else if (trame_en_cours && charIn != endFrame)
{
Serial.print(charIn);
}
else if (trame_en_cours && charIn == endFrame)
{
Serial.println();
trame_en_cours = false;
}
}
}
@hbachetti : Pour moi, le Serial est utilisé par le réception des informations du téléinfo, donc je dois mettre mon moniteur série sur les même caractéristiques afin que les informations soient lisibles, mais à priori ce n'est pas le cas ? Je comprends un peu mieux mes erreurs pour le coup. Je pense que je vais me prendre un cours la dessus
@bricoleau : Cela pourrait expliquer le fait que mon Wemos se met en vrac. Je vais tester cela rapidement.
@bricoleau : Merci pour ton aide, effectivement maintenant j'ai bien les retours attendus. Il me reste à traitement mes retours. Voici le sketch complet pour ceux que cela intéresse :
#include <SoftwareSerial.h>
#define startFrame 0x02
#define endFrame 0x03
SoftwareSerial* cptSerial;
void setup()
{
Serial.begin(115200);
cptSerial = new SoftwareSerial(D7, D4);
cptSerial->begin(1200);
Serial.println(F("setup complete"));
}
void loop()
{
static bool trame_en_cours = false; //static pour conserver la valeur entre deux loop()
if (cptSerial->available())
{
char charIn = cptSerial->read() & 0x7F;
if (trame_en_cours == false && charIn == startFrame)
{
trame_en_cours = true;
}
else if (trame_en_cours && charIn != endFrame)
{
Serial.print(charIn);
}
else if (trame_en_cours && charIn == endFrame)
{
Serial.println();
trame_en_cours = false;
}
}
}
Bonjour à tous, je suis en train de gratter sur mon code, mais j'ai de manière complètement aléatoire des reset de mon Wemos (même avec un NodeMCU ) avec mon code.
J'ai pu lire sur internet un certains nombres de personnes ayant constatées une instabilité de la librairie SoftwareSerial surtout dans sa dernière version. Avez-vous remarqué ceci de votre côté ?
J'ai pu voir que certains utilise le port serie directement, sans passer par SoftwareSerial. Cette méthode m'enpêchera-t-il de visualiser mes remontées que je fais sur le port Serie ?
weado:
J'ai pu voir que certains utilise le port serie directement, sans passer par SoftwareSerial. Cette méthode m'enpêchera-t-il de visualiser mes remontées que je fais sur le port Serie ?
Bonjour,
il me semble que l'ESP32 possède 3 ports "hard" ce serait peut être la solution ...
mais j'ai de manière complètement aléatoire des reset de mon Wemos (même avec un NodeMCU ) avec mon code.
Repérer les indications apparaissant dans le terminal après ces resets , la cause y est indiquée .
SoftwareSerial : quelle version ? celle-ci , compatible ESP8266 ? (en règle générale il est intéressant de référer à la doc ESP8266/Arduino pour sélectionner le bonnes librairies)
Sinon il ya la possibilité de faire les remontées d'infos par la sortie TX1 (GPIO2)
l'ESP8266 a deux UARTS ..... mais seulement 1,5 port série matériel exploitables
la sortie TX1 est en GPIO2
l'entrée RX1 est neutralisée car la broche concernée est occupée par la mémoire Flash
weado:
Bonjour à tous, je suis en train de gratter sur mon code, mais j'ai de manière complètement aléatoire des reset de mon Wemos (même avec un NodeMCU ) avec mon code.
Bonjour
Pour te répondre de manière pertinente il faudrait commencer par voir le code qui pose problème.
Comme évoqué plus haut, si une exécution de loop() dure trop longtemps, le watchdog provoque un reset.
C'est peut-être encore un while malencontreux.
C'est fou, mais même en remettant le code de base, j'arrive à avoir le reset. Voici le message qui apparait à chaque (je vous épargne les lignes intermediaire).
Comme certains me dirons le "reset cause 2" correspond à un "reset pin", sauf que je n'ai rien de particulier sur ces pins, j'utilise la D7 pour la reception des informations, qui correspond à au GPIO13.
reset sans utilisation de la borne dédiée, ça fait penser à une alimentation insuffisante
L'alimentation de la carte peut elle fournir la tension et tout le courant nécessaire ?
La carte est alimentée en 5V ?
Le câble USB est-il OK pour fournir les 400 mA réclamés par moment par l'ESP ? (certains câbles USB ont des fils fins, un peu trop résistifs)
On est bien d'accord, mais pourtant, ce n'est pas ce type de montage qui doit consommer le plus, car j'ai déjà été dans des configurations avec de nombreux capteurs/LED/... sans que mon PC n'ai des problèmes de puissance, surtout que je suis branché sur le secteur.
Je vais continuer de gratter, car il y a quelques choses d'incohérents. Merci pour ton retour.
Bonsoir
Qui fournit le 5v d'alimentation de la carte D1 ?
même en remettant le code de base, j'arrive à avoir le reset
Qu'appelle-tu 'code de base' ?
Comment se comporte la carte aevc un simple programme de test comme blink ?
les apellations des cartes sur certains sites marchands sont aproximatives et 'à rallonge' , peux-tu donner un lien montrant le modèle exact de ta carte ? ça permettrait, si un schéma est disponible , de vérifier que l'entrée Reset n'est pas en l'air et qu'une résistance de 'pull-up' est bien présente.