ESP32 y Arduino

imagen

Lo que sucedió fue lo que todos esperaban durante tanto tiempo y de lo que hablaban tanto: los nuevos módulos ESP32 comenzaron a venderse ampliamente y se dirigieron a la gente. Hoy hablaremos sobre estos módulos desde el punto de vista de un usuario no profesional que está acostumbrado a trabajar con Arduino y crear pequeños proyectos para la automatización del hogar o simplemente por diversión y autoaprendizaje.

¿Funciona en absoluto? ¿Qué hay con el soporte de estos módulos en Arduino IDE? ¿Vale la pena pagar más o es mejor limitarse al ya conocido ESP8266? Intentaremos responder a todas estas preguntas juntos, y al final del artículo daré un enlace a la encarnación real del trabajo de ESP32 con Arduino, una distribución de la versión gratuita de Arduino Mega Server para la plataforma ESP32.

Especificaciones


No me detendré en las especificaciones ESP32 aquí en detalle, puede encontrarlas fácilmente en Internet: cada revisor considera que es su deber traer una hoja de especificaciones al comienzo de la revisión ESP32. Solo puedo decir que son impresionantes y si aborda el asunto con seriedad y consideración, puede pasar más de un año estudiando todas las capacidades del módulo y experimentando con él.

Dejemos esto a los profesionales (o aquellos que se consideran a sí mismos como tales) y centrémonos en el lado práctico del problema, comprensible y accesible para el simple mortal.

Precio de emisión


Comencemos con el precio. Por el momento, el módulo ESP32 en las tiendas en línea chinas cuesta 350 rublos y 500 en la versión de la placa con un arnés y una interfaz USB. Esto está en contra de 100 y 160 rublos para el módulo ESP8266, respectivamente. Como puede ver, la diferencia es más de tres veces, aunque los valores absolutos son pequeños, cada uno, si lo desea, puede permitirse gastar 350-500 rublos en un microcontrolador. En comparación, el Arduino Mega 2560 en la misma China cuesta 600 rublos, y en Rusia alrededor de 1000 (más el costo de Ethernet Shield).

Solo queda averiguar si vale la pena pagar tres veces más que por el ESP8266 y qué obtendremos por él. (Mirando hacia el futuro, diré que, en mi opinión, definitivamente vale la pena).

Soporte en Arduino IDE


Para hacer algo con el módulo, primero debe tener su soporte en el IDE de Arduino. Por el momento, el soporte para ESP32 en el IDE Arduino está en el nivel inicial, pero bastante decente y viable. Aquellos que tienen miedo de encontrar dificultades insuperables aquí no pueden preocuparse: las funciones principales funcionan bien y probablemente no notará ninguna diferencia en comparación con trabajar en otros controladores.

Las cosas están un poco peor con los controladores de dispositivos, pero este es ciertamente un fenómeno temporal. El módulo es tan popular que el soporte para cualquier periférico aparecerá inevitablemente en el futuro cercano.

Agregar soporte ESP32 al IDE de Arduino


Ahora alguna información práctica sobre la instalación del soporte ESP32 en el IDE de Arduino. Internet está lleno de instrucciones sobre este tema, también puede encontrarlas en abundancia. Solo noto que todas las instrucciones se dividen en "antiguo", donde se menciona Python y "nuevo", donde se menciona GIT. Naturalmente, necesita ser guiado por otros nuevos.

De las muchas instrucciones, la mejor puede llamarse (curiosamente) la instrucción oficial del fabricante del módulo.

github.com/espressif/arduino-esp32

Que recomiendo usar. La única advertencia: GIT es opcional, simplemente puede descargar el paquete de distribución y descomprimirlo en el directorio deseado.

Nota Todo lo siguiente se aplica a la instalación en Windows 7 de 64 bits, ya que realicé todos los experimentos en él, en otros sistemas operativos las rutas pueden diferir de las indicadas.

Los archivos de distribución deben estar en la carpeta

C:\Users\User\Documents\Arduino\hardware\espressif\esp32 

donde C: es el nombre de su unidad de Windows, y Usuario es el nombre del usuario en el sistema operativo (los cuales pueden diferir de los especificados).

Puntos de instalación invisibles para ESP32


Muchos usuarios se quejan de que nada les funciona y el soporte ESP32 en el IDE de Arduino no aparece. Aquí está la cosa: dado que los controladores ESP32 solo se están desarrollando, el orden de la ubicación de los directorios del sistema ha cambiado ligeramente. La carpeta para la ubicación de los bocetos en la configuración de Arduino IDE debe especificarse carpeta

 C:\Users\User\Documents\Arduino 

(con las mismas enmiendas a la unidad y al nombre de usuario), y los archivos de distribución deben ubicarse dentro de esta carpeta según lo recomendado por el fabricante. Si no se tiene en cuenta este punto, la compatibilidad con ESP32 en el IDE de Arduino no aparecerá y nada funcionará.

Versiones de Arduino IDE


A menudo escuchas que la compatibilidad con ESP32 solo está disponible en las últimas versiones del IDE de Arduino, no es así: ESP32 funciona bien en versiones anteriores, por ejemplo, la distribución Arduino Mega Server para ESP32 se desarrolló en la versión 1.6.5 r2.

Beneficios de ESP32


Ahora hablemos de las ventajas de ESP32 sobre su predecesor, ESP8266. No me detendré en cosas tan obvias como la potencia del procesador y la RAM, solo puedo decir que debe esforzarse por cargar ESP32 por completo en tareas de bricolaje y domótica.

Alfileres


El talón de Aquiles de su predecesor, el módulo ESP8266, fue (y es) un número extremadamente pequeño de conclusiones. Después de trabajar con controladores como Arduino Mega y Arduino Due con sus docenas de pines digitales y analógicos, trabajar con el ESP8266 es desconcertante: el conteo GPIO es literalmente uno, y esto limita enormemente el uso de este módulo en proyectos reales.

imagen

ESP32, si no completamente, carece en gran medida de este inconveniente. El número de pines disponibles se ha incrementado significativamente y también han aparecido muchas entradas analógicas. Se pueden llamar 13 conclusiones completamente gratuitas y accesibles para su uso.

 GPIO 2, 4, 12, 14, 13, 15, 16, 17, 25, 25, 27, 32, 33 

Si es necesario, se pueden agregar con funcionalidad limitada y trabajando solo en la entrada

 GPIO 34, 35, 36, 39 

Si sacrifica algunas funciones y no utiliza Serial, SPI o I2C en proyectos específicos, puede agregar 8 pines más a este número

 GPIO 1, 3, 5, 18, 19, 21, 22, 23 

Bueno, es posible usar 6 pines más diseñados para funcionar con memoria flash interna (por ejemplo, si conecta una tarjeta SD externa)

 GPIO 6, 7, 8, 9, 10, 11 

Como puede ver, no hay comparación con el ESP8266: el nuevo módulo se ve muy bien en la cantidad de conexiones posibles y es muy valioso en proyectos reales en los que cada pin es costoso.

Velocidad de trabajo


Ya mencioné un procesador potente, ahora es necesario decir algunas palabras sobre la velocidad de operación de la red. Me resulta difícil decir con qué está conectado esto, posiblemente con un procesador potente, tal vez con la optimización de la pila de red, pero el módulo ESP32 bajo el control del Arduino Mega Server mostró un rendimiento récord en la red.

imagen

Cargar una página con un voluminoso código CSS y JavaScript y una gran cantidad de gráficos lleva solo un pequeño segundo, más rápido que en cualquier otro controlador probado, incluidos los controladores con cable con una interfaz Ethernet W5100 y W5500.

En relación con el Arduino Mega Server, esto elimina todas las restricciones sobre el uso de gráficos y cualquier biblioteca de JavaScript, tanto en tamaño como en número.

Otras ventajas


ESP32 es un dispositivo de alta tecnología, solo una lista seca de las funciones disponibles puede ocupar más de una página, y la lista de las ventajas y características con comentarios tomará todo un volumen. Por lo tanto, me limitaré a esto, para no saturar el artículo y dar algunos ejemplos de trabajo con código ESP32 en el entorno Arduino.

Ejemplos de código


Memoria no volátil


Esto es lo que solíamos llamar EEPROM para el Arduino Mega. ESP32 no tiene esta memoria como tal, pero este módulo tiene su biblioteca analógica y correspondiente para trabajar con él. Esta memoria se llama "NVS" (almacenamiento no volátil).

Pero para nosotros no hay diferencia: puede guardar los valores de la misma manera y leerlos después de apagar y encender el controlador.

Ejemplo de uso Conectamos la biblioteca:

 #include <Preferences.h> 

Crea un objeto prefs

 Preferences prefs; 

Inicializamos el repositorio con el identificador, por ejemplo, "nvs":

 prefs.begin("nvs", false); 

falso se refiere a la elección del modo de lectura / escritura, en este caso, tanto lectura como escritura. Guardamos el byte bajo el nombre "addr":

 prefs.putUChar("addr", 65); 

Leemos el byte guardado:

 byte b = prefs.getUChar("addr", 0); 

Del mismo modo, puede guardar y leer los valores de cualquier otro tipo de datos. Ahora elimine el almacenamiento.

 prefs.remove("nvs"); 

Si observa, es incluso más fácil que trabajar con memoria EEPROM no volátil estándar en controladores Arduino.

AnalogWrite ()


Otra innovación que puede confundir a un usuario novato es que falta la función AnalogWrite () en ESP32. Al principio, esto es muy inusual, pero de hecho, esta función es reemplazada por su contraparte más funcional.

Considera un ejemplo. Comencemos conectando la biblioteca correspondiente, aunque no se puede llamar biblioteca en el sentido completo de la palabra, sino que es un archivo especializado con una descripción de las funciones necesarias. El hecho es que no todas las funciones están presentes directamente en el IDE de Arduino, algunas funciones están disponibles en archivos ubicados en el directorio

 ...\Documents\Arduino\hardware\espressif\esp32\cores\esp32 

En este caso, estamos interesados ​​en el archivo para trabajar con PWM y LED, que conectamos con las siguientes instrucciones:

 #include "esp32-hal-ledc.h" 

A continuación, necesitamos establecer el número de canal (0), la frecuencia PWM (por ejemplo, 50 Hz) y la resolución (8 bits).

 ledcSetup(0, 50, 8); 

Los números de canal se pueden establecer en el rango de 0 a 15, y la resolución de 1 a 16 bits. Si selecciona una resolución de 8 bits, el rango de datos que controla el PWM estará en el rango de 0 a 255.

A continuación, debemos vincular nuestro canal (0) a algún pin GPIO, en este caso, pin 22:

 ledcAttachPin(22, 0); 

Y no debe olvidarse de configurar el pin 22 a la salida de la manera habitual.

 pinMode(22, OUTPUT); 

Eso es todo, ahora podemos controlar, por ejemplo, el brillo del LED, simplemente indicando el número de canal y el valor PWM (brillo) del rango de 0 a 255.

 ledcWrite(0, 50); 

Otros ejemplos de código ESP32


La distribución de Arduino Mega Server, el enlace al que daré al final del artículo, a excepción de un sistema completamente funcional, es una extensa colección de código estructurado, probado y verificado para su funcionamiento en el módulo ESP32. Puede usarlo como tutorial para ingresar al tema de la programación en ESP32.

Estabilidad laboral


Arduino Mega Server para ESP8266 ha confirmado el tiempo de actividad de varios meses y demuestra un funcionamiento absolutamente estable y no tengo ninguna razón para pensar que el módulo ESP32 pueda tener problemas de estabilidad. Al menos durante todo el tiempo que creé la distribución AMS para ESP32, no observé una sola falla o un reinicio no autorizado del módulo. Todo funciona de forma muy clara y previsible.

Arduino Mega Server para ESP32


Este es otro representante del ecosistema AMS, que incluye controladores y placas Arduino Mega, Due, 101, M0, AMS Home, ESP8266, Sonoff, ESP32, OLIMEX ESP32-EVB, etc. Gracias al potente procesador y la rápida operación de red del módulo ESP32, la interfaz del Arduino Mega Server contiene una gran cantidad de gráficos y scripts y esto no afecta su velocidad en absoluto: la página se carga casi al instante.

imagen

Todo funciona de manera estable y previsible, no se detectaron fallas o comportamiento inadecuado del sistema o módulo. A continuación se muestra el registro de descargas de AMS, desde el cual puede encontrar algunos detalles sobre el sistema.

imagen

La temperatura del módulo, medida por el sensor de temperatura incorporado, varía de 50 grados Celsius al inicio a 55 grados durante la operación. Durante el funcionamiento, el consumo de corriente del módulo es de aproximadamente 130 mA.

Perspectivas


No necesita ser un experto especial para predecir que ahora, como los hongos después de la lluvia, comenzarán a aparecer tableros en ESP32 de varios formatos y con varias funciones. Este es uno de los primeros signos de OLIMEX ESP32-EVB , una placa muy interesante para la que en un futuro próximo se lanzará un kit de distribución especializado Arduino Mega Server.

imagen

Conclusión


De hecho, eso es todo lo que puedo decir sobre el nuevo módulo ESP32 y su trabajo con Arduino. Deja impresiones extremadamente positivas, al menos fue muy agradable e interesante para mí trabajar con él. La falta de bibliotecas para admitir sensores y periféricos estropea un poco la imagen, pero este es un fenómeno temporal y pronto todo estará bien con esto.

Puede descargar el kit de distribución Arduino Mega Server para ESP32 en la página de descarga del sitio web oficial, pronto aparecerá la documentación relevante allí, y por ahora puede usar las breves instrucciones del archivo readme.txt ubicado en el kit de distribución.

Source: https://habr.com/ru/post/es404685/


All Articles