Archivo de la etiqueta: ESP8266

PlatformIO

Si buscamos un entorno de programación IDE más avanzado una buena opción el PlatformIO.

Web: https://platformio.org/

Para instalarlo necesitamos instalar previamente Visual Studio Code: https://code.visualstudio.com/

Y seguir estas instrucciones: https://platformio.org/install/ide?install=vscode

Quick start: https://docs.platformio.org/en/latest/ide/vscode.html#quick-start

Hacer un nuevo proyecto y elegir:

  • Wemos D1 Mini
  • Entorno Arduino

El código está en src/main.cpp y escribir el sketch de blink.

Luego compliar y mandar a la placa como en el IDE de Arduino:

Más información: https://diyprojects.io/start-platformio-the-alternative-arduino-esp8266-esp32/#.XIxJHRP0nOQ

El contenido del fichero platformio.ini es:

[env:d1_mini]
platform = espressif8266
board = d1_mini
framework = arduino
upload_port = /dev/cu.wchusbserial1450

Anuncios

Wifi Manager

Uno de los problemas que podemos encontrarnos es configurar la red WiFi. Si has seguido el tutorial de NodeMCU para programar con el IDE de Arduino, te habrás dado cuenta que la red y la contraseña se meten de forma manual, como un literal dentro del código.

Esto se compila y no hay manera de alterarlo a no ser que vuelvas a cargar el programa. Así que si cambia la WiFi, lo tienes que modificar y subir de nuevo.

Sin embargo, la librería WiFi Manager nos ofrece un sistema para cambiar la configuración de la red a través de una conexión WiFi. También podemos crear nuestros propios parámetros. Por ejemplo la base de datos de Firebase o lo que se nos ocurra.

Github: https://github.com/tzapu/WiFiManager

Web: https://tzapu.com/esp8266-wifi-connection-manager-library-arduino-ide/

Instalar la librería WiFiManager by Tzapu: https://github.com/tzapu/WiFiManager

Abrir el ejemplo AutoConnect: https://github.com/tzapu/WiFiManager/blob/master/examples/AutoConnect/AutoConnect.ino

Lo primero que hace es inicializar la librería. Si encuentra la última red WiFi a la que se conectó, simplemente volverá a conectarse. Pero si no la encuentra es donde entra la función para configurarse como Acces Point.

Encontraréis una nueva red con el nombre “AutoConnectAP”. Si os conectáis a él os saldrá la opción de iniciar sesión, tenemos que pulsar ahí.

Entramos entonces en un menú en el que podemos escanear las redes WiFi. No tenemos más que seleccionar la que queramos y meter el SSID y la contraseña. Una vez conectados, se reiniciará el módulo y se conectará automáticamente a la red WiFi que le hemos indicado. Siempre que encuentre esa red se conectará a ella a partir de ahora, y si cambiamos de lugar o no la encuentra, volverá a configurarse como Acces Point para que podamos cambiar los parámetros para la conexión.

Para incluirlo en un programa que ya tengamos hecho, lo único que hay que hacer es sustituir las partes en las que se conecta a la red WiFi por estás instrucciones, pudiendo prescindir de las variables en las que le indicábamos el SSID y el Password. O sea, meter estas instrucciones en el setup (e incluir la librería):

WiFiManager wifiManager;
wifiManager.autoConnect(“AutoConnectAP”);

Ejemplo de personalización: https://randomnerdtutorials.com/wifimanager-with-esp8266-autoconnect-custom-parameter-and-manage-your-ssid-and-password/

Más información:

Uso ESP8266 WiFi Shields

Shield para wemos D1 mini relé

Comprar:  https://www.amazon.es/Ils-Piezas-Escudo-Versi%C3%B3-ESP8266/dp/B07F6D4SC9/

Web: https://wiki.wemos.cc/products:d1_mini_shields:relay_shield

Esquematico: https://wiki.wemos.cc/_media/products:d1_mini_shields:sch_relay_v2.0.0.pdf

Se maneja con el Pin D1

Ejemplo: https://github.com/wemos/D1_mini_Examples/blob/master/examples/04.Shields/Relay_Shield/BlinkWithoutDelay/BlinkWithoutDelay.ino

Shield para wemos D1 mini neopixel

Comprar: https://diyprojects.io/deal-shield-point-led-driver-ws2812b-wemos-d1-mini-compatible-adafruit-neopixel/

Web: https://wiki.wemos.cc/products:d1_mini_shields:rgb_led_shield

  • 7 RGB LEDs (WS2812B-mini) each wtih 24-bit RGB color
  • 9 optional control pins (Default: D4/GPIO2)

Ejemplo de uso: https://github.com/wemos/D1_mini_Examples/blob/master/examples/04.Shields/RGB_LED_Shield/simple/simple.ino

shield para wemos D1 mini oled

Comprar: https://www.amazon.es/Ils-Piezas-Shield-V2-0-0-Botones/dp/B07FM8HH4K/

Web: https://wiki.wemos.cc/products:d1_mini_shields:oled_shield

Get started: https://wiki.wemos.cc/tutorials:shields:get_started_with_oled_shield

Librería: https://github.com/mcauser/Adafruit_SSD1306/tree/esp8266-64×48

Ejemplo simple: http://automatedhome.party/2017/04/17/connect-an-inexpensive-oled-display-to-a-esp8266wemos-d1-mini/Reloj Wifi: http://jorgesanz.es/reloj-wemos-esp8266-pantalla-oled/

Access Point con ESP8266

Ya hemos visto cómo usar el ESP8266 como un cliente/estación WiFi (WIFI_STA), vemos ahora como configurarlo para usarlo como un Punto de Acceso (AP) WiFi y que cree una red WiFi propia.

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

En este ejemplo se configura el ESP8266 como un punto de acceso y ofrece una web embebida, es decir, va a dar una red WiFi a otros dispositivos como nuestro móvil o portátil. Es un Soft Access Point “software enabled access point” https://en.wikipedia.org/wiki/SoftAP  

El máximo de estaciones conectadas al SoftAP es 5.

El modo soft-AP se usa a menudo como un paso intermedio antes de conectar el ESP8266 a un Wi-Fi en modo de estación. Esto es cuando el SSID y la contraseña de dicha red no se conocen por adelantado. ESP8266 primero arranca en modo soft-AP, para que podamos conectarnos a él usando un portátil o un teléfono móvil. Luego, podemos proporcionar credenciales a la red objetivo. Una vez hecho ESP8266, se cambia al modo de estación y se puede conectar al Wi-Fi objetivo.

Para configurar un ESP8266 como Access Point, se usa la instrucción WiFi.softAP(ssid, password); de la clase Access Point.

Más información:

Además este ejemplo muestra una web y para ello usa la clase ESP8266WebServer https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer que facilita las tareas de hacer un servidor web. Más adelante veremos  cómo usar esta librería.

Una vez iniciado el ESP8266, nos conectamos con nuestro móvil a la WiFi “ESPap” con la contraseña “thereisnospoon” y accedemos a la IP “192.168.4.1”, nos estaremos conectando al ESP8266 y veremos los siguiente:

Ejercicio Propuesto: modifica el ejemplo para crear un SoftAP con una SSID oculta en el canal 6 y con la IP 192.168.100.1.

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

Para ocultar el SSID y seleccionar el canal, hay que ver las diferentes opciones de WiFi.softAP() y para usar una IP es necesario llamar a WiFi.softAPConfig() antes de WiFi.softAP(). Toda la información en  http://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/soft-access-point-class.html

Servidor Web con ESP8266

Ya sabemos como usar un cliente WiFi para conectarnos a Internet y poder recoger datos o ejecutar acciones sobre servidores con el ESP8266. Veamos ahora cómo configurar el ESP8266 como un servidor web y poder manejarlo remotamente.

Para ello veamos el ejemplo WiFiWebServer que podemos encontrar en Archivos – Ejemplos – ESP8266WiFi – WiFiWebServer.

Este ejemplo muestra  cómo hacer un servidor web en el ESP8266 y mostrar una web una vez el ESP8266 se ha conectado a una red WiFi de un punto de acceso.

La clase server crea servidores que proporcionan información a los clientes conectados:

Una vez conectado el ESP8266 a una wifi se inicia el servidor con server.begin(); y para saber la IP asignada uso la instrucción Serial.println(WiFi.localIP());

Dentro de loop, para saber cuando un cliente se conecta al servidor iniciado uso la instrucción WiFiClient client = server.available(); https://www.arduino.cc/en/Reference/WiFiServerAvailable y en la variable client corresponde al cliente conectado a nuestro servidor.

Una vez se ha conectado un cliente uso la instrucción String req = client.readStringUntil(‘\r’); donde guardo en req lo que manda el cliente que en este caso es el navegador que se ha conectado a nuestro ESP8266.

En función de la petición hecha, el ESP8266 enciende o apaga el led colocado en el pin 2.

Una vez ejecutada la acción solicitada manda la respuesta con una página web simple:

HTTP/1.1 200 OK
Content-Type: text/html
<!DOCTYPE HTML>
<html>
GPIO is now on
</html>

Ejercicio Propuesto: modifica el ejemplo para que encienda y apague el led integrado en la placa que es LED_BUILTIN y si sabes un poco de html, hacerlo con un botón mostrado por el servidor.

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

En este caso la web mostrada por el ESP8266 es:

 <!DOCTYPE html>
<html>
<body>
<p>LED APAGADO</p>
<form action=”” method=”post”>
<input type=”submit” value=”Enciende Led” />
</form>
</body>
</html>

Cuando se solicita la web se hace mediante GET y cuando se pulsa el botón se hace mediante POST, de esta forma se diferencian las acciones. También se hace una función muestraWeb() encarga de mandar la web cuando se solicite.