Sie sind auf Seite 1von 12

Nodo WiFi de temperatura con el ESP8266 y el

Dallas DS18B20
Pgina de inicio 2015 noviembre Construye un nodo WiFi de temperatura con el ESP8266 y el Dallas DS18B20
Pablo 25 de noviembre de 2015 Electrnica 0
,

Qu es el ESP8266
El ESP8266 es un pequeo microcontrolador de Espressif, de bajo coste y con Wifi
integrado. Su bajo coste y pequeo tamao lo hace ideal para dotar de conectividad Wifi a
cualquier sensor o actuador para el Internet de las Cosas. Adems podemos programarlo
utilizando Arduino IDE y muchas de las libreras que ya conocemos para Arduino, as que
utilizarlo es muy fcil.

Qu necesitas
En este post voy a utilizar un ESP-01. Es el circuito ms bsico que incorpora un
ESP8266, y con l podemos conectarnos a una red Wifi, actuar sobre dos pines digitales y
comunicarnos por el puerto serie.
Para programarlo necesitamos un conversor USB-serie que funcione a 3.3V. Esto ltimo
es muy importante ya que el ESP8266 no tolera ms de 3.6V en sus pines. Si tu conversor
USB-serie no puede funcionar a 3.3V, como alternativa puedes usar un conversor de niveles
TTL y una fuente de 3.3V.
Un sensor digital de temperatura Dallas DS18B20 y su resistencia pull-up, un pequeo
integrado para medir temperatura en tus proyectos. Es un sensor muy preciso, presenta un

error de 0.5C y puede dar hasta 12 bits de precisin en el convertidor analgico-digital


del chip. Necesita una resistencia de pull-up de entre 1 y 10k.
Voy a conectarlo todo usando una breadboard y varios cables jumper (macho-hembra del
ESP-01 a la breadboard, y macho-macho para las conexiones en la breadboard).
Arduino IDE 1.6.4 o superior con el SDK del ESP8266 y las libreras Dallas-TemperatureControl y OneWire. A partir de esta versin Arduino IDE permite instalar configuraciones
adicionales para placas de terceros (no-Arduino) de forma muy sencilla. A partir de aqu
asumimos que ya sabemos utilizar las funciones bsicas del Dallas DS18B20 y programar
el ESP-01 con Arduino IDE.

Conectando el ESP-01 al conversor USB-Serie

Programando el servidor web

Vamos a empezar programando un servidor web que responda con una cadena esttica
Hola mundo y despus haremos la lectura del sensor de temperatura. Haciendo los
sketches paso a paso podemos comprobar que cada parte funciona correctamente antes de
pasar a la siguiente, y evitaremos quebraderos de cabeza depurando errores.

Libreras, instancias y constantes


Para empezar, necesitamos incluir las libreras del ESP8266, crear los objetos y definir las
constantes. Las siguientes lneas dicen a Arduino IDE qu libreras vamos a usar, que para
este sketch son todas estas:

#include <ESP8266WiFi.h>

#include <WiFiClient.h>

#include <ESP8266WebServer.h>

#include <ESP8266mDNS.h>

Para operar necesitamos crear un objeto de la clase ESP8266WebServer cuya funcin es


servir el contenido cuando accedamos con el navegador:

ESP8266WebServer server(80);

Por ltimo, antes de empezar a programar, definimos dos cadenas donde vamos a guardar el
nombre de nuestra red WiFi y la contrasea para que el ESP8266 pueda conectarse.
Sustituye MI_SSID y MI_PASSWORD por los de tu red WiFi:

const char* ssid = "MI_SSID";

const char* password = "MI_PASSWORD";

Conectando a nuestra red WiFi

Vamos a conectar el ESP8266 a nuestra red WiFi. Como es algo que va a ocurrir solo una
vez al inicio del programa, en setup() llamamos a la funcin para conectarnos, y
esperamos a que la conexin se haya realizado:

WiFi.begin(ssid, password); // Conecta a nuestra red WiFi

while (WiFi.status() != WL_CONNECTED) { // Bucle con espera hasta que se conecte


correctamente

delay(500);

Configurando y activando el servidor web


La configuracin ms bsica que podemos hacer del servidor web es que responda una web
esttica cuando en nuestro navegador introducimos la IP de nuestro nodo. Para ello, tan
solo tenemos que configurar el servidor para que escuche en la URL raz (/) e introducir
la respuesta que deseamos con el siguiente cdigo:

server.on("/", [](){

server.send(200, "text/plain", "Hola mundo!");

});

El primer argumento de server.on es una cadena (/) que indica que estamos creando la
respuesta del servidor cuando el navegador solicita la URL raz. El ESP8266 nos permite
definir comportamientos diferentes para subdirectorios de la URL, y as podramos
configurar diferentes respuestas para /sub-url-1, /sub-url-2, etc.

El segundo argumento de server.on es una funcin. Podemos introducir un puntero a una


funcin ya creada (lo vemos ms adelante) o introducir directamente el cdigo que
queremos ejecutar de la forma [](){ MI_CODIGO; }. En este caso como es slo una
sentencia hemos elegido el ltimo mtodo.
Cuando el navegador se conecte al ESP8266 se va a ejecutar ese cdigo que hemos puesto
dentro de server.on, y que en este caso es una llamada a la funcin server.send, que lo que
hace es responder al navegador. Para ello, hay que darle tres argumentos:

Cdigo de respuesta: es un cdigo que se utiliza en el protocolo


HTTP para indicar diferentes eventos en las conexiones.
Posiblemente te suene el 404 cuando das con un enlace roto, pues
el cdigo 200 es menos visible pero ms comn, es el que se
devuelve cuando s que se encuentra el contenido.

MIME-type: es un cdigo que indica el tipo de contenido que se


devuelve, puede ser texto, imagen

Respuesta: El contenido de la respuesta en s, en este caso tan


solo queremos responder un Hola mundo! de prueba.

Hecho esto iniciamos el servidor con:

server.begin();

Y en la funcin loop() ya podemos empezar a escuchar las conexiones entrantes:

void loop(void){

server.handleClient();

Prueba que todo funciona


Sube el programa a tu placa con ESP8266, puedes echar un vistazo a este post anterior para
ver cmo se hace.

Para acceder al servidor web necesitamos conocer su IP. Mi mtodo preferido es entrar en
la web de configuracin del router y buscarlo en la lista de dispositivos conectados, pero, si
no puedes hacerlo as, tambin puedes incluir el monitor serie en tu sketch para que mande
esta informacin a Arduino IDE. Para ello inicializa el monitor serie y al final
de setup() incluye la lnea Serial.println(WiFi.localIP());.
Abre tu navegador favorito, teclea la IP del ESP8266 y tiene que aparecerte algo como esto:

Incluso desde el
mvil!

Insertar la medicin de temperatura en la


respuesta del servidor web
Ya solo nos queda conectar el DS18B20 y mostrar la temperatura en el servidor web.

Conectando el Dallas DS18B20 y el ESP-01


Lo primero que tenemos que hacer es conectar el Dallas DS18B20. En este caso lo he
conectado al pin GPIO2 del ESP-01.

Creando la respuesta del servidor web con la temperatura


del DS18B20
Para dar respuestas ms complejas que un Hola mundo! lo mejor es crear una funcin
aparte que podamos llamar cada vez que haya una solicitud al servidor web. Voy a crear
una funcin que recoja la temperatura del Dallas DS18B20 y la introduzca en la cadena de
respuesta del servidor. Para ello, antes de setup(), podemos escribir:

void respondeTemperatura() {

String respuesta = "Temperatura: "; // Respuesta del servidor

sensors.requestTemperatures(); // Solicita las temperaturas

respuesta += sensors.getTempCByIndex(0); // Aade la temperatura a la respuesta

respuesta += " C"; // Aade la unidad de medida a la respuesta

server.send(200, "text/plain", respuesta); // Enva la respuesta

No voy a entrar en detalles de cmo se utiliza el Dallas DS18B20 en Arduino IDE para no
repetirme alargar innecesariamente el post.
Una vez hecha la funcin, donde antes tenamos:

server.on("/", [](){

server.send(200, "text/plain", "Hola mundo!");

});

Ahora tendremos un simple server.on("/", respondeTemperatura);.

El sketch completo
Como no vamos a entrar en detalles de cmo se utiliza el Dallas DS18B20 en Arduino IDE,
y ya tenemos una idea de cmo funciona el servidor web en el ESP8266, deberamos ser
capaces de entender el cdigo completo del sketch:
#include <ESP8266WiFi.h>

#include
#include
#include
#include

<WiFiClient.h>
<ESP8266WebServer.h>
<OneWire.h>
<DallasTemperature.h>

// El bus de datos del Dallas est en el pin 2


#define ONE_WIRE_BUS 2

// Crea un objeto de la clase ESP8266WebServer


ESP8266WebServer server(80);

// Crea un objeto OneWire para comunicar con dispositivos OneWire (no solo Dallas
DS18B20)
OneWire oneWire(ONE_WIRE_BUS);

// Crea un objeto de la clase DallasTemperature


DallasTemperature sensors(&oneWire);

const char* ssid = "FABRICA DIGITAL";


const char* password = "Jay7FUF0;";

/*
* Funcin de respuesta del servidor web.
* Responde con la temperatura de la forma:
* "Temperatura: 25 C"
*/
void respondeTemperatura() {
String respuesta = "Temperatura: "; // Respuesta del servidor
sensors.requestTemperatures(); // Solicita las temperaturas
respuesta += sensors.getTempCByIndex(0); // Aade la temperatura a la respuesta

respuesta += " C"; // Aade la unidad de medida a la respuesta

server.send(200, "text/plain", respuesta); // Enva la respuesta


}

void setup(void){
Serial.begin(9600); // No necesitamos el monitor serie, pero ayuda a encontrar la IP del
ESP8266
WiFi.begin(ssid, password); // Conectamos al WiFi

while (WiFi.status() != WL_CONNECTED) {


delay ( 500 ); // Es necesaria una espera hasta conectar
}

server.on("/", respondeTemperatura); // Configura el servidor con la funcin de respuesta


creada antes

server.begin(); // Inicializacin del servidor


sensors.begin(); // Inicializacin del Dallas DS18B20

Serial.println(WiFi.localIP()); // Imprime la IP del ESP8266


}

void loop(void){
server.handleClient(); // Espera solicitudes de los navegadores
}
view rawESP8266-WebServer-DallasDS18B20.ino hosted with by GitHub

Probando que el nodo sensor funciona y nos responde con


la temperatura
Sube el sketch, busca la IP de tu nodo sensor y al acceder con tu navegador deberas tener
una respuesta parecida a esta:

Funciona! Ten en cuenta que la respuesta es una web que generamos en el momento de la
solicitud y que la temperatura no cambia en nuestro navegador automticamente. Tendrs
que recargar la pgina para actualizar su valor.

Qu proyecto vas a hacer con tu ESP8266? Cuntanoslo en los comentarios!


No te funciona? pregunta a nuestra comunidad maker en nuestro recin estrenado foro de
Arduino. Estaremos encantados de ayudarte!

Das könnte Ihnen auch gefallen