ESP8266 commandes AT et autoconnect

Portrait de f.mathieu

Bonjour a tous,

Merci pour ce super site, ainsi que le temps que vous y consacrez.

je fais de nombreuses recherche sur le web, mais je n'arrive pas a trouver une façon de pouvoir charger un programme dans le ESP8266 (autoconnect, par exemple), et que ce dernier puisse répondre aux commandes AT envoyées par l'arduino sur lequel il est connecté...

je veux avoir la possibilité de connecter l'ESP via le mode web (tel mobile) pour ensuite, une fois connecté, pouvoir envoyer des informations par un arduino uno sous forme de commandes AT.

est-ce que quelqu'un peut m'aider a ce propos ?

merci a tous.

Portrait de f.mathieu

Salut Brossden,

oui, un arduino peut envoyer des commande AT a un module ESP8266.

je t'invite a aller voir cette vidéo sur ce site même:

http://les-electroniciens.com/videos/arduino-ep16-installation-du-module...

ma question est en fait tres simple. je veux que mon ESP8266 puisse répondre aux commandes AT de l'arduino, ainsi que de pouvoir se connecter a un reseau wifi avec le programme suivant:

#include <ESP8266WiFi.h>          //https://github.com/esp8266/Arduino
// ce script permet a l'ESP8266 de se connecter a un wifi en spécifiant par interface web que reseau choisir...
//needed for library
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>         //https://github.com/tzapu/WiFiManager

void setup() {
    // put your setup code here, to run once:
    Serial.begin(115200);

    //WiFiManager
    //Local intialization. Once its business is done, there is no need to keep it around
    WiFiManager wifiManager;
    //reset saved settings
    //wifiManager.resetSettings();
    
    //set custom ip for portal
    //wifiManager.setAPStaticIPConfig(IPAddress(10,0,1,1), IPAddress(10,0,1,1), IPAddress(255,255,255,0));

    //fetches ssid and pass from eeprom and tries to connect
    //if it does not connect it starts an access point with the specified name
    //here  "AutoConnectAP"
    //and goes into a blocking loop awaiting configuration
    wifiManager.autoConnect("AutoConnectAP");
    //or use this for auto generated name ESP + ChipID
    //wifiManager.autoConnect();

    
    //if you get here you have connected to the WiFi
    Serial.println("connected...yeey :)");
}

void loop() {
    // put your main code here, to run repeatedly:
    
}

lorsque je pousse ce programme sur l'ESP, il ne répond plus au commandes AT.

est-ce plus clair ? :-)

j'éspere.

cordialement,

Franck

Portrait de f.mathieu

Salut,

merci pour tes réponses. voici le programme de l'arduino, avec les commandes AT: 

#include <Filters.h>
#include <SoftwareSerial.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>

#define DEBUG 0
#define IP "184.106.153.149"                        // IP address of thingspeak.com
#define DHTPIN            5         // Pin which is connected to the DHT sensor.

// Uncomment the type of sensor in use:
//#define DHTTYPE           DHT11     // DHT 11 
#define DHTTYPE           DHT22     // DHT 22 (AM2302)
//#define DHTTYPE           DHT21     // DHT 21 (AM2301)

DHT_Unified dht(DHTPIN, DHTTYPE);

//uint32_t delayMS;

String network = "xxxxx";                            // your access point SSID
String password = "xxxxxxx";                  // your wifi Access Point password
String GET = "GET /update?key=xxxxxxx";    // replace with your channel key
String apiKey = "xxxxxxx"; // replace with your channel's thingspeak API key
const int postingInterval = 20 * 1000; // post data every 20 seconds

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

// this runs once

void setup() 
{                
  Serial.begin(9600); // enable debug serial
  esp8266Module.begin(9600);
  setupEsp8266(); 
  dht.begin();
  sensor_t sensor;
  dht.temperature().getSensor(&sensor);
  dht.humidity().getSensor(&sensor);
}

// the loop

void loop() 
{
    // Get temperature event and print its value.
    sensors_event_t event;
    //sensors_event_h event; 
    dht.temperature().getEvent(&event);
    float temperature = (event.temperature);
    dht.humidity().getEvent(&event);
    float humidity = (event.relative_humidity);
    //    setupEsp8266(); 
    Serial.print("Temperature: ");
    Serial.print(temperature);
    Serial.println(" *C");
    Serial.print("Humidity: ");
    Serial.print(humidity);
    Serial.println("%");
    updateInput(String (temperature) , String(humidity));
    delay(postingInterval);
  }
  
//-------------------------------------------------------------------
// Following function setup the esp8266, put it in station made and 
// connect to wifi access point.
//------------------------------------------------------------------

void setupEsp8266()                                   
{
    //Serial.println("initialisation du esp8266");
    if(DEBUG){
      Serial.println("Reseting esp8266");
    }
    esp8266Module.flush();
    esp8266Module.println(F("AT+RST"));
    Serial.write(esp8266Module.read() );
    delay(2000);
    //delay(7000);
    Serial.write(esp8266Module.read() );
    if (esp8266Module.find("OK"))
    {
      if(DEBUG){
        Serial.println("Found OK");
        Serial.println("Changing espmode");
      }  
      esp8266Module.flush();
      changingMode();
      delay(2000);
      //delay(5000);
      esp8266Module.flush();
      connectToWiFi();
    }
    else
    {
      if(DEBUG){
        Serial.println("OK not found");
      }
    }
}

//-------------------------------------------------------------------
// Following function sets esp8266 to station mode
//-------------------------------------------------------------------

bool changingMode()
{
    esp8266Module.println(F("AT+CWMODE=1"));
    Serial.write(esp8266Module.read() );
    if (esp8266Module.find("OK"))
    {
      if(DEBUG){
        Serial.println("Mode changed");
      }  
      return true;
    }
    else if(esp8266Module.find("NO CHANGE")){
      if(DEBUG){
        Serial.println("Already in mode 1");
      }  
      return true;
    }
    else
    {
      if(DEBUG){
        Serial.println("Error while changing mode");
      }  
      return false;
    }
}

//-------------------------------------------------------------------
// Following function connects esp8266 to wifi access point
//-------------------------------------------------------------------

bool connectToWiFi()
{
  if(DEBUG){
    Serial.println("inside connectToWiFi");
  }  
  String cmd = F("AT+CWJAP=\"");
  cmd += network;
  cmd += F("\",\"");
  cmd += password;
  cmd += F("\"");
  esp8266Module.println(cmd);
  //Serial.println(cmd);
  delay(5000);
  //delay(5000);
  
  if (esp8266Module.find("OK"))
  {
    Serial.println("Connected to Access Point");
    if(DEBUG){
      Serial.println("Connected to Access Point");
    }  
    return true;
  }
  else
  {
    Serial.println("Could not connect to Access Point");
    if(DEBUG){
      Serial.println("Could not connect to Access Point");
    }  
    return false;
  }
}

//-------------------------------------------------------------------
// Following function sends sensor data to thingspeak.com
//-------------------------------------------------------------------

void updateInput(String voltage1,String voltage2)
{  
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += IP;
  cmd += "\",80";
  esp8266Module.println(cmd);
  //Serial.println(cmd);
  delay(5000);
  //delay(5000);
  if(esp8266Module.find("Error")){
    if(DEBUG){
      Serial.println("ERROR while SENDING");
    }  
    return;
  }
  cmd = GET + "&field1=" + voltage1 + "&field2=" + voltage2 + "\r\n";
  esp8266Module.print("AT+CIPSEND=");
  esp8266Module.println(cmd.length());
  //Serial.println(cmd);
  delay(5000);
  //delay(15000);
  if(esp8266Module.find(">"))
  {
    esp8266Module.print(cmd);
    if(DEBUG){
      Serial.println("Data sent");
    }
  }else
  {
    esp8266Module.println("AT+CIPCLOSE");
    if(DEBUG){
      Serial.println("Connection closed");
    }  
  }

Portrait de f.mathieu

comme on le voit plus haut, l'arduino initie des commandes AT pour les envoyer au module ESP8266, qui est connecté aux bornes 2 en réception et 3 en réception et envoi les données de température sur le cloud.

le principe recherché est de pouvoir bénéficier d'un interface de connexion à partir de l'ESP pour accéder à un réseau wifi, sans être obligé de spécifier dans le code de l'arduino le réseau oû se connecter.

en effet, c'est bien joli dans le cas oû le réseau reste le même, mais si l'on modifie le mot de passe par exemple, il faut modifier le code et le retélécharger dans l'arduino, ce que je veux éviter.

en utilisant le programme autoconnect, l'ESP passe en mode serveur s'il n'est pas capable de se connecter à un réseau wifi, en proposant une connexion accessible par mobile, ce qui rend la configuration beaucoup plus simple par le biais d'une page web et surtout, n'oblige pas de modifier le code pour se connecter sur un autre réseau.

mon problème est que tout fonctionne bien lorsque je telecharge le programme ''autoconnect'' dans l'ESP, mais ce dernier ne répond plus aux commandes AT.

tout mon problème est ici, car j'aimerais bien savoir comment faire pour conserver le firmware d'origine et pousser un en plus un programme pour la connexion au réseau...

est-ce plus clair ? :-)

Merci

Portrait de Akade

Bonjour je suis nouveau et très heureux d'être parmi vous .

J'ai besoin d'aide j'aimerais bien pourvoir à chaque initialisation de mon esp8266 connecter à mon arduino définir le nom de mon réseaux et le mot de passe  ! C'est pour ne pas,  à chaque fois que je change de réseaux téléverser un nouveau code dans l'arduino merci pour vos solutions je compte sur vous pour me débloquer ! !

Erreur | Les Électroniciens.com

Message d'erreur

  • Warning : Error while sending QUERY packet. PID=19961 dans DatabaseStatementBase->execute() (ligne 2227 dans /home/leselectnn/www/includes/database/database.inc).
  • Warning : Cannot modify header information - headers already sent by (output started at /home/leselectnn/www/includes/bootstrap.inc:1640) dans drupal_send_headers() (ligne 1499 dans /home/leselectnn/www/includes/bootstrap.inc).
  • PDOException : SQLSTATE[HY000]: General error: 2006 MySQL server has gone away: SELECT 1 AS expression FROM {variable} variable WHERE ( (name = :db_condition_placeholder_0) ); Array ( [:db_condition_placeholder_0] => cron_last ) dans variable_set() (ligne 1258 dans /home/leselectnn/www/includes/bootstrap.inc).

Erreur

Le site Web a rencontré une erreur inattendue. Veuillez essayer de nouveau plus tard.

Uncaught exception thrown in shutdown function.

PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away: DELETE FROM {semaphore} WHERE (value = :db_condition_placeholder_0) ; Array ( [:db_condition_placeholder_0] =&gt; 77751133562b9b8709f14b2.07709178 ) in lock_release_all() (line 269 of /home/leselectnn/www/includes/lock.inc).