Adafruit_ILI9341.h & SoftwareSerial ESP8266(XX, XX);

Bonjour tous le mondes.

J'ai installer un Ecran : TJCTM24024-SPI - ILI9341

AMAZON LIEN

Sur un ARDUINO UNO

Puis j'ai installer un : Espressif ESP8266

Mon Ecran fonctionne parfaitement, affichage OK.

CONFIGURATION

#define TFT_DC 12
#define TFT_CS 11
#define TFT_MOSI 9
#define TFT_MISO 10
#define TFT_RST 8
#define TFT_CLK 13

ÉCRAN RELIER EN 5V -> 3V (résistance)

Mon ESP8266 SE connecter parfaitement a mon réseaux wifi (visible sur mon reseau).

Cependant je n'arrive absolument pas a communiquer avec, je m'explique :

Quand j'appel simplement L'ip de mon esp8266 sur mon navigateur, un retour connexion échoué me reviens quasi instantanément et Surtout aucun affichage dans ma console.

MON ESP8266

CONFIGURATION

GND -> GND ARDUINO
3V -> 3V ARDUINO

PIN 2 ET 4 (sur pas mal de tutoriel je vois apparaitre les PIN 10 ET 11 es-ce important ? )

Question : Le problème peux t'il venir des PIN 10 et 11 non respecter ? et si oui comment faire vu qu'il sont déjà utilisés ?

Mon script Arduino (voir ci-dessous) manque t'il de quoi afficher la requete HTTP sur la console convenablement?

Merci beaucoup pour tous vos commentaires.!

// LIBRAIRIE
#include "Adafruit_ILI9341.h"
#include "SPI.h"
#include <TouchScreen.h>
#include <SoftwareSerial.h>
#include <Process.h>
SoftwareSerial ESP8266(2, 4);
Process p;
char buffer[50];


#include "Wifi.h"



/***************************************************
  PIN ARDUINO UNO ECRAN
  ****************************************************/
#define TFT_DC 12
#define TFT_CS 11
#define TFT_MOSI 9
#define TFT_MISO 10
#define TFT_RST 8
#define TFT_CLK 13






//Lancement bibliotheque
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);



/***************************************************
  SETUP
****************************************************/
void setup() {
  Serial.begin(9600);

 
  /***************************************************
    DEMARRAGE DE ECRAN
  ****************************************************/
  Serial.println("1 - Demarrage Ecran !");
  tft.begin();
  tft.setRotation(1);

  /***************************************************
   ESP8266 
  ****************************************************/
  
  ESP8266.begin(9600);
  envoieAuESP8266("AT+CIOBAUD=9600");
  recoitDuESP8266(4000);
  initESP8266();


  

  //Ont demarre en vue HORIZONTALE

  //ONT PASSE ECRAN EN NOIR
  tft.fillScreen(ILI9341_BLACK);

 
  //Ont reseat ecran pour acc.
  tft.fillScreen(ILI9341_BLACK);
  
 

  //PAUSE INITILISATION
  delay(1000);

}

void loop(void) {



 while(ESP8266.available())
       {    
         Serial.println(ESP8266.readString());
       }   




}

/
/****wiffi*/
String NomduReseauWifi = "XXXXXX"; // Garder les guillements
String MotDePasse      = "XXXXXX"; // Garder les guillements
String NameduDevices   = "MONOBJET";
#define DST_IP "192.168.1.30";


/****************************************************************/
/*        Fonction qui envoie une commande à l'ESP8266          */
/****************************************************************/
void envoieAuESP8266(String commande)
{
  ESP8266.println(commande);
}

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);
}

void initESP8266()
{
  
  Serial.println("**********************************************************");
  Serial.println("**************** DEMARRAGE ***************");

  Serial.println("**********************************************************");
  envoieAuESP8266("AT");
  recoitDuESP8266(2000);

  Serial.println("************************AT+CWMODE=3**************************");
  envoieAuESP8266("AT+CWMODE=3");
  recoitDuESP8266(5000);


  envoieAuESP8266("AT+CWHOSTNAME=\"" + NameduDevices + "\"");
  recoitDuESP8266(5000);
  Serial.println("Change de lhost");

  Serial.println("************************INSCRIPTION DES ACCES WIFI***********************");
  envoieAuESP8266("AT+CWJAP=\"" + NomduReseauWifi + "\",\"" + MotDePasse + "\"");
  recoitDuESP8266(10000);

  Serial.println("************************ATTRIBUTION DE l'ADRESSE IP**********************");
  envoieAuESP8266("AT+CIFSR");
  recoitDuESP8266(1000);

  Serial.println("**********************************************************");
  envoieAuESP8266("AT+CIPMUX=1");
  recoitDuESP8266(1000);
  Serial.println("************************OUVERTURE DU PORT 80***********************");
  envoieAuESP8266("AT+CIPSERVER=1,80");
  recoitDuESP8266(1000);
  
  Serial.println("**********************************************************");
  Serial.println("***************** ****************");
  Serial.println("**********************************************************");

}

Bonjour

GND -> GND ARDUINO
3V -> 3V ARDUINO

Connecter directement un ESP8266 à une carte Arduino est toujours source de problèmes.
ça é été confirmé et répété des dizaines de fois sur ce forum

Deux choses posent problème :

  • La sortie 3,3V de la carte Arduino ne peut pas fournir tout le courant appelé par l'ESP8266. Un régulateur 3,3V 500mA est nécessaire pour l'ESP8266. Parfois l'ESP8266 sous-alimenté semble fonctionner....
  • la sortie TX de l'Arduino avec ses 5V risque d'endommager l'ESP8266 dont le fabricant ne garantit pas qu'il supporte cette tension. Avec un peu de chance l'ESP8266 survit....

On peut , exemple parmi d'autres,faire comme çà (NB les pin 10 et 11 ne sont pas obligatoires pour le SoftSerial !!!). içi la broche CH_PD peut être mise à la masse par la carte UNO pour mettre en veille l'ESP8266.
UNO-ESP8266.jpg

Pour le soft je ne peux dire grand chose , je n'ai plus utilisé un ESP8266 en périphérique Arduino ,mode AT ,depuis plus de 3 ans... je l'utilise souvent mais toujours seul , sans carte Arduino

Merci Beaucoups pour ta réponse, je me sent toute de suite beaucoups moins dans le flou lol.

Merci aussi pour le Schema.

Cependant j'ai fait un test en reliant sur ma board mon arduino 5V -> 3V (avec une resitance) et la, le SP8266 ne s'allume même pas...

Je l'ai du coups rebranché en 3,3V (Arduino -> Board -> ESP8266) et la, retour case départ, Bonne connexion aux WIFI mais toujours aucune interrogation sur le port 80.

Question Bêtes :wink: il y'a t'il indicateur (led BLEU) qui est censé clignoter quand ont l'appel en HTTP ?

Merci.

Cependant j'ai fait un test en reliant sur ma board mon arduino 5V -> 3V (avec une resitance) et la, le SP8266 ne s'allume même pas...

tu peux détailler ce que tu as fait ? tu alimentes en 3,3V l'ESP à partir du 5V Arduino à travesr une résistance ??
D'où sort le 3,3V servant à alimenter l'ESP ? d'un régulateur dédié ou pas ?

Re-bonsoir,

Merci de ton temps.

tu peux détailler ce que tu as fait ? tu alimentes en 3,3V l'ESP à partir du 5V Arduino à travesr une résistance ??
D'où sort le 3,3V servant à alimenter l'ESP ? d'un régulateur dédié ou pas ?

Pour dire simple étant ultra Novice, j'ai relier a l'aide d'un JUMPER le 5V de mon arduino vers ma board sur lequel j'ai placer une résistance entre mon esp et l'arrivé 5V precedant de l'arduino.

Mais le ESP ne s'allume que si je retire et que je place relie ma board en 3,3V ou 5V (<= pas conseiller bien sur)

De Trés Bonnes Avancées Merci

Donc pour ceux a qui cela peux aider :

Dans Mon cas

  • Arduino Uno PIN 2 ET 4
  • ESP8266 EN 3v3 (merci al1fch :wink: )
  • GND -> GND

L'ESP REPOND BIEN !

Cependant maintenant j’essaie en vains de mettre en place un appel d'une simple page PHP, voici ma réponse :

Requesting URL: sousdomaine.domaine.com/mapage.php
GET /mapage.php HTTP/1.1

ERROR
Host: sousdomaine.domaine.com

et voici mon script :

if (ESP8266.available()) {
    Serial.println(ESP8266.readStringUntil("\n"));
 const char* host = "sousdomaine.domaine.com";
String url = "/mapage.php";
  Serial.print("Requesting URL: ");
  Serial.println(host + url);
 ESP8266.print(String("GET ") + url +  " HTTP/1.1 Host: "+host+" User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9");
ESP8266.print("AT+CIPCLOSE");
  }

Avant de jouer à concatèner des char * et des String (avec un grand S) faites le test en écrivant en dur toute la requête et assurez vous que ça fonctionne

N’oubliez pas qu’une requête GET doit suivre un formalisme particulier notamment une ligne vide à la fin...

Oui, Bien sur cela a été mon 1er essai du coups j'ai bien rajouter ma ligne vide de fin :

if (ESP8266.available()) {
    Serial.println(ESP8266.readStringUntil("\n"));
 String host = "sousdomaine.domaine.com";
String url = "/mapage.php";
  Serial.print("Requesting URL: ");
  Serial.println(host + url);
 ESP8266.print(String("GET ") + url +  " HTTP/1.1 Host: "+host+" User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9");
ESP8266.print("AT+CIPCLOSE");
  }

et voici mon retour :

AT+CIPCLOSE
Requesting URL: sousdomaine.domaine.com/mapage.php
AT+CIPCLOSE
Requesting URL: sousdomaine.domaine.com/mapage.php
AT+CIPCLOSE

es-ce une forme de réponse...cela me parais peux concluant...

Autre Test :

ESP8266.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");

et voici mon retour :

0,CONNECT

+IPD,0,347:GET / HTTP/1.1
Host: 192.168.1.30
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1

busy p...
busy p...
busy p...

peux êtres quelques choses avec AT+CIPSEND=38...?

Merci.

Dans le premier code vous n’avez pas la ligne vide donc ça ne fonctionne pas

Dans le second vous l’avez mais Que pensez vous que fait AT+CIPCLOSE?

Postez un programme complet avec la requête dans les setup et la loop qui lit la réponse

Bonjour,

AT+CIPCLOSE ne permet de terminer la connexion apres un load OK ?

oui bien sur voici mon script

#include "SPI.h"
#include <SoftwareSerial.h>
#include <Process.h>
          SoftwareSerial ESP8266(2, 4);

#include "Wifi.h"

void setup() {
Serial.begin(9600);
ESP8266.begin(115200);
  delay(100);
  envoieAuESP8266("AT+CIOBAUD=9600");
  recoitDuESP8266(4000);
  ESP8266.begin(9600);
  initESP8266();
                   }


void loop(void) {
 
   if (ESP8266.available()) { askHTTP(); }

}

WIFI.h

/****wiffi*/
String NomduReseauWifi = "XXXXXX"; // Garder les guillements
String MotDePasse      = "XXXXXX"; // Garder les guillements
String NameduDevices   = "MONOBJET";
#define DST_IP "192.168.1.30";


/****************************************************************/
/*        Fonction qui envoie une commande à l'ESP8266          */
/****************************************************************/
void envoieAuESP8266(String commande)
{
  ESP8266.println(commande);
}

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);
}

void initESP8266()
{
 
  Serial.println("**********************************************************");
  Serial.println("**************** DEMARRAGE ***************");

  Serial.println("**********************************************************");
  envoieAuESP8266("AT");
  recoitDuESP8266(2000);

  Serial.println("************************AT+CWMODE=3**************************");
  envoieAuESP8266("AT+CWMODE=3");
  recoitDuESP8266(5000);


  envoieAuESP8266("AT+CWHOSTNAME=\"" + NameduDevices + "\"");
  recoitDuESP8266(5000);
  Serial.println("Change de lhost");

  Serial.println("************************INSCRIPTION DES ACCES WIFI***********************");
  envoieAuESP8266("AT+CWJAP=\"" + NomduReseauWifi + "\",\"" + MotDePasse + "\"");
  recoitDuESP8266(10000);

  Serial.println("************************ATTRIBUTION DE l'ADRESSE IP**********************");
  envoieAuESP8266("AT+CIFSR");
  recoitDuESP8266(1000);

  Serial.println("**********************************************************");
  envoieAuESP8266("AT+CIPMUX=1");
  recoitDuESP8266(1000);
  Serial.println("************************OUVERTURE DU PORT 80***********************");
  envoieAuESP8266("AT+CIPSERVER=1,80");
  recoitDuESP8266(1000);
 
  Serial.println("**********************************************************");
  Serial.println("***************** ****************");
  Serial.println("**********************************************************");

}

void askHTTP(){
  Serial.println(ESP8266.readStringUntil("\n"));
  String host = "sousdomaine.domaine.com";
  String url = "/mapage.php";
  Serial.print(F("Requesting URL: "));
  Serial.println(host + url);
  ESP8266.print(String("GET ") + url  + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
  recoitDuESP8266(2000);
              }

AT+CIPCLOSE ne permet de terminer la connexion apres un load OK ?

la question c'est à quelle vitesse vous pensez que la connexion est fermée...

vous voyez quoi sur votre console série?

vous devriez commencer par un truc tout simple.. tout dans un sketch et tout câblé en dur dans la requête HTTP.

  • appuyez sur ctrl-T dans l'éditeur pour indenter proprement votre code

  • dans l'absolu n'utilisez pas la classe String, vous allez au devant de soucis mémoire difficile à débuguer

sinon ça ce n'est pas bon

  long int time = millis();
  while ( (time + timeout) > millis())

millis() c'est un unsigned long (votre code va bugger dans 25 jours) et pour les test il faut écrire en faisant une soustraction

  unsigned long time = millis();
  while (millis() - time < timeout) ....

pour ne pas avoir de problème dans 50 jours quand millis() va retourner à 0

Re-Bonjour,

En suivants vos conseilles je suis donc repartis sur un Brouillon.

Voici mes autres testes du moment :

void askHTTP(){
  Serial.println(ESP8266.readStringUntil("\n"));
  ESP8266.print(F("<h3>Hello</h3>"));
  Serial.print(F("Requesting URL: "));
  ESP8266.print("GET /mapage.php HTTP/1.1\r\nHost: sousdom.dom.com\r\n\r\n");

              }

RESPONSE CONSOLE :

AT

OK

AT+CWMODE=3

OK

AT+CWJAP="xxxxx","xxxxx"

WIFI DISCONNECT
WIFI CONNECTED
WIFI GOT IP

OK
**ATTRIBUTION DE l'ADRESSE IP
AT+CIFSR

OK

AT+CIPMUX=1

OK
*OUVERTURE DU PORT 80
AT+CIPSERVER=1,80

OK

APRES APPEL DE L'IP :

0,CONNECT

+IPD,0,347:GET / HTTP/1.1
Host: 192.168.1.30
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1

Requesting URL:

Hello

GET /mapage.php HTTP/1.1

Host: sousdom.do p... (Host couper 1 fois sur 2)

ERROR


Autrements : j'ai bien effectuer vos modifications ("pour ne pas avoir de problème dans 50 jours quand millis() va retourner à 0"), merci, j'ai aussi éviter un maximum de variables "String" et ajouter des "F()" a mes commentaires textes.Cela allége largement la mémoire.

Merci .

J'ai oublié de mentionné que j'avais écrit un petit tuto: Les Bases d'un Serveur Web sur ESP-01 en commande AT - l'avez vous regardé?

ce n'est pas exactement ce que vous souhaitez faire si je comprends bien car vous voulez envoyer des commandes GET depuis votre Arduino, mais étudiez la structure d'envoi et réception de commandes AT - ça devrait vous aider à y voir plus clair