Go Down

Topic: ESP8266 et arduino (Read 5518 times) previous topic - next topic

J-M-L

#105
Nov 25, 2018, 05:11 pm Last Edit: Nov 25, 2018, 05:14 pm by J-M-L
il ne faut pas déclarer 2 fois l'instance.

Si vous regardez dans le fichier WiFiServer.h vous verrez que begin a deux signatures dont une qui prend un port en paramètre. Si vous allez voir le code source
Code: [Select]
void WiFiServer::begin(uint16_t port) {
    close();
_port = port;

on voit que ça ferme le serveur et le rouvre sur le nouveau port

Donc vous déclarez en variable globale et créez un serveur qui écoute sur le port standard
Code: [Select]
WiFiServer server(80);
et dans le setup() au lieu de faire
Code: [Select]
server.begin();vous faites
Code: [Select]
server.begin(atoi(Ini_Port_UDP)); // ferme l'ancien serveur et rouvre sur le nouveau port

à tester
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

EricRecifal33480

Bonjour,

Après un break sur mon projet, je rencontre un souci sur mon code.

C'est pratiquement fonctionnel mais j'ai un souci avec le serveur NTP.

Quand je met le code du serveur NTP seul, il fonctionne mais quand je l'imbrique dans le code, l'heure ne remonte pas dans mon programme :smiley-confuse:

Pouvez vous m'aider?

Cordialement

EricRecifal33480

Bonjour,

Je galère toujours avec mon NTP qui ne veux pas fonctionner ...

Je vais poser une question bête, j'ai vu que certain programme arduino etait constitué de plusieurs onglet .h

Existe t' il un tuto pour créé cela ? En fait je me rend compte que très rapidement ca deviens compliqué de tout lire et j'aimerais "decouper" mon programme pour avoir

un onglet avec la gestion de ma SD
un onglet avec la gestion du webserver
un onglet pour le NTP ou pas je sais pas encore

et juste le minimum de code dans le projet principal qui fait des appels dans les autres onglets

Je me dit que déjà ce serait plus simple à débeuguer. Là je vire le code et le remet au fur et à mesure

Merci pour votre aide

al1fch

#108
Jun 17, 2019, 04:43 pm Last Edit: Jun 17, 2019, 05:02 pm by al1fch
 Il ya eu récemment des échanges sur le sujet du fractionnement du code dont un ou deux tutos récents

68tjs

#109
Jun 17, 2019, 06:01 pm Last Edit: Jun 17, 2019, 06:03 pm by 68tjs
Quote
j'ai vu que certain programme arduino etait constitué de plusieurs onglet .h
Tu as vu trop vite, le programme n'est pas dans les fichiers *.h mais dans les fichiers *.cpp.
Mais pour comprendre la lecture de tutos est indispensable, il y a ceux dont al1fch donne références et aussi des tuto de C tout simplement comme on peut en trouver sur Openclassroom ou developez.com.

Petite introduction :

Base n: 1 : le compilateur doit tout savoir avant de commencer la compilation.
Il faut déclarer les variables bien sur mais aussi les prototypes de fonctions : si on ne  prévient pas le compilateur au début du code qu'il va trouver la fonction machin() dès qu'il trouvera un appel à machin() il génèrera immédiatement une erreur.
Par contre le code de la fonction machin() peut se trouver n'importe où dans le fichier, ce qui compte c'est que le compilateur soit prévenu dès les premières lignes du fichier qu'une fonction machin() existe, même s'il n'en connait pas encore le contenu.

Base n: 2 : le compilateur compile les fichiers un par un, ce qui impose que tous les renseignements soit présents dans chaque fichier cpp. Le résultat de la compilation est un fichier objet (*.o) par fichier *.cpp

Base n 3 : l'éditeur de lien (linker en anglais) assemble tous les fichiers objet (*.o)  pour créer le fichier programme.

Dans un fichier ino c'est l'ide qui fait les déclarations des prototypes de fonction c'est pour cela que tu ne t'en es jamais occupé, mais avec des fichiers cpp c'est à toi de le faire.

Plutôt que de tout se taper à la main à chaque fois on utilise une méthode de fainéant : les fichier d'entête ou fichier *.h
"h" comme header  (header = en français en-tête).
Dans ces fichiers on met tous ce qui doit être déclaré pour que le compilateur  puisse compiler le fichier cpp compagnon.
On a souvent la configuration suivante  en tête de fichier machin.cpp:

# include <Arduino.h>   // Pour pouvoir utiliser les fonctions arduino comme digitalWrite() par exemple
# include "machin.h"     // fichier compagnon du fichier machin.cpp et qui contient les déclaration pour machin.cpp

Une explication :
Le fichier  Arduino.h et son emplacement sont connu de l'IDE Arduino, on utilise alors les chevrons <  >
Le fichier machin.h ne fait pas partie des fichiers connus de l'IDE, on le place dans le même répertoire que le fichier ino et cpp. L'usage des guillemets anglais "  " indique au compilateur qu'il faut chercher ce fichier dans le répertoire courant.

Bonne lecture de tous les tutos qui t'ont été indiqués.

EricRecifal33480

Merci pour ces retours

Je suis vraiment pas une lumière car je n'ai pas trouvé les tutos dont vous m'avez parlé  :)

Malgré cela j'ai trouvé un tuto simple qui faisait un résumé de ce qui est expliqué dans la post 109

J'ai commencé a m'essayer mais déjà je bute

j'ai créé un .ino, .h, .cpp

Quand je met dans l'esp pas de problème mais comment faire les Serial.print ... dans le .cpp ?

Car là je ne sais pas s'il y passe ou pas  .... car soit me manque un truc soit il y passe pas car je ne voit pas le message "Connecter_Wifi_ok"

MicroQuettas

Bonsoir,

J'ai publié ma recette de cuisine ici : recette pour la compilation modulaire, mais il y en a d'autres...

Attention, ce n'est pas l'aspect le plus simple du C, mais une fois qu'on arrive à faire marcher, il faut bien reconnaître que c'est propre.

Bonne bidouile,

MicroQuettas

kamill

Quand je met dans l'esp pas de problème mais comment faire les Serial.print ... dans le .cpp
Il faut inclure Arduino.h
#include <Arduino.h>

68tjs

#113
Jun 18, 2019, 10:29 pm Last Edit: Jun 18, 2019, 10:32 pm by 68tjs
Quote
Quand je met dans l'esp pas de problème mais comment faire les Serial.print ... dans le .cpp ?
Non tu ne mets pas dans "l'esp" tu mets dans le fichier ino et le fichier ino est complété par l'IDE.

On a souvent la configuration suivante  en tête de fichier machin.cpp:

# include <Arduino.h>   // Pour pouvoir utiliser les fonctions arduino comme digitalWrite() par exemple
# include "machin.h"     // fichier compagnon du fichier machin.cpp et qui contient les déclaration pour machin.cpp
l me semble avoir dit ce qu'il fallait faire .

Arrête de bricoler, lis des tutos d'initiation au C.
Arduino ce n'est pas un langage, c'est du C et Cpp, le compilateur de l'IDE c'est un compilateur C et Cpp
Il faut connaître la structure d'un vrai fichier C ou Cpp pour faire de la programmation en fichiers séparés.
Sinon contente toi d'ouvrir des onglet *.ino dans l'IDE.
Il y a un moment où il faut admettre qu'il faut se donner les moyens d'apprendre.

EricRecifal33480

Bonjour,

Merci pour vos réponses,

Comme je me doutais en faisant ce découpage j'ai isolé d'ou venais mon problème.

Maintenant me reste plus qu'a trouver pourquoi la ligne Wifi.config fait disfonctionner le NTP.

Je n'ai pas fini le découpage mais j'avance bien :)

EricRecifal33480

#115
Jun 22, 2019, 10:21 am Last Edit: Jun 22, 2019, 10:26 am by EricRecifal33480
Je m'arrache les cheveux >:(

Quand je met en commentaire la ligne Wifi.config, mon heure NTP remonte

J'ai donc mis le code dans le fichier joint

Quand je met la variable debugWifi à false la console envoie ce résultat

Code: [Select]

..
WiFi connecté.
IP address: 192.168.0.41
gateway: 192.168.0.254
subnet: 255.255.255.0
Il est : 10:18

 
Quand je met la variable debugWifi à true la console envoie ce résultat

Code: [Select]

WifiConfig actif
..
WiFi connecté.
IP address: 192.168.0.41
gateway: 192.168.0.254
subnet: 255.255.255.0
Il est : 2:0


Il est vraiment 10H, auriez vous une piste pour essayer de trouver d'ou viens mon problème ?

Merci d'avance pour votre aide

EricRecifal33480

#116
Jun 22, 2019, 01:38 pm Last Edit: Jun 22, 2019, 01:47 pm by EricRecifal33480
Je tourne en rond,

D'apres vous je dois chercher côté esp où côté box ?

Quelqu'un peut il tester chez lui mon code pour voir s'il fonctionne?

EricRecifal33480

Bonsoir

J'ai trouvé un moyen de contourner mon problème.

Ça m'embête un peu car je ne comprends pas où est le souci...

J'ai déplacé le Wifi.config après le Client.update et là ça fonctionne

Si quelqu'un a une idée de ce qui ce passe je suis preneur

Merci

Go Up