Les Bases d'un Serveur Web sur ESP-01 en commande AT

Partie 1: Jouer avec les commandes AT

Votre ESP-01 est donc configuré par défaut avec un firmware qui embarque un langage de commandes interactif que l'on utilise sur la voie série. Ce langage de commande est spécifique à votre module et est connu sous le nom de Commandes Hayes ou commandes AT.

Les Commandes Hayes, parfois appelées Commandes AT, constituent un langage de commandes développé à l'origine pour le modem Hayes Smartmodem 300. Ce jeu de commandes s'est ensuite retrouvé dans quasiment tous les modems produits
(source = wikipedia)

Chaque fabricant, en fonction de ses besoins, s'est permis d'ajouter des extensions, des commandes spécifiques etc...

Pour les ESP la société Espressif Systems documente son jeu de commandes AT qui est dans son firmware ESP8266_NONOS_SDK que vous pouvez flasher sur votre carte.

Attention ce que vous trouverez dans ce document correspond à l'état de l'art du jeu de commande et suivant la version de votre firmware et les capacités de votre ESP, vous n'aurez peut-être toutes le commandes disponibles et éventuellement il faudra trouver une vieille version de cette doc.

Certaines commandes sont maintenant considérées comme obsolètes (on dit dépréciées, deprecated en anglais) comme par exemple AT+CWJAP pour se connecter à un point d'accès wifi est maintenant remplacé par AT+CWJAP_CUR si on ne veut pas sauver les paramètres en mémoire flash ou AT+CWJAP_DEF si on veut sauvegarder la config en flash pour le prochain reboot mais la majorité des ESP-01 que j'ai vu trainer ont peu de mémoire et on ne peut pas installer les derniers firmware et donc on n'a pas accès à ce jeu d'instruction "moderne"....

Note: il faut donc s'attendre à ce que votre ESP-01 ne réponde pas exactement comme le mien suivant votre firmware.

Mise en place du code

Pour jouer avec les commandes AT, il faut pouvoir envoyer ces commandes au module et lire la réponse (et bien sûr potasser toute la doc des commandes possibles).

Sur la base du montage décrit dans le post précédent, voici un petit code à charger pour permettre de taper directement dans la console série (réglée à 115200 bauds et envoyant New Line et Carriage Return (NL et CR))

le code est très simple, je l'ai commenté et il devrait se lire sans soucis:

// Controle du reset de la carte ESP-01 
const byte hardResetPIN = 7;

void setup() {
  Serial.begin(115200);
  Serial1.begin(115200); // suivant votre config, essayez 9600 19200 38400 57600 74880 115200
  pinMode(hardResetPIN, OUTPUT); // merci icare - j’avais oublié cette ligne 

  // on reset notre esp-01 (RST pin à ground pour 100ms)
  digitalWrite(hardResetPIN, LOW);
  delay(100);
  digitalWrite(hardResetPIN, HIGH);
  
  // on attend un peu le reboot
  delay(500);
}

void loop()
{
  int r;

  // on lit ce que l'utilisateur tape sur la console série et on l'envoie à l'ESP
  while (Serial.available()) {
    r = Serial.read();
    if (r != -1) Serial1.write((char) r);
  }
  
  // on lit ce que l'ESP nous dit et on l'affiche pour l'utilisateur sur la console série
  while (Serial1.available()) {
    r = Serial1.read();
    if (r != -1) Serial.write((char) r);
  }
  
}

Une fois que vous avez chargé ce code on va vérifier que tout fonctionne avant d'aller plus loin. Pour ce faire le plus simple est d'envoyer la commande

AT

à notre ESP qui doit nous répondre

OK

à noter leSerial1.begin([color=red]115200[/color]);. ici il est important d'utiliser le bon débit, c'est celui qui est configuré sur votre ESP-01. si ce qui suit ne fonctionne pas, essayez avec des valeurs classiques 9600 19200 38400 57600 74880 115200

Tant que vous ne voyez pas le [color=purple]OK[/color], pas la peine de continuer, c'est que vous n'arrivez pas à parler correctement à votre module - assurez vous qu'il soit bien configuré avec une version firmware de commande AT, et bien sûr que l'alimentation et les broches soient bien connectées.

Une fois que ça fonctionne, la seconde commande que l'on peut envoyer c'est pour connaître les informations de versions de votre carte. Pour cela on envoie

[color=blue]AT+GMR[/color]

Voici ce que me répond le mien à cette commande:

[color=purple]AT+GMR

AT version:0.60.0.0(Feb  2 2016 18:43:31)
SDK version:1.5.2(80914727)
compile time:Feb  2 2016 19:00:35
OK
[/color]

j'ai donc quelques trains de retards vu que ma version du langage AT est la 0.60.0.0 et date de 2016... mais bon ça fera le job. (si ça vous tente Vous avez la doc Espressif ici et le github pour le ESP8266_NONOS_SDK)

Attention il ne faut pas d'espace à la fin de la commande, assurez vous de tapez juste le texte