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

J-M-L:
Oui c'est pour un MEGA effectivement. pour passer sur uno, il faudra déclarer une instance de SoftwareSerial

par exemple en faisant au début

#include <SoftwareSerial.h>

SoftwareSerial portSerieLogiciel(10, 11); // RX, TX
#define ESPSEPRIAL portSerieLogiciel

au fait en relisant ce que j'avais posté plus haut, c'est documenté dans le code source, on peut utiliser USESOFTWARESERIAL...

Bonjour,
Desolé JML je n'avais pas vu
J'ai appliqué la modification sur le SERIAL mais je rencontre deux problèmes:

1- J'ai le message "Can't continue: CIFSR failed", je n'arrive pas à comprendre pourquoi j'ai ce blocage
quand je ping sur 192.168.1.28 j'ai zéro perte. De plus quand je met la ligne CIFSR en commentaire, si j'ai bien suivi le tuto ce message ne sert qu'a visualiser l'IP, je reussi à aller au "Ready!".
Je pensais que ce n'etait pas grave vu que je connaissait l'adresse (192.168.1.28) mais .... le 2- est arrivé...

2-J'ai ouvert CHROME ( j'ai aussi essayé FIREFOX ), dans la barre d'adresse 192.168.1.28 mais sa tourne dans le vide et finit par afficher :

"Cette page ne fonctionne pas
192.168.1.28 n'a envoyé aucune donnée.
ERR_EMPTY_RESPONSE"

Je n'ai pas l'impression qu'il voit la connexion au serveur, il ne lui repond donc pas et j'arrive au Timeout.

As tu une idée de si le problème est lié au problème avec le CIFSR?

As tu une idée de comment trouver le problème ?

Merci d'avance

AT+CIFSR Retourne l’IP locale - si ça plante c’est bien que l’ESP n’a pas obtenu d’adresse...

Ah ok je pensais que ce n’etait qu’informatif
Je vais devoir chercher ce qui cloche dans le getmyipadress

oui cf mon post #2

 AT+CIFSR

j'ai comme réponse

 AT+CIFSR

+CIFSR:STAIP,"192.168.1.28"
+CIFSR:STAMAC,"18:fe:34:e6:27:8f"

--> si ça ne fonctionne pas c'est qu'il y a un soucis

Merci de pas m'abandonner JML

Donc ce soir j'ai utilisé ton bout de soft pour passer les commandes AT. Je l'ai modifié pour utiliser une softserial vu que je suis sur un UNO

J'ai suivi pas à pas ton tuto et nickel sa fonctionne.

Je suis donc revenu sur la version complète et là plusieurs choses dont une qui m'ennuie bien
Dans les inits tu écris

// The BAUD RATE OF YOUR ESP-01
// Don't go faster than 38400 with sowftare serial for reliability

Quand je met 38400 je suis bloqué dès la commande AT+RESTORE. J'ai l'impression que l'ESP8266 ne comprend pas ce language :slight_smile:

Quand je met 115200 (hier je n'avait pas vu le détail du BaudRate), je ne suis pas bloqué au RESTORE ( parfois) mais j'ai un fonctionnement très aléatoire.

j'ai l'impression que l'esp8266 est configuré en 115200 et ne comprend que sa. Si je ne me trompe pas c'est dans le logiciel de l'esp8266 et donc non changeable.

Cela veux t'il dire qu'un arduino UNO ne peux pas communiquer de manière fiable en command AT ? et que le passage par un arduino MEGA est obligatoire pour obtenir un programme fiable et répétable ?

Ce qui est stable c'est que même rendu à Ready! le serveur ne s'affiche pas dans la page web

Le truc ce corse :confused:

il faut au niveau des commandes AT passer votre ESP à 9600 bauds par exemple et ensuite vous utilisez cette vitesse sur le Software Serial

de mémoire regardez du côté des commandes AT+UART_CUR ou AT+CIOBAUD je ne sais plus trop

Comme j'ai dit au poste #30, il faut mettre le ESP en 9600 bauds AVANT de le connecter en Software Serial à l'Arduino.

Pourquoi?

Parce que le ESP est réglé par défaut à 115200 bauds mais l'Arduino n'est pas assez rapide pour faire du Software Serial à 115200 bauds. Vous ne pouvez donc pas changer la vitesse de communication en Software Serial sans avoir réduit la vitesse de communication au préalable.

Si vous réussissez à mettre le ESP en 9600 bauds, la commande "AT+Restore" remettrait le ESP en mode "sortie d'usine", c'est à dire 115200 bauds.

Oubliez AT+RESTORE, ça ne sert à rien.

En théorie Il y a moyen avec des commandes AT (celles se terminant en _DEF) de rendre « permanents » certains changements et même un reset ou restore n’efface pas ce changement

* *AT+ UART_DEF=<baudrate>,<databits>,<stopbits>,<parity>,<flow control>* *
For example 9600 baudrate / 8 data bits / 1 stop bits and none parity and flow control
* *AT+UART_DEF=9600,8,1,0,0* *
the command AT+CIOBAUD=9600 would change the baudrate temporarily

chaque module peut ne pas avoir le même firmware de commandes AT donc faut explorer un peu. Sur le web vous trouverez des articles de bidouilleurs disant que AT+UART_DEF a rendu leur ESP Inopérant, donc à creuser en lisant bien tout. ça fait longtemps que je n’ai pas joué avec, donc voir aussi les derniers firmwares AT (et prendre celui adapté à la taille flash de son ESP01). J’ai vu qu’il y avait une version ESP8266_AT_V1.1 based on ESP8266_NONOS_SDK_V1.5.4 qui est plus récente que celle de mon tuto effectué avec l’AT version 0.6 de début 2016 (0.60.0.0. (Feb 2 2016 18:43:31)) ou encore une V2.0 AT Firmware mais les numérotations sont un peu fantaisistes donc à creuser pour voir vraiment ce qui est le plus récent (les ESP01, surtout ceux avec 4Mb (512K) de mémoire flash, ne sont plus utilisés et l’OS dispo est vieux)

@Kayel
Concernant le RESTORE ça fait partie des bonnes pratiques à explorer pour être en état connu. Lisez par exemple cette discussion, le restore semble avoir résolu le problème d’instabilité

@J-M-L

J'ai eu le même problème que EricRecifal33480 en suivant votre tuto. On tombe dans le trou laissé par le chapitre qui manque sur les Arduinos avec un seul port série.

AT+UART_DEF=9600,8,1,0,0 peut survivre à un RST, pas à un RESTORE.

Tout l'intérêt d'un AT+RESTORE est d'être, comme vous dites, en état connu.

L'intérêt pâlit un peu lorsque l'on sait que cet état rend le software sérial inutilisable.

Effectivement je vois ce que vous voulez dire. le code dit

// Don't go faster than 38400 with sowftare serial for reliability
#define ESPSERIALBAUD 115200 // Set to whatever is used by default by your ESP after a RESTORE

donc si effectivement la version d’usine de votre ESP01 est à 115200 (souvent le cas) c’est un soucis car je donne des instructions contradictoires

kayel:
L'intérêt pâlit un peu lorsque l'on sait que cet état rend le software sérial inutilisable.

Ce n’est pas insurmontable cependant:

  • Effectivement comme vous le dites on peut éviter le restore mais dans mon cas avec le vieil OS, et comme indiqué dans le lien ci dessus, le AT+RST pour faire un reboot n’est pas toujours suffisant pour assurer le bon fonctionnement, d’où l’habitude de passer par un RESTORE

  • Si votre ESP n’est plus en 115200, il faudrait, en cas d’usage du port série logiciel, ouvrir le Software Serial au débit connu (9600 par exemple), envoyer le RESTORE, fermer le port série, et le ré-ouvrir à 115200 (le défaut), et reconfigurer à 9600, puis refermer le port série, et le ré-ouvrir à 9600 . comme cela vous êtes dans une config maîtrisée.

Le Software Serial ne va fonctionner à 115200 que pour une seule commande dans le setup et donc ce n’est pas un soucis ensuite dans le reste de votre code (même si ma recommandation reste de ne pas utiliser SoftwareSerial)

Merci pour toutes ces informations
J’ai réussi à ouvrir la page web du serveur

Bonjour J-M-L,

D'abord je vous remercie pour votre tuto j'ai vriament appri beaucoup de choses !

Je voudrais savoir si il est possible de faire la meme chose mais cette fois-ci avec une base de données MySQL ?

Je ne comprends pas vraiment la question

Ou se trouverait la base de données ?

si votre BdD est ailleurs sur le réseau et offre une interface HTTP REST alors c’est une simple requête à émettre puis récupérer les infos / la réponse depuis l’arduino

C'est une BdD local créée avec XAMPP

Bonjour,

Voici un projet utilisant l'ESP-01 connecté sur un Arduino :

Serveur WEB commande bouton WEB en CSS --> Arduino LED ON / OFF
(index HTML en variables PROGMEM avec loader de page WEB)

Serveur WEB avec autentification (Login et mot de passe)

Configuration IP et SSID et mot de passe par Serial commande Line (CmdLine)

/*********************************************************************************************************************
* WEB Serveur Secureise Login mot de passe pour Commande Bouton WEB --> LED Arduino
* Page WEB avec Bouton CSS 
* Configuration IP par Serial Commande Lind CmdLine
/*********************************************************************************************************************
* Fonction : Commande de Relais (LED) par page WEB
* Commande une LED avec des boutons WEB dessine en CSS       : ok
* Autentification Login Mot de passe                         : ok
* Configuartion IP par Page WEB                              : pas ok
* Configuration IP pare Serial Commande Line (cmd)           : ok
* 
* Demmarage du serveur WEB automatiquement (avec la confoguration en EEPROM) au bout de 10s
* Tapez stop pour acceder au Menu Serial commande Line (cmd) 
* 
* LED_BUILTIN (LED de l'Arduino) ON : Serveur WEB demarrer OK (avec la confoguration en EEPROM)
* 
* 
* Utiliastion des fonction String 
* Utilisation de la fonction sscanf (Attention Bug compilation si sscanf est utilise en sous programme et 
* Configuration IP par fonction STRUCT
* Site WEB en variable PROGMEM
* Login et Mot de passe : Autentification Code Exemple :
* https://microcontrollerslab.com/esp32-password-protected-web-server-in-arduino-ide/
* ********************************************************************************************************************
* Ouver le Moniteur série ou PUTTY, KUTTY, COM - Termite.exe ....   
* Commande disponible :
help

- General commands :
    help           aide commande cmd Serial (man)
    ram            RAM Disponible

- Configuration commands :
    print          print configuration courrante (info ipconfig ifconfig)
    defaults       set default configuration values
    mac <MAC>      set local MAC address (default: DE:AD:BE:EF:FE:ED
    dhcp-on        enable DHCP
    dhcp-off       disable DHCP
    ip <IP>        set local IP address Exemple : ip 192.168.0.66
    subnet <IP>    set Masque de sous réseau
    gateway <IP>   set Passerelle
    SSID           set nom du reseau WIFI (Max  20 caracteres)
    password       set mot de passe du reseau WIFI (Max  20 caracteres)
    wifi-on        Start ESP01 WIFI Module

- EEPROM access commands:
    reload         load EEPROM avec la configuration sauvegarde
    save           save configuration en EEPROM
    reset          Restart Arduino et load la configuration enregistre en EEPROM

 Exemple : Pour changer l'IP de l'Arduino :
 Commande ip xxx.xxx.xxx.xxx puis save et enfin reset 
 pour redemarrer l'arduino dans la nouvelle configuration 

> 
* 
* * ********************************************************************************************************************
* -------------------------------------------->    Sortie :
* Module LED sur PORT Digital D2
* http://wiki.seeedstudio.com/Grove-Red_LED/
* http://wiki.seeedstudio.com/Grove-LED_Socket_Kit/
* 
* -------------------------------------------->    Entree / Sortie --> Transfert
* WIFI ESP01 - Module sur PORT D2 (Utilisation des commandes AT)
* Module WIFI : ESP8266 ESP-01 : sur Adaptateur Module 3.3V 5V (Compatible pour Arduino) et sur PORT D2          Attention : cable GROVE inverse !!
* https://www.amazon.fr/gp/product/B06XP74C81/ref=ppx_yo_dt_b_asin_title_o01__o00_s00?ie=UTF8&psc=1
* https://www.amazon.fr/gp/product/B079129RF1/ref=ppx_yo_dt_b_asin_title_o01__o00_s00?ie=UTF8&psc=1
* Branchement 
* Rx sur D2
* Tx sur D3
* Branchement compatible avec le port UART pour les commandes AT
* Librairie WifFiEsp.h : https://github.com/bportaluri/WiFiEsp
/*********************************************************************************************************************
* Librairie : 
* Arduino Serial Commande Line (CmdLine) 
* https://github.com/IndustrialShields/arduino-CmdLine
/*********************************************************************************************************************
* Auteur   : Saint-Jean Colmar             * Arduino UNO et Shield Base Grove               * Date  : 1/9/2019
* Compilateur teste sur version : 1.65 - arduino-1.8.5-windows.exe
/*********************************************************************************************************************

PriseIP_SRV_WEB_ESP01_Login_SerialConfIP_BoutonWEB_CSS_v10.ino (19.7 KB)

ConfigIP_Serial_CmdLine.h (17.3 KB)

ConfigIP_Serial_CmdLine.h (17.3 KB)

index_HTML_PROGMEM.h (2.31 KB)

Log Serial.txt (6.3 KB)

Bonjour,

Tout d'abord merci J-M-L, tes explications sont parfaites !
Je voudrais savoir s'il est possible, en commande AT de:
1)-Démarrer en mode AP
2)- Se connecter et charger depuis mon téléphone, le SSID et mdp del'endroit ou je me trouve
3)- Basculer en mode client avec ce que je viens de renseigner depuis mon téléphone ?

Cela existe déjà mais pas en commande AT..

Merci d'avance,
Max

si vous avez un Arduino accroché à votre ESP-01 avec un moyen d'indiquer le type de boot que vous voulez avoir (un bouton par exemple) je ne vois pas pourquoi ce ne serait pas possible.. ce ne sont que des commandes de paramètrage

cela dit je ne recommande pas de continuer à utiliser des ESP-01, autant prendre un ESP8286 ou ESP32 qui feront aussi office d'arduino, c'est plus simple, plus puissant, plus à jour... pour un prix similaire a ESP-01 + Arduino + câbles et bazar d'adaptation de tension...

Merci beaucoup pour ce tuto détaillé.

Je dois être bête, mais je n'arrive pas à trouver l'adaptateur que vous avez utilisé pour l'ESP. Auriez-vous un lien ?

J'ai acheté celui en pièce jointe, pensant que ça irait... Mais il n'a que 4 pins et impossible à le faire fonctionner, aucune doc. :confused:

s-l300.jpg

Virgilec:
Je dois être bête, mais je n'arrive pas à trouver l'adaptateur que vous avez utilisé pour l'ESP. Auriez-vous un lien ?
J'ai acheté celui en pièce jointe, pensant que ça irait... Mais il n'a que 4 pins et impossible à le faire fonctionner, aucune doc. :confused:

Votre image:
s-l300.jpg

Oui celui que j'avais ne se trouve quasiment plus... j'en ai pas vu sur eBay ou AliExpress en regardant rapidement (parce qu'on n'utilise plus bcp les ESP-01)

je pense qu'il est prévu plus pour des ESP-01-S qui sont toujours sous 3.3V mais qui ont plus de mémoire et son plus performants et donc qu'on peut flasher directement avec l'IDE Arduino (generic ESP8286) et se passer donc d'un arduino supplémentaire.

Si vous avez qu'un ESP-01 (pas 'S'), il faut pouvoir le piloter et dans mon tuto je dis

Pin - (masse) de l'adaptateur ESP-01 connectée au rail bleu de la breadboard (GND) (fil noir)
Pin + (alimentation) de l'adaptateur ESP-01 connectée au rail rouge de la breadboard (5V) (fil rouge)

Pin Enable (EN) de l'adaptateur ESP-01 connectée à 5V de la breadboard (fil rouge)
Pin RESET (RST) de l'adaptateur ESP-01 connectée à la pin 7 de l'arduino Mega (fil jaune)

Pin Rx (réception) de l'adaptateur ESP-01 connectée à la pin Tx1 (18) de l'arduino Mega (fil blanc)
Pin Tx (émission) de l'adaptateur ESP-01 connectée à la pin Rx1 (19) de l'arduino Mega (fil bleu)

les 2 GPIO de l'adaptateur ESP-01 restent "en l'air".

donc votre soucis c'est que l'adaptateur que vous avez d'une part n'offre pas les pins Enable ni Reset et d'autre part sans doute pas la conversion 5V

  • pour les 2 pins manquantes, vous pouvez re-piquer directement sur l'ESP, sinon il existe d'autres adaptateurs qui exposent toutes les pins (un ou deux pour 1€ ou 5 pour 2€) et qui ont généralement le bon goût d'intégrer un petit condensateur pour l'alimentation, mais ça ne règle pas le soucis d'adaptation de tension.

-> il faudra donc insérer un petit composant qui adapte les tension de commandes à 3.3V (certains ESP peuvent résister mais rien de garanti) -> cherchez un "Channel I2C Bi-Directional Logic Level Converter Arduino 5V To 3.3V Module" - vous pouvez en trouver 5 pour moins d'1.5€)

Dans la pratique, vu le coût de tous ces composants, les ennuis que ça représente de tout câbler etc, achetez un ESP-01-S que vous programmez en Arduino directement et alimentez le tout par 3.3V. Vous pourrez alors utiliser les librairies un peu plus avancée que ce qui est décrit ici... (il vous faudra juste une carte USB -> Série FTDI de préférence)

Si vous ne voulez pas vous ennuyer du tout, vous pouvez acheter pour un peu plus cher un Lolin D1 Mini - ils vendent sur AliExpress - et ça vous ouvre la porte à plein de petits composants d'extension prévus pour...

à voir en fonction de ce que vous voulez réaliser