UNO et Wifi ESP8266

Bonjour,

Je suis nouveau dans le monde de l'arduino.

Je test actuellement le petit module wifi ESP8266 avec mon arduino UNO.

La connexion semble OK et je vois la connexion dans l'interface de la livebox.

Cependant, je trouve les réponses dans le moniteur bizarre. En effet, le meilleur résultat est obtenu avec 115200 bauds au niveau de l'ESP mais malgré cela, la réponse ne me semble pas totalement correct (parfois des mots lisibles et parfois non lisibles).

D’où cela peut il venir ?

Merci.

**********************************************************
**************** DEBUT DE L'INITIALISATION ***************
**************************AT+RST**************************
AT%­*U¨H¨HèjªHø
 ets Jan  8 2013,rst cause:4, boot mode:(3,7)

wdt reset
lo`d 0x40100000, len 816, room 16 
tail 0
chksum 0x8d
load 0x3ffe8000, l tail 12
slfo
xv 
 lmsl�ô
Ai-Thioker Technology Co. Ltd/

ready
****************************AT****************************
AT


jªHø**************************AT+GMR**************************
AT+TJÕ¨H(Q�²•ÉÍ¥½¹é‚r’Šrƒr�j
SDK vessiËK‚rÊrªj

jªHø***********************AT+CWMODE=3************************
AT+CWMODEO¦CC†
OK
*************************AT+CWJAP=************************
AT+¨•©PÕ¢•Íщb
é•Éщj
*************************AT+CIFSR*************************
AT+CIFSS

b]®^‚¹rsj

OK
***********************AT+CIPMUX=1************************
AT+CHPMUXOLCC¡C¡jªHø********************AT+CIPSERVER=1,80**********************
@T+CIPSERWEROL  ‚‚j

jªHø**********************************************************
***************** INITIALISATION TERMINEE ****************
**********************************************************

Tu utilises SoftwareSerial ?

Bonsoir et merci pour le retour.

Effectivement, j’utilise SoftwareSerial.h

Il s’agit d’un code trouvé sur le net.
Ce code n’a pas de but précis, c’est juste pour tester.

#include <SoftwareSerial.h>

    SoftwareSerial ESP8266(10, 11);

    String NomduReseauWifi = "mon_ssid"; // Garder les guillements
    String MotDePasse      = "mon_pass"; // Garder les guillements

    /****************************************************************/
    /*                             INIT                             */
    /****************************************************************/
    void setup()
    {
      Serial.begin(9600);
      ESP8266.begin(115200);  
      initESP8266();
    }
    /****************************************************************/
    /*                        BOUCLE INFINIE                        */
    /****************************************************************/
    void loop()
    {
       while(ESP8266.available())
       {    
         Serial.println(ESP8266.readString());
       }   
    }
    /****************************************************************/
    /*                Fonction qui initialise l'ESP8266             */
    /****************************************************************/
    void initESP8266()
    {  
      Serial.println("**********************************************************");  
      Serial.println("**************** DEBUT DE L'INITIALISATION ***************");
      Serial.println("**************************AT+RST**************************");  
      envoieAuESP8266("AT+RST");
      recoitDuESP8266(2000);
      Serial.println("****************************AT****************************");  
      envoieAuESP8266("AT");
      recoitDuESP8266(2000);
      Serial.println("**************************AT+GMR**************************");  
      envoieAuESP8266("AT+GMR");
      recoitDuESP8266(2000);
      Serial.println("***********************AT+CWMODE=3************************");
      envoieAuESP8266("AT+CWMODE=3");
      recoitDuESP8266(5000);
      Serial.println("*************************AT+CWJAP=************************");
      envoieAuESP8266("AT+CWJAP=\""+ NomduReseauWifi + "\",\"" + MotDePasse +"\"");
      recoitDuESP8266(5000);
      Serial.println("*************************AT+CIFSR*************************");
      envoieAuESP8266("AT+CIFSR");
      recoitDuESP8266(1000);
      Serial.println("***********************AT+CIPMUX=1************************");
      envoieAuESP8266("AT+CIPMUX=1");   
      recoitDuESP8266(1000);
      Serial.println("********************AT+CIPSERVER=1,80**********************");
      envoieAuESP8266("AT+CIPSERVER=1,8080");
      recoitDuESP8266(1000);
      Serial.println("**********************************************************");
      Serial.println("***************** INITIALISATION TERMINEE ****************");
      Serial.println("**********************************************************");
      Serial.println("");  
    }

    /****************************************************************/
    /*        Fonction qui envoie une commande à l'ESP8266          */
    /****************************************************************/
    void envoieAuESP8266(String commande)
    {  
      ESP8266.println(commande);
    }
    /****************************************************************/
    /*Fonction qui lit et affiche les messages envoyés par l'ESP8266*/
    /****************************************************************/
    void recoitDuESP8266(const int timeout)
    {
      String reponse = "";
      long int time = millis();
      while( (time+timeout) > millis())
      {
        while(ESP8266.available())
        {
          char c = ESP8266.read();
          reponse+=c;
        }
      }
      Serial.print(reponse);   
    }

J'ai eu les mêmes soucis. Même problème en diminuant la vitesse à 9600. Je n'ai pas trouvé de solution. Pas de soucis avec le HardwareSerial (pin 0 et 1). Mais du coup c'est galère pour programmer le uno. Donc vaut mieux avoir une autre carte proposant un 2e port série matériel. J'ai tenté d'utiliser des librairies pour l'ESP, mais ça semblait pas très fiable. Je ne le trouve pas très facile à utiliser ce module... J'ai commencé à regarder pour programmer directement l'ESP.

Merci pour les infos.

As tu essayé de flasher ton module avec la dernière version ?

Tu as un bout de code pour tester l'HardwareSerial ?

J'ai mis à jour le firmware AT sans succès. J'ai flashé pour le firmware NodeMCU et ait eu les mêmes soucis

Pendant un moment, j'ai fait l'inverse : Brancher l'ESP sur les pins 0 et 1 Brancher une carte linux embarquée (style RaspberryPi) sur les pins 10 et 11 pour le debug.

Après tous ces tests, j'en ai déduit que c'est le SoftwareSerial qui pose pb.

Dans ton code, inverse les Serial et les ESP8266. Mais dans la console, tu ne verras plus grand chose. seulement les commandes AT du uno vers l'ESP.

J'ai aussi fait un autre test pour montrer que le port série matériel est plus fiable : Connecter l'ESP sur les pins 0 et 1 (HardwareSerial), mais connecter les 2 TX ensembles et les 2 RX ensembles Charger un sketch vide dans le UNO (setup vide et loop vide) Tu pourras alors envoyer manuellement les commandes AT vers l'ESP depuis la console de l'IDE Arduino. Les données devraient être correctement affichées.

tahitibob35:
J’ai aussi fait un autre test pour montrer que le port série matériel est plus fiable :
Connecter l’ESP sur les pins 0 et 1 (HardwareSerial), mais connecter les 2 TX ensembles et les 2 RX ensembles
Charger un sketch vide dans le UNO (setup vide et loop vide)
Tu pourras alors envoyer manuellement les commandes AT vers l’ESP depuis la console de l’IDE Arduino.
Les données devraient être correctement affichées.

Bonjour tahitibob35,
Je viens de tester sur les pins 0 et 1 (RX/RX et TX/TX).
J’ai n’ai pas de réponse.

Salut
J’avais commencé a écrire tout un speech, mais c’est pas une bonne idée

Tu ouvres la console de l’arduino,
tu attends 2 sec, que le uno se réinitialise.
tu connectes la broche RESET de l’ESP au GND.
tu déconnectes la broche RESET et la laisses en l’air
tu verras le boot de l’ESP dans la console.
Tu dois peut être aussi changer la vitesse de transmission de la console de l’arduino (par défaut à 9600).

Quelle est la version du firmware ?
Quel est le cablage ? (il doit être bon, puisque tes premiers tests renvoyaient bien quelque chose…)
Tu convertis bien les niveaux ? 3,3V <-> 5V

OK, je vais essayer ca.

Mon ESP est alimenté en 3,3 depuis l’UNO.

Donc :

ESP   <>  UNO
--------------
VCC   <>  3,3
CH_PD <>  3,3
GND   <>  GND
RX    <>  RX
TX    <>  TX
RST   <>  GND (le temps d'initialiser)

Tu ne dois pas connecter le TX de l'arduino directement à l'ESP comme ça. Il envoie du 5V ! Et le VCC pareil ! Parcours ce fil : http://forum.arduino.cc/index.php?topic=267564.0 Il y a un montage conseillé.

tahitibob35: Tu ne dois pas connecter le TX de l'arduino directement à l'ESP comme ça. Il envoie du 5V ! Et le VCC pareil ! Parcours ce fil : http://forum.arduino.cc/index.php?topic=267564.0 Il y a un montage conseillé.

OK merci, je vais lire tout ca.

Bonjour tahitibob35,

J'ai fais le montage préconisé (resistances pour le 3,3 et RESET).

J'obtiens le retour suivant (ça commence par plein de caractères puis fini par Ready).

En revanche, si je balance une commande genre AT / AT+RST ou autre), il ne se passe rien.

ððrllœŸ|..............................
...
Ai-Thinker Technology Co. Ltd.

ready

C'est bon, j'ai réussi.

En fait, il me fallait ajouter "Les deux, NL et CR" dans le moniteur pour envoyer le commande.

AT


OK
AT+GMR

AT version:0.21.0.0
SDK version:0.9.5

OK

Cool…
Tu ne devrais pas avoir de pb de caractères.
Ca permet de comprendre comment fonctionnent les commandes AT.
Pour ton pb original, il y a un autre post relatif au même problème avoir softwareserial :