Arduino UNO, Nano y NodeMCU ESP8266 a buen precio

Una de las preguntas que me hacen con más frecuencia es donde comprar Arduinos a buen precio. Una de las opciones para comprar Arduinos es GearBest https://www.gearbest.com/

Aquí os dejo tres Arduinos que puedes usar en muchos proyectos y que en función del proyecto y sus necesidades doy pistas para optar por uno u otro.

Arduino UNO

Arduino UNO es el Arduino más popular y del que existe más documentación en Internet. Es el Arduino perfecto para iniciarse y al tener el factor de forma estándar de Arduino puedes ponerle alguno de los miles de shields disponibles en el mercado, aquí puedes ver algunos ejemplos https://www.gearbest.com/arduino-shields-_gear/

Un detalle de estos Arduinos es que es necesario instalarse el driver de conversor de puerto serial a USB. Este Arduino dispone de un chip CH340G como conversor serial a USB y por lo tanto deberemos usar el driver de este chip y que podemos encontrar su última versión en http://www.wch.cn/download/CH341SER_EXE.html. Enlaces de descarga:

En este enlace puedes comprarlo por alrededor de 4€ y con envío gratuito a España: https://www.gearbest.com/boards-shields/pp_228782.html?wid=1433363

Arduino Nano

Arduino Nano es el Arduino ideal para los proyectos donde es necesario un Arduino con el microcontrolador ATmega328P del Arduino UNO pero con un tamaño mucho más pequeño, menor consumo e incluso alimentar mediante batería.

Al igual que el Arduino UNO, este Arduino Nano dispone de un chip CH340G como conversor serial a USB y por lo tanto deberemos usar el driver de este chip y que podemos encontrar su última versión en http://www.wch.cn/download/CH341SER_EXE.html. Enlaces de descarga:

En este enlace puedes comprarlo por alrededor de 4€ y con envío gratuito a España: https://www.gearbest.com/boards-shields/pp_265453.html?wid=1433363

NodeMCU ESP8266

Si quieres empezar a trabajar con ESP8266 o tu proyecto con Arduino necesita de conexión wifi, el módulo más adecuado es el NodeMCU ESP8266 por su facilidad de uso y pequeño tamaño.

Se trata de la versión de hardware v1.0, debe tenerse en cuenta porque las versiones anteriores cambian bastante los pines y los drivers a instalar.

Comparación entre versiones:

Para usar el NodeMCU es necesario instalar el driver del chip adaptador de serial a USB. Esta placa dispone de un chip CP2102 como conversor serial a USB y por lo tanto deberemos usar el driver de este chip y que podemos encontrar su última versión en https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers.

En este enlace puedes comprarlo por alrededor de 4€ y con envío gratuito a España: https://www.gearbest.com/transmitters-receivers-module/pp_366523.html?wid=1433363

Si quieres más información sobre el uso del ESP8266 y del nodeMCU puedes ver estos artículos del curso avanzado de Arduino:

También hablo del nodeMCU en estos dos vídeos del curso de ESP8266:

Video. Primeros Pasos con ESP8266

Una vez que sabemos que es el ESP8266 y tenemos el IDE instalado, vamos a aprender a usar el Wifi del ESP8266. No entramos en el uso de otras características que son comunes a Arduino y que trataré de forma genérica en otros vídeos dentro del curso de Arduino en vídeo https://www.aprendiendoarduino.com/videos/curso-arduino/.

Si quieres saber más de Arduino y de su programación puedes ver los cursos de https://www.aprendiendoarduino.com

Una forma de aprender a manejar un dispositivo hardware o una librería es leer los ejemplos y ponerlos en práctica mientras se revisa la documentación en lugar de leer toda la documentación antes de empezar a practicar. Para empezar con los módulos ESP8266 una vez instalado el soporte para las placas, lo más sencillo es ejecutar los ejemplos que vienen con el soporte instalado para los módulos ESP8266.

Para ver los ejemplos debemos primero seleccionar la placa que vamos a usar, en nuestro caso la Wemos D1 mini o la nodeMCU.

Todos los ejemplos disponibles en el IDE de Arduino los puedes encontrar en los ejemplos de las librerías que vienen con el soporte del ESP8266 para Arduino que hemos instalado anteriormente en: https://github.com/esp8266/Arduino/tree/master/libraries

WiFiScan

Veamos primero el ejemplo WiFiScan que podemos encontrar en Archivos – Ejemplos – ESP8266WiFi – WiFiScan.

Este sketch muestra cómo escanear redes WiFi y el código es casi similar al usado con el WiFi shield de Arduino pero incluyendo la librería “ESP8266WiFi.h” en lugar de “WiFi.h”

La documentación de la librería “ESP8266WiFi” está en http://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/readme.html y dentro de la librería hay varias clases, entre ellas está scan para escanear redes y la client para conectarnos a un servidor: http://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/readme.html#scan

Al usar la librería ESP8266WiFi, lo primero es configurar el WiFi del ESP8266, en este caso en modo estación (WIFI_STA), es decir, para conectarse a un AP, pero en este caso nos desconectamos para poder escanear todas las redes.

ESP8266 operating in the Station mode

Para scanear la red usamos la clase scan de WiFi: http://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/scan-class.html y este proceso tarda aproximadamente un segundo y devuelve un número entero con el número total de redes encontradas. Luego mediante una serie de métodos puedo obtener los datos de SSID, RSSI, etc… de las redes encontradas en el scaneo.

Luego saco por pantalla el nombre de la red (SSID), la potencia (RSSI) y si es una red protegida. En la línea 40 hay un operador que no es común es un operador ternario https://es.wikipedia.org/wiki/Operador_ternario que es un if simplificado.

Luego para acceder a los datos de las redes encontradas en el scan, uso las funciones SSID, RSSI y encryptionType para encontrar el SSID, la señal y el tipo de cifrado de las redes encontradas.

Para más información ver la documentación de la clase scan en : http://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/scan-class.html

Más ejemplos de uso de la clase scan: http://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/scan-examples.html

Ejercicio propuesto: modificar el ejemplo WiFiScan para que también busque las redes WiFi ocultas y también muestre el canal y la MAC del punto de acceso o BSSID https://es.wikipedia.org/wiki/BSSID

Solución: https://github.com/jecrespo/aprendiendoarduino-curso-esp8266-youtube/blob/master/WiFiScanMejorado/WiFiScanMejorado.ino

En este caso he usado dos funciones:

  • muestra_encriptacion() que me dice la encriptación de la red wifi que me da el método WiFi.encryptionType()
  • muestra_SSID() que me da el nombre de SSID y en caso que sea una red oculta se dice.

También uso tabuladores “\t” para mostrar la información de forma más clara.

Con la información obtenida de las MACs, RSSI y canal, usando la librería de Germán Martín puedo obtener la localización https://github.com/gmag11/ESPWifiLocation gracias a  Google Maps GeoLocation API. Un tutorial completo realizado por Luis del Valle puede verse en https://programarfacil.com/blog/arduino-blog/geolocalizacion-wifi-arduino-nodemcu/

Video. Preparación IDE Arduino para ESP8266

Una vez conocido el hardware del ESP8266 visto en el anterior vídeo https://www.aprendiendoarduino.com/2018/01/23/video-iniciacion-a-esp8266-hardware/ vamos a ver como preparar el entorno de programación de Arduino (IDE) para programar el ESP8266.

Estas son las dos placas que vamos a usar.

Instalación Drivers Uso NodeMCU y Wemos D1 Mini

Para conectar las placas de prototipado NodeMCU y Wemos D1 Mini usamos el puerto USB y al contrario que con Arduino donde los drivers ya se instalan con el IDE, en este caso debemos instalar los drivers que emula un puerto serie (COM) en el USB de la placa utilizada.

Para el Wemos D1 Mini es necesario instalar el driver del conversor USB a serie que es el CH340G y excepto para el D1 mini Pro que es el chip CP2104:

Para el NodeMCU es necesario instalar el driver del adaptador USB CP210x de silicon labs:

Preparación IDE Arduino para usar con ESP8266

El ESP8266 dispone internamente de un pequeño procesador, prácticamente es capaz de replicar casi cualquier cosa los Arduinos puedan hacer. Usando el entorno de programación y el lenguaje de programación de Arduino podemos programar un ESP8266 cargando un firmware programado por nosotros mismo. Esto permite que la CPU ESP8266 y sus componentes Wi-Fi sean programados como cualquier otro dispositivo Arduino.

  • Puedes desarrollar con el mismo IDE que ya conoces
  • La comunidad ha hecho un Cross compiler, de forma que prácticamente utilizas los mismos comandos que utilizas con Arduino.
  • Puedes programar el procesador de tu ESP8266 exactamente como si fuera un Arduino con los mismos comandos, y en lo que se refiere a la WIFI, puedes olvidarte de los comandos AT, porque incluye una serie de librerías, que imitan la librería WIFI de Arduino con lo que se pueden reutilizar muchos programas hechos para Arduino y compilarlos para un ESP8266.  

El Arduino Core ESP8266 está disponible a través de GitHub: https://github.com/esp8266/Arduino

Reference de Arduino core para el ESP8266:

Listado de URLs para soporte de tarjetas no oficiales: https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls

Podemos instalar el soporte a terceros en nuestro IDE simplemente añadiendo el texto “http://arduino.esp8266.com/stable/package_esp8266com_index.json” en propiedades:

Y luego desde el gestor de tarjetas dar a instalar al soporte para ESP8266.

Blink con ESP8266

Una vez preparado nuestro IDE de Arduino para programar placas con ESP8266, podemos probar que funciona. Para ello vamos a probar blink en el Wemos D1 Mini y en el NodeMCU.

Paso 1: Abrir el ejemplo blink del IDE de Arduino:

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

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

Paso 2: seleccionar la tarjeta que vamos a programar

  • Wemos R2 & D1 mini
  • NodeMCU 1.0 (ESP-12E module)

Paso 3: Cargar el programa y comprobar que el led integrado funciona.

Ejercicio Propuesto

Revisar los ejemplos para ESP8266 que aparecen en el IDE y ejecutar el scanner de redes wifi llamado “WifiScan”.