Objetivos
Material requerido
Nodemcu V2 |
Qué tenemos entre manos
Este nuevo dispositivo está llamado a convertirse en uno de los mejores amigos para los que nos gusta trastear con estas historias conocidas como IoT (Internet of Things). Y es que esta placa compatible con Arduino integra todas las bondades de los NodeMcu y además integra una pantalla OLED de 0.96″.
Es una pantalla con el tamaño suficiente para poder visualizar, por ejemplo, el estado de la conexión WiFi o la lectura de cualquier sensor que tenga conectado.
Así que en resumidas cuentas tenemos una placa que a un precio muy reducido nos ofrece:
< >
Si queréis comprobar cómo se ve la pantalla, podéis conectar la placa y veréis un programa pregrabado que muestra varias cosas en la pantalla.
Programación
Si nunca habéis trabajado antes con el NodeMcu, primero deberíais echar un ojo a esta sesión donde explicamos como preparar el IDE de Arduino para poder programar los NodeMcu con él: Programando NODEMCU con Arduino IDE. Cuando lo tengáis todo bien configurado ya podemos empezar a programar.
Lo primero que debemos hacer es descargar esta librería: esp8266-oled-ssd1306-master, la utilizaremos para manejar la pantalla OLED de la placa. Hemos intentado correr los ejemplos de la librería, pero sin demasiada suerte… así que hemos hecho uno propio. Lo que pretendemos que haga es simplemente conectarse a la red WiFi que queramos, pero que en vez de mirar en el monitor serie podamos ver en la pantalla OLED cómo lo va haciendo, y nos muestre la red a la que se va a conectar y la dirección ip que se le asigne cuando lo consiga. Así que al lío.
Vamos a empezar incluyendo las librerías que vamos a utilizar:
#include <ESP8266WiFi.h> #include <Wire.h> #include "SSD1306.h"
También tenemos que incluir las variables para la conexión WiFi, nombre de la red a la que nos queremos conectar y su contraseña.
const char* ssid = "prometec"; //Nombre de la red WiFi a la que nos vamos a conectar const char* password = "contrase"; //Contrasena de la red WiFi a la que nos vamos a conectar
Y para hacer funcionar la pantalla OLED tenemos que definir su dirección y los pines I2C del NodeMcu. Además definiremos la variable flipDisplay a true, que usaremos para girar la pantalla 180º. Aunque no es necesario, a nosotros nos venía mejor esa posición.
SSD1306 display(0x3c, 5, 4); //GPIO 5 = D1, GPIO 4 = D2 #define flipDisplay true
Ya en el setup, vamos a definir la velocidad del puerto serie, por si queremos utilizarlo para comprobar que todo vaya bien. Después vamos a mostrar los primeros caracteres en forma de mensaje de bienvenida en el display OLED. Para eso tenemos que definir la orientación de la pantalla (si queremos cambiarla) y , tras borrar el contenido de la misma, seleccionamos la fuente de texto que queremos y le damos las coordenadas para empezar a escribir y el texto que queremos mostrar. Una vez lo tengamos, tenemos que usar la función display.display(); para mostrarlo.
Serial.begin(115200); delay(10); /* Inicializamos la pantalla */ display.init(); if (flipDisplay) display.flipScreenVertically(); /* Mostramos la pantalla de bienvenida */ display.clear(); display.setFont(ArialMT_Plain_16); display.drawString(15, 25, "Prometec.net"); display.display(); delay (3000);
Para conectarnos a la red WiFi usaremos la función WiFi.begin, pero antes vamos a mostrar en pantalla la red WiFi a la que nos estamos intentando conectar.
/*Mostrar red en pantala*/ Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); display.clear(); display.setFont(ArialMT_Plain_16); display.drawString(0, 0, "Connecting to:"); display.drawString(0, 32, ssid); display.display(); /*Conectarnos a la red WiFi*/ WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
Para terminar sólo nos falta mostrar en pantalla un mensaje que nos muestre el nombre de la red a la que estamos conectados y la IP que se nos ha asignado. La IP la obtenemos con la función WiFi.localIP(); pero como no podemos mostrarla así directamente la convertimos en un String.
/*Mostrar nuestra IP*/ Serial.println(""); Serial.print("Red: "); Serial.println(ssid); Serial.println("IP address: "); Serial.println(WiFi.localIP()); String ip = WiFi.localIP().toString(); display.clear(); display.drawString(0, 0, "Red: "); display.drawString(40, 0, ssid); display.drawString(0, 20, "IP address:"); display.drawString(0, 40, ip); display.display();
Y como no queremos hacer más el loop lo dejamos vacío. Si todo va bien deberías ver algo parecido a esto pero con vuestro nombre de red e IP. Aquí os dejamos el programa completo:
Ya hemos arrancado con esta nueva placa que seguro que nos va a dar muchas alegrías. Seguiremos jugando con ella y trataremos de sacarle el máximo partido posible. De momento os dejamos un vídeo con el resultado:
Resumen de la sesión
<
En esta sesión hemos aprendido varias cosas importantes:
—————————————————
Nuestro primer circuito
—————————————————
Objetivos
Material requerido.
Tienda España | |
---|---|
Arduino Uno o compatible y con el firmware para S4A cargado. | |
Una Protoboard más cables. | |
Tres diodos LED |
|
Cuatro resistencia de 330 Ohmios. |
ALGUNAS IDEAS BÁSICAS SOBRE ELECTRÓNICA
Cuando dejamos fluir agua de un sitio alto a otro más bajo, el agua corre libremente mientras no se lo impidamos, y siempre de arriba abajo.
Decimos que las diferentes alturas suponen una diferencia de potencial entre ambos puntos que puede ser transformada en trabajo útil.
Cuando existe una diferencia de tensión eléctrica (O diferencia de potencial) entre dos puntos con conexión, la electricidad fluye del positivo (O de más carga) hacia el negativo o menos, y también podemos obtener trabajo útil de este principio.
Aunque la física detrás de estos dos ejemplos es diferente, el concepto es bastante parecido y por ello hablamos de:
- Corriente de agua / Corriente eléctrica.
- Caudal de agua / Intensidad de corriente.
- Resistencia al flujo / Resistencia eléctrica.[/fancy-ul] [/three-fourth]
La idea es que la corriente eléctrica fluye del positivo al negativo porque hay una diferencia de tensión (Que medimos en Voltios de símbolo V) pero esto no es una medida absoluta sino la diferencia que hay entre los puntos en que lo medimos.
De la misma manera, la diferencia de altura entre dos puntos solo representa eso, una diferencia y no indica a qué altura se encuentran con respecto a una referencia más o menos arbitraria.
Hay componentes que se oponen a la libre circulación de la corriente. Los llamamos resistencias, su valor se mide en Ohmios y su símbolo es Ω. La ley de Ohm, liga todos estos valores de una forma precisa:
V = I x R
Donde V es la tensión en voltios, R la resistencia e I la intensidad eléctrica que fluye.
En el mundo de Arduino la tensión es casi siempre 5V, que es la tensión a que funciona y la que es capaz de poner en sus salidas digitales. Otra manera de escribir esta ley de Ohm es
I = V / R
Lo que implica que si la resistencia del circuito es nula (O casi, como en el caso de un cable de cobre) la intensidad de la corriente se dispara y puede llegar a fundir el cable o componente que encuentre.
Esto se conoce como Cortocircuito o Corto simplemente y debe ser evitado decididamente ya que suele acabar con olor a quemado y algún susto, en el mejor caso.
NUESTRO PRIMER CIRCUITO ELECTRÓNICO
En la sesión anterior programamos el LED conectado al pin 13 de nuestro Arduino. Ahora vamos a duplicar este circuito en el exterior. Su esquema eléctrico sería así:
Vemos a la izquierda el símbolo del diodo LED que es emisor de luz y por eso tiene esas flechitas salientes para indicarlo (LED viene del inglés Light Emitting Diode, o diodo emisor de luz).
La resistencia se representa por ese segundo símbolo indicando un nombre R1 y su valor 330Ω.
A su vez vemos a la izquierda las letras GND para indicar que es el negativo. Tiene muchos nombres: Masa, El símbolo –, Tierra (Aunque no es lo mismo), Ground, Negativo, cátodo.
Por último a la derecha el símbolo de +5V indica el extremo de tensión positiva o positivo y a veces se representa como Vcc. Las líneas rectas y negras indican conexión eléctrica mediante cables conductores.
- Un diodo, es un componente electrónico que solo permite pasar la corriente en una dirección. En la dirección del positivo al negativo (la parte ancha del triángulo) al negativo, la punta del triángulo (que indica la dirección).
- Para indicar cuál de las patas de un diodo LED es el positivo, éste suele ser de mayor longitud.
- Si se conecta a la inversa, cortará el flujo de corriente muy eficazmente y no se iluminará en absoluto.
- Las resistencias en cambio no diferencian un extremos del otro, y por eso decimos que no tienen polaridad.
Es importante entender los esquemas electrónicos porque permiten comprender con rapidez cualquier circuito. Vale la pena dedicarle un poco de esfuerzo porque son el lenguaje de la electrónica.
Una vez comprendido el esquema eléctrico del circuito, veamos la conexión en la protoboard:
Este esquema sigue una pauta de marcar los cables que van a positivo en rojo y los que van a GND en negro. Os recomendamos encarecidamente que sigaís esta norma en la práctica porque ayuda a identificar posibles problemas y evita errores.
- La protoboard une los puntos horizontales de la línea azul entre si y los horizontales de encima de la línea roja entre sí, (se les llama raíles), pero no conecta el raíl rojo positivo con el raíl negro negativo.
- En algunas protoboards estos raíles llegan sólo hasta la mitad de ella. La otra mitad es otro raíl diferente. En ese caso las líneas roja y azul están divididas en dos en la mitad de la línea.
- A su vez existen dos zonas de líneas verticales en la protoboard. Estas líneas verticales están unidas entre sí internamente, para facilitar la conexión de los componentes, pero no se unen las líneas paralelas, ni tampoco a la otra mitad separada por el canal central.
En la imagen las diferentes líneas de colores representan algunos ejemplos de cómo están unidos internamente los puntos de conexión. Todos los puntos debajo de una línea de un mismo color son un único punto en cuanto a conexión eléctrica.
Las claves para montar el circuito con éxito, son:
- Conectamos el pin 13 de Arduino a la línea roja de la protoboard.
- Conectamos el GND de Arduino a la línea azul de la protoboard.
- Usamos el raíl positivo (los pines de la línea roja) para conectar a la resistencia.
- El otro extremo de la resistencia se conecta al positivo del LED porque están en la misma vertical de la protoboard (y esta los conecta eléctricamente).
- El positivo del LED está claramente marcado como de mayor longitud mediante un pequeño ángulo cerca de la base.
- Un diodo LED casi no presenta resistencia propia, por lo que siempre debe usarse una resistencia adicional que limite el paso de corriente, y evite que se queme. (Una resistencia entre 220 y 3300 Ω suele ser adecuada).
- El circuito se cierra con un cable desde el negativo del LED al raíl de GND.
- Cuando nuestro programa ponga un valor de HIGH (5V) en el pin 13, permitirá el flujo de corriente por el circuito iluminando el LED. Con LOW sencillamente el circuito estará apagado, sin tensión.[/fancy-ul] [/three-fourth]
Podemos ahora ejecutar el programa que hicimos en la sesión 2, siguiendo el procedimiento que definimos allí, y veremos cómo esta vez, además del LED propio de Arduino, nuestro LED exterior parpadea siguiendo el mismo ciclo de encendido y apagado.
Resumen de la sesión
En esta sesión hemos aprendido varias cosas importantes: