Go Down

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

EricRecifal33480

Bonjour,

Ma première étape est de faire affiché une page web "hello world" sur mon téléphone depuis mon arduino connecté à un esp8266

J'utilise le code ci dessous

J'ai bien une communication que je vois sur mon "moniteur serie".Tout semble OK

Mais j'ai un timeout sur l'adresse indiqué (192.168.4.1)

 :smiley-confuse:

Code: [Select]

  #include <SoftwareSerial.h>
     
    #define DEBUG true     
    SoftwareSerial esp8266(11,10);

    void setup()
    {
      Serial.begin(115200);
      esp8266.begin(115200); // your esp's baud rate might be different
      sendData("AT+RST\r\n",2000,DEBUG); // reset module
      sendData("AT+CWMODE=2\r\n",1000,DEBUG); // configure as access point
      sendData("AT+CIFSR\r\n",1000,DEBUG); // get ip address
      sendData("AT+CIPMUX=1\r\n",1000,DEBUG); // configure for multiple connections
      sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // turn on server on port 80
    }
     
    void loop()
    {
      if(esp8266.available()) // check if the esp is sending a message
      {
        while(esp8266.available())
        {
          // The esp has data so display its output to the serial window
          char c = esp8266.read(); // read the next character.
          Serial.write(c);
        }
       
        if(esp8266.find("+IPD,"))
        {
         delay(1000);
     
         int connectionId = esp8266.read()-48; // subtract 48 because the read() function returns
                                               // the ASCII decimal value and 0 (the first decimal number) starts at 48
         
         String webpage = "<h1>Hello</h1>&lth2>World!</h2><button>LED1</button>";
     
         String cipSend = "AT+CIPSEND=";
         cipSend += connectionId;
         cipSend += ",";
         cipSend +=webpage.length();
         cipSend +="\r\n";
         
         sendData(cipSend,1000,DEBUG);
         sendData(webpage,1000,DEBUG);
         
         webpage="<button>LED2</button>";
         
         cipSend = "AT+CIPSEND=";
         cipSend += connectionId;
         cipSend += ",";
         cipSend +=webpage.length();
         cipSend +="\r\n";
         
         sendData(cipSend,1000,DEBUG);
         sendData(webpage,1000,DEBUG);
     
         String closeCommand = "AT+CIPCLOSE=";
         closeCommand+=connectionId; // append connection id
         closeCommand+="\r\n";
         
         sendData(closeCommand,3000,DEBUG);
        }
      }
    }
String sendData(String command, const int timeout, boolean debug)
    {
        String response = "";
       
        esp8266.print(command); // send the read character to the esp8266
       
        long int time = millis();
       
        while( (time+timeout) > millis())
        {
          while(esp8266.available())
          {
           
            // The esp has data so display its output to the serial window
            char c = esp8266.read(); // read the next character.
            response+=c;
          } 
        }
       
        if(DEBUG)
        {
          Serial.print(response);
        }
       
        return response;
    }


EricRecifal33480

J'ai l'impression que quand je tape l'adresse 192.168.4.1, la connexion wifi ne voit pas l'appel fait page web

Ce qui m'étonne encore plus, je ne vois pas le point wifi dans ma liste de connexion

Artouste

#2
Aug 30, 2018, 10:47 pm Last Edit: Aug 30, 2018, 10:58 pm by Artouste
Bonsoir
d'après ce que j'en ai compris , tu utilise ton esp8266 en mode AT avc un arduino externe est pas directement
au travers de l'IDE arduino .

l'adresse IP 192.168.4.1 est celle attribué "par defaut " au mode soft AP dans le SDK "espressif"

tu a quoi de disponible comme reseau wifi autour de toi lorsque tu regarde avec un PC ou un autre équipement ?

Tu t'es basé sur quoi pour ton programme , parce que même en mode AT , il manque de la config.

Ici sur le forum arduino , les esp8266 sont plutôt utilisé directement

lire çà

C'est quoi exactement "ton esp8266" ?

EricRecifal33480

#3
Aug 31, 2018, 01:27 pm Last Edit: Aug 31, 2018, 01:28 pm by EricRecifal33480
Mon hello world fonctionne j'arrive à ma seconde difficulté
Je cherche à retourner le contenu d'une saisie après le get et là.....

Pouvez-vous me mettre sur la voie svp

J-M-L

#4
Aug 31, 2018, 01:36 pm Last Edit: Aug 31, 2018, 01:40 pm by J-M-L
l'usage de la classe String, la gestion du temps sous la forme de
Code: [Select]
while( (time+timeout) > millis())
, le software Serial  à 115200 etc fait que de toutes façons ce ne sera pas très robuste...

Qu'est-ce qui ne vous plaisait pas dans le code de mon tuto Les Bases d'un Serveur Web sur ESP-01 en commande AT ?
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

J-M-L

Mon hello world fonctionne j'arrive à ma seconde difficulté
Je cherche à retourner le contenu d'une saisie après le get et là.....

Pouvez-vous me mettre sur la voie svp
c'est pour votre autre post ? (cf ma réponse)
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

Rien ne me déplaît dans le code juste que je suis pas allé au bout du tuto

J-M-L

Rien ne me déplaît dans le code juste que je suis pas allé au bout du tuto
li faut éviter la classe String
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

Je me pose une question avant de continuer mon projet
J'ai 8 boîtes de saisies html à faire dont les valeurs seront envoyées à l'appui sur un bouton envoyées. La méthode Get est elle vraiment judicieuse ?

J-M-L

Je me pose une question avant de continuer mon projet
J'ai 8 boîtes de saisies html à faire dont les valeurs seront envoyées à l'appui sur un bouton envoyées. La méthode Get est elle vraiment judicieuse ?
c'est plus une question HTML que Arduino... avez vous un seul bouton de soumission d'un formulaire? souhaitez vous un bouton par champs texte? etc...
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

#10
Sep 01, 2018, 11:43 am Last Edit: Sep 01, 2018, 11:45 am by EricRecifal33480
Je me sais bien que la c'est plutôt un quizz html mais c'est le soft Arduino qui va devoir récupérer ces informations et les traiter

L'idée global c'est d'avoir 2 boutons on/off pour allumer manuellement des leds de puissance ( pas directement)

Et avoir 8 boites de saisie pour programmer des heures allumages et d'extinctions en assignant les saisies dans des variables ( ce qui veux dire décodage h min et conversion en une même unité). Un appui sur un bouton enregistrer envoi toutes ces valeurs par méthode get ou post je sais pas je bloque sur ce point et bien d'autres

Voilà l'idee générale

J-M-L

#11
Sep 01, 2018, 11:55 am Last Edit: Sep 01, 2018, 11:58 am by J-M-L
d'un point de vue code, si tout est dans un seul formulaire il faudra décoder les valeurs dans l'URL.. ce n'est pas sorcier vu que vous savez à quoi vous attendre - à peine plus compliquer que de décoder un seul paramètre

jetez un oeil au bout de code de mon exemple de serveur interactif (pour le shield ethernet) vous verrez l'usage de strtok() pour faire l'analyse de plusieurs paramètres dans l'URL
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

Petite question JML m'autorise tu à poster mon code quand j'aurais finit de faire fonctionner mon appli?sachant que le plus gros du code sera le tiens.

Bon je rencontre déjà des soucis, j'ai deux fonctions html. Une renvoi bien une requête avec des paramètres l'autres non. Alors que quand je l'envoie direct dans le navigateur sa fonctionne.
Le principe de la page web dans le .h est top

J-M-L

Bien sûr vous postez ce que vous voulez - l'idée c'est le partage :)
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

#14
Sep 08, 2018, 03:49 pm Last Edit: Sep 10, 2018, 06:52 pm by EricRecifal33480
Je bute sur un truc que je ne m'explique pas et je suis sur que c'est un truc bête.
Je suis en train d'essayer de décoder mon url du mode manuel
Je suis pas loin du truc mais je ne comprend pas
j'ai déclaré deux tableaux Param et Value. Dans la void Decodage_URL je réussit à faire un Serial.println du contenu des tableaux mais dans la loop c'est vide  >:( .

C'est quoi l'explication?

Code: [Select]

char *item;
char *item1;
char *Param[4];
char *Value[4];
char *detect="EtatV1";
int i;
const char s[2] = "=";
char str[80] = "/?EtatV1=OFF&PManuV1=10&EtatV2=ON&PManuV2=50";  

void setup() {  
  Serial.begin(115200);
  //
}

void loop() {

  Decodage_URL();
i=1;
  Serial.println("Recap");
for ( i = 1; i = 4; ++i)
{
  Serial.println(Param[i]);
  Serial.println(Value[i]);
}
delay(10000);
}

void Decodage_URL()
{  
  if (strcmp(detect, item))
{
   i=1;
   item = strtok(str, s);
   item1=strtok (NULL, "&");
   Param[i]=item;
   Value[i]=item1;

   while( item != NULL )
      {
        i=+1;
        printf( " %s\n", item );
        item = strtok(NULL, s);
        item1=strtok (NULL, "&");
        Param[i]=item;
        Serial.println(Param[i]);
        Value[i]=item1;
        Serial.println(Value[i]);
      }
   return(0);
  }
}

Go Up