ESP8266-01 et commande AT

Salut à tous

Voila un mois que je tourne en rond avec l’ESP8266 et mon arduino pour envoyer mes données sur mon serveur web.

Sur ma UNO, je charge l’exemple Blink et je commande l’ESP8266 via le série, cela fonctionne correctement, j’utilise Unvarnished Transmission Mode avec AT+CIPMODE=1 et AT+CIPSEND

Ma commande envoie bien la donnée au serveur

Détail des commandes AT utilisées:

AT

AT+RST

AT+CWMODE=1

AT+CWJAP="MONSSID","MONPWD"

AT+CIPMUX=0

AT+CIPMODE=1

AT+CIPSTART="TCP","MONSERVEUR",80

AT+SEND

GET macommandepermettantdenvoyermesdonnees

bon cela fonctionne très bien dans le série même je n’arrive pas sortir du unvarnished transmission mode mais bon on verra ça après.

Et voici mon code pour l’arduino

#include <SoftwareSerial.h>

/*Déclaration des variables*/

String ssid = "MONSSID";
String key = "MONPWD";
String server = "mon.serveur.web.ip"; // mon serveur web

String url = "/lda/index.php/data/createdatajson/append?datflval=23&thing=FT"; // Commande d'envoie de données

SoftwareSerial esp(2, 3); // RX, TX


//Fonction Connexion
void connexion(){
Serial.println("Command AT");
 esp.println("AT");
 delay(500);
 Serial.println("Command AT OK");
 
 Serial.println("Reset en cours...");
 esp.println("AT+RST");
 delay(10000);
 Serial.println("Reset OK");
 
 Serial.println("Passage en Mode client");
 esp.println("AT+CWMODE=1");
 
Serial.println("Connexion au WIFI");
 esp.println("AT+CWJAP=\""+ssid+"\",\""+key+"\"");
 delay(7000);
 Serial.println("Connexion WIFI OK");

 Serial.println("Command AT");
 esp.println("AT");
 delay(1000);
 Serial.println("Command AT OK");

 Serial.println("Connexion simple");
 esp.println("AT+CIPMUX=0");
 Serial.println("Connexion Simple OK");
}

void setup() {
 Serial.begin(115200);
 esp.begin(115200);
 delay(1000);
 connexion();
}

void loop() {

 String cmd = "AT+CIPSTART=4,\"TCP\",\"78.204.38.124\",80";
 esp.println("AT+CIPMODE=1");
 delay(500);
Serial.println("Connexion au serveur");
 esp.println(cmd);
 delay(1000);
 Serial.println("Connexion au serveur OK");

 String cmdGET = "GET " + url;
 Serial.println("Envoi de data");
 esp.println("AT+CIPSEND");
 delay(1000);
 Serial.println("Envoi de data OK");
 Serial.println("Envoi de données capteurs");
 esp.println(cmdGET);
 delay(20);
 esp.println("+++");
 delay(60000);
}

Si dans un premier temps j’arrive à envoyer ma commande depuis l’ardiuno pour le reste je pourrais me débrouiller.

Voila si quelqu’un à une solution, sur l’arduino il y aura plusieurs capteurs et relais.
Merci d’avance de vos réponses

esp.println("AT+CWJAP=\""+ssid+"\",\""+key+"\"");

Il y a des chances pour que la concaténation que vous attendiez ne se fasse pas, il faudrait au moins une instance de la classe String pour cela Mais plus simple, faites des print séparés pour les différents bouts

Merci J-M-L, j’ai essayé dans mon code mais cela n’a pas arrangé le problème, alors j’ai décidé d’analyser en détail la librairie softwareserial afin de voir les commandes que je pouvais utiliser. En reprenant le la phase d’initialisation trouver sur le site les-electroniciens.com (un GRAND MERCI au passage pour les travaux et le partage de connaissances) puis en arrangeant avec mes besoins, quelques longues soirées… Et finalement j’ai réussi à envoyer mes données à mon serveur web!!!

Tout d’abord, j’ai flasher l’esp8266-01 avec ce firmware V1.3.0.2_AT_Firmware.bin.zip
Puis en commande AT j’ai passer l’ESP en 9600bauds à la place du 115200.

Enfin j’ai téléversé mon code

/*Séquence initialisation du module Wifi ESP8266-01 et connexion au réseau aquabiofarm*/
#include <SoftwareSerial.h> //bibliothèque 

SoftwareSerial ESP8266(10,11);

String NomduReseauwifi="MONSSID"; //garder les guillemets
String MotDePasse="MONPWD"; //garder les guillemets
String server = "adresseduserveur"; // www.example.com
String uri = "/lda/index.php/data/createdatajson/append?datflval=35&thing=FT";// ligne à envoyer


/*********************************************************/
/*                  INIT              */
/*********************************************************/
void setup() 
{
  Serial.begin(9600);
  ESP8266.begin(9600);
  
  initESP8266(); 

}
/*********************************************************/
/*                  BOUClE INFINI         */
/*********************************************************/

void loop() {
  Serial.println("Envoi de données en cours");
  delay(35000);
 httppost();
Serial.println("Données envoyées");
delay(1000);  
}

void httppost () {
String dataServeur = "AT+CIPSTART=\"TCP\",\"" + server + "\",80";
ESP8266.println(dataServeur);//start a TCP connection.

if( ESP8266.available()) {

Serial.write(ESP8266.read());

} delay(1000);

String postRequest =

"GET " + uri;

String sendCmd = "AT+CIPSEND";//Unvarnished Transmission Mode 

ESP8266.println(sendCmd);
if( ESP8266.available()) {

Serial.write(ESP8266.read());

} delay(1000);

ESP8266.println(postRequest);
if( ESP8266.available()) {
Serial.write(ESP8266.read());
} 



}


/*********************************************************/
/*          Fonction initialisation ESP8266 */
/*********************************************************/

void initESP8266()
{
  String joinToWifi = "AT+CWJAP=\""+NomduReseauwifi+"\",\""+MotDePasse+"\"";
  Serial.println("**********************************************");
  Serial.println("************DEBUT INITIALISATION**************");
  Serial.println("**********************************************");
  envoieAuESP8266("AT+RST");
  recoitDuESP8266(5000);
  Serial.println("**********************************************");
  envoieAuESP8266("AT+CWMODE=1");
  recoitDuESP8266(5000);
  Serial.println("**********************************************");
  envoieAuESP8266(joinToWifi);
  recoitDuESP8266(15000);
  Serial.println("**********************************************");
  envoieAuESP8266("AT+CIFSR");
  recoitDuESP8266(1000);
  Serial.println("**********************************************");
  envoieAuESP8266("AT+CIPMUX=0");
  recoitDuESP8266(1000);
  Serial.println("**********************************************");
  envoieAuESP8266("AT+CIPMODE=1");
  recoitDuESP8266(1000);
  Serial.println("**********************************************");
  Serial.println("**************FIN INITIALISATION**************");
  Serial.println("**********************************************");
  Serial.println("");
}

/*********************************************************/
/*                  Fonction qui envoie une commande à l'ESP        */
/*********************************************************/

void envoieAuESP8266(String commande)
{
  ESP8266.println(commande);
  if (ESP8266.available()) {
    Serial.write(ESP8266.read());
  }
}

/*********************************************************/
/*                  Fonction qui lit et affiche les message envoyé par l'ESP        */
/*********************************************************/

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.write(c);
    }
      
  }
}

Voila, bon ensuite je l’ai débranché puis rebranché l’arduino au courant sans vu sur le sérial et la pas de nnées envoyées, je continue l’exploration mais un grand pas pour moi dans ce domaine que je ne connaissais pas avant le mois de mars.

Moi je laisserai tomber toutes les Strings... vous allez au devant de déconvenues à un moment où à un autre

Oui avec Software Serial il be faut pas aller trop vite (9600 c'est ok, un peu lent) mais surtout laisser le temps aux octets de partir ou d'arriver - comme ça fonctionne par interruption ça peut aussi perturber d'autres éléments

Je ne comprends pas, je ne dois pas me servir des string? Pouvez vous m’expliquer les déconvenues que je vais rencontrer?

Bonjour,

Peut-être que les lignes de code suivantes peuvent aider dans la programmation du Arduino:

#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiServer.h>
#include <WiFiUdp.h>

gardez l'usb branché et regardez ce qu'imprime la fonction recoitDuESP8266 et imprimez dans envoieAuESP8266 ce que vous demandez à l'ESP de faire

SoftwareSerial esp(2, 3); // RX, TX

qu'est-ce qui est branché où? avez vous un adaptateur de tension entre le UNO et l'ESP01?