viernes, 17 de enero de 2020

Primeros pasos con ESP8266 IDE Arduino - BLINK

Página principal

ESP8266

BLINK


Hace 5 años había realizado montajes con el ESP8266, pero lo utilizaba con el Arduino para las comunicación.
Solo lo utilizaba mediante comando AT, a modo de modem, y la comunicación la hacia mediante el puerto serie.
    Arduino NANO - SERVER WEB con ESP8266 - Servidor de temperatura-ds18B20. ardwifi
En estos 4 años la programación del ESP8266 avanzó mucho, ahora el ESP8266 se puede programar directamente desde la IDE del Arduino. Como enseñar a configurar  la IDE de Arduino para programar el ESP8266 sería demasiado repetitivo debido a la gran cantidad de tutoriales que existen, he creído que lo mejor sería indicar los mejores enlaces que yo he encontrado.

https://polaridad.es/programar-un-modulo-wifi-esp8266-desde-el-ide-de-arduino/
https://www.luisllamas.es/programar-esp8266-con-el-ide-de-arduino/
https://www.instructables.com/id/Quick-Start-to-Nodemcu-ESP8266-on-Arduino-IDE/
https://www.esploradores.com/instalacion-del-gestor-del-microprocesador-es8266-en-el-ide-de-arduino/

En estas páginas se explica bastante bien como configurar la IDE del Arduino, seguro que existen otras muchas, pero son las que he utilizado.
Lo primero que he probado es hacer parpadear un LED , es como el hola mundo de la programación.
ESP8266 Blink
// El LED montado en el módulo está conectado a D4

#define LED D4

void setup()
{
  pinMode(LED, OUTPUT); 
}

void loop()
{
  digitalWrite(LED, LOW);
  delay(1000);                    
  digitalWrite(LED, HIGH); 
  delay(1000); 
}

Placa de desarrollo NodeMcu V3.

Lo primero que notamos al compilar y subir el programa es lo mucho que tarda, 21 segundos.
También lo que extraña es el tamaño del programa, 257672 bytes (24%), he de suponer, que sea debido a que además del programa suba un interprete o un pequeño sistema operativo.
Las siguientes modificaciones en el programa y su posterior compilación-subida a la placa solo tardan 8 segundos.
Haciendo algunas pruebas con compilación-subida a la placa, he notado que es mas rápido en versiones de sistema operativo de 32 bits que la de 64 bits , 20% mas rápido. Yo siempre he pensado que los 64 bits están sobrevalorados en muchas aplicaciones y procesadores.

Lo curioso de estas placas es el no disponer de un piloto LED que nos informe que la placa está alimentada, en muchas ocasiones no sabes si la tienes conectada.
Existe un un LED conectado al pin D4, que es el que utilizamos para nuestro montaje. En otros modelos de placa de desarrollo se encuentra conectado a otro pin.


En mi segunda prueba intento saber la máxima frecuencia de parpadeo del LED.
ESP8266 Blink-2
/*
  ESP8266 Blink
*/
// 545 KHz  y parpadeo cada 3 Segundos

#define LED D0

void setup() 
{
  pinMode(LED, OUTPUT); 
  ESP.wdtDisable();  
}

void loop()
{
volver:
  digitalWrite(LED, LOW);                   
  digitalWrite(LED, HIGH);
  ESP.wdtFeed(); //de otra forma salta el Watch Dog
  goto volver; 
}

El resultado de las pruebas me da 545 KHz  y parpadeo cada 3 Segundos, es como si hubiese una interrupción cada 3 segundos.
Después de mucho mirar por la WEB he descubierto que tiene activado por defecto el pero guardián cada 3 segundos.
Con la orden   ESP.wdtDisable();  desactivamos el Watchdog .
Aún así sigue reseteando cada 8 segundos.
Cuando el
Watchdog está desactivado durante mucho tiempo el módulo se desactiva.
Con la orden ESP.wdtFeed(); ya no se resetea el módulo, aunque pierda velocidad. ?????
El resultado es de 332KHz, y una onda que no es cuadrada.

/*
  ESP8266 Blink-2 versión 2
  384 KHz 
*/

#define LED D0

int z;

void setup()
{
  pinMode(LED, OUTPUT);
  ESP.wdtDisable(); 
}

void loop()
{
volver:
  digitalWrite(LED, LOW);                  
  digitalWrite(LED, HIGH);
  z++;
  if(z>60000)
    {
      ESP.wdtFeed(); //de otra forma salta el Watch Dog
      z=0;
    }
  goto volver;
}
Otro modo es poner cada cierto tiempo ESP.wdtFeed(); y ganamos algo de velocidad llegando a 384 KHz.

En un montaje hice pruebas stm2.html
En un  Arduino hacemos oscilar el puerto a 96 KHZ  ,y si utilizamos el 32F103C8T6 oscila a 817KHz .
Como con el Arduino tengo práctica, sé bastantes trucos, y  podemos llegar a 2.6 Mhz , incluso a 3.9 Mhz haciendo alguna trampa.

Otra de las prueba que suelo hacer es un bucle.

Bucle
//  Arduino
//  22.6 Seg.  __2000

//  STM
//  5.8 Seg.  ___2000

// ESP8266
// 6 Segundos

int n1,n2;
char z;

// STM
//#define LED PA0

//Arduino
//#define LED 13

//ESP8266
#define LED D0

void setup()
{
  pinMode(LED, OUTPUT);
  ESP.wdtDisable();
  Serial.begin(115200);
}

void loop()
{
    Serial.println("0");
    digitalWrite(LED, LOW);

    for(n1=0;n1<30000;n1++)
      {
        for(n2=0;n2<2000;n2++) { z=1; }
        ESP.wdtFeed();
      }
   
    Serial.println("1");
    digitalWrite(LED,HIGH );

    for(n1=0;n1<30000;n1++)
      {
        for(n2=0;n2<2000;n2++) { z=1; }
        ESP.wdtFeed();
      }           
}

El resultado es de 6 Segundos, parecido al  32F103C8T6 que tarda 5.8 Segundos.

Aunque me gusta el ESP8266  por su precio, tener WIFI y la memoria que lleva, veo que hay mucho que aprender en cuanto a su programación

Espero que les guste este montaje.

Saludos.
Juan Galaz

Bibliografía:

https://polaridad.es/programar-un-modulo-wifi-esp8266-desde-el-ide-de-arduino/
https://www.luisllamas.es/programar-esp8266-con-el-ide-de-arduino/
https://www.instructables.com/id/Quick-Start-to-Nodemcu-ESP8266-on-Arduino-IDE/
https://www.esploradores.com/instalacion-del-gestor-del-microprocesador-es8266-en-el-ide-de-arduino/

https://randomnerdtutorials.com/projects/#esp8266
https://randomnerdtutorials.com/getting-started-with-esp8266-wifi-transceiver-review/
https://www.prometec.net/esp8266-pluggin-arduino-ide/


No hay comentarios:

Publicar un comentario