Dialogue Arduino & ESP

Les échanges peuvent se réaliser grâce à l’interface série.

ESP01 :

Il convient d’adapter les niveaux logiques entre les deux cartes. En effet le niveau logique de l’ARDUINO étant 5v et celui de l’ESP 3.3v il est nécessaire de réduire la tension dans le sens Arduino->ESP et l’augmenter dans le sens inverse (quoique dans ce sens il semble exister une tolérance).

Idéalement il faut utiliser un « level converter » exemple 3.3V 5V TTL Bi-directional Logic Level Converter For Arduino :

52264af7757b7f61608b456b

On connectera RX Arduino sur HV/RX et TX Arduino sur HV/TX et RX ESP sur LV/TX et TX ESP sur LV/RX

En l’absence de carte de conversion vous pouvez utilisez deux résistances connectées de la manière suivante

3-1-2015_13-47-43 (1)

Les valeurs des résistances sont données par le site : https://www.abelectronics.co.uk/tools/resistor-voltage-divider.aspx#

 

Le meilleur moyen de tester la communication est le sketch exemple suivant fonctionnant avec une carte MEGA  :

 //-- SERIAL1: RXESP->TX1  
 //-- TXESP->RX1  
 void setup() {  
  // initialize both serial ports:  
  Serial.begin(9600);  
  Serial1.begin(9600);   
 }  
 void loop() {  
  // read from port 1, send to port 0:  
  if (Serial1.available()) {  
   int inByte = Serial1.read();  
   Serial.write(inByte);  
  }  
  // read from port 0, send to port 1:  
  if (Serial.available()) {  
   int inByte = Serial.read();  
   Serial1.write(inByte);  
  }  
 }  

Ou avec une carte UNO et un port de communication logiciel :

 // Pins  
 // Arduino pin 2 (RX) to ESP8266 TX  
 // Arduino pin 3 to voltage divider then to ESP8266 RX  
 // Connect GND from the Arduiono to GND on the ESP8266  
 // Pull ESP8266 CH_PD HIGH  
 #include <SoftwareSerial.h>  
 SoftwareSerial ESPserial(2, 3); // RX | TX  
 void setup()   
 {  
   Serial.begin(9600);   // communication with the host computer  
   // Start the software serial for communication with the ESP8266  
   ESPserial.begin(9600);   
   Serial.println("");  
   Serial.println("Remember to to set Both NL & CR in the serial monitor.");  
   Serial.println("Ready");  
   Serial.println("");    
 }  
 void loop()   
 {  
   // listen for communication from the ESP8266 and then write it to the serial monitor  
   if ( ESPserial.available() )  { Serial.write( ESPserial.read() ); }  
   // listen for user input and send it to the ESP8266  
   if ( Serial.available() )    { ESPserial.write( Serial.read() ); }  
 }  

ESp12 : 

5v donc pas de conversion de signal. RXArduino->TXESP ; TXArduino->RXESP

CH_PD ESP -> 5v et toutes masses entre elles.

Sketch de test à charger dans l’Arduino MEGA :

 int inByte;  
 String sChaine = "";  
 #define led 13    //-- Témoin LED   
 void setup() {  
  Serial.begin(9600);  
  Serial3.begin(9600);  
  pinMode(led, OUTPUT);  
 }  
 void loop() {  
  if (Serial3.available()) {  
   delay(100);  
   while (Serial3.available()) {  
    inByte = Serial3.read();  
    if ((inByte != 13 && inByte != 10 && inByte != 0 )) //&& inByte > 32 && inByte < 123  
    {  
     sChaine += char(inByte);  
    }  
   }  
   if (sChaine != "")  
   {  
    sChaine.trim();  
    sChaine.toLowerCase();  
    Serial.println("Commande=" + sChaine);  
    delay(100);  
    sChaine = "";  
   }  
  }  
  //-- Lecture commande saisie à la console  
  if (Serial.available()) {  
   delay(100);  
   while (Serial.available()) {  
    inByte = Serial.read();  
    if ( inByte > 32 && inByte < 123)  
    { sChaine += char(inByte);  
    }  
   }  
   if (sChaine != "")  
   {  
    sChaine.trim();  
    sChaine.toLowerCase();  
    Serial3.println(sChaine);  
    delay(100);  
    sChaine = "";  
   }  
  }  
 }  

Dans l’ESP12 :

 #define RedLed  12  
 #define GreenLed 13  
 #define BlueLed 15  
 int inByte;  
 String sChaine = "";  
 void setup() {  
  pinMode(GreenLed, OUTPUT);  
  pinMode(RedLed, OUTPUT);  
  pinMode(BlueLed, OUTPUT);  
  Serial.begin(9600);  
  //-- Led Bleu = Init Ok  
  setColor(0, 255, 0);  
 }  
 void loop() {  
  if (Serial.available()) {  
   delay(100);  
   while (Serial.available()) {  
    inByte = Serial.read();  
    if ( inByte > 32 && inByte < 123)  
    {  
     sChaine += char(inByte);  
    }  
   }  
   sChaine.trim();  
   sChaine.toLowerCase();  
   //-- Test de la commande  
   if (sChaine.equals("rouge"))  
   {  
    setColor(0, 0, 255);  
    Serial.println("rougeok");  
   }  
   else if (sChaine.equals("vert"))  
   { setColor(255, 0, 0);  
    Serial.println("vertok");  
   }  
   else if (sChaine.equals("bleu"))  
   { setColor(0, 255, 0);  
    Serial.println("bleuok");  
   }  
   else  
    Serial.println(sChaine);  
   sChaine = "";  
   delay(100);  
  }  
 }  
 void setColor(int red, int green, int blue)  
 {  
  analogWrite(RedLed, red);  
  analogWrite(GreenLed, green);  
  analogWrite(BlueLed, blue);  
 }  

Ce Sketch allume la LED en rouge, bleu ou vert de la carte ESP en saisissant une commande dans la console de la carte MEGA

Références :

https://learn.sparkfun.com/tutorials/bi-directional-logic-level-converter-hookup-guide

http://iot-playground.com/blog/2-uncategorised/17-esp8266-wifi-module-and-5v-arduino-connection

http://www.martyncurrey.com/arduino-to-esp8266-serial-commincation/

 

 

Articles récents
Commentaires récents
fatima sur Bienvenue !
AdminDroid sur Bienvenue !
fatima sur Bienvenue !
Archives
Catégories
%d blogueurs aiment cette page :