¿Alguna vez has querido tener tu propia estación meteorológica en casa? Con el ESP8266, un microcontrolador de bajo costo, ahora es posible. En este artículo te enseñaremos cómo crear una estación meteorológica inalámbrica que registre datos en Excel. ¡Sigue leyendo para descubrir cómo hacerlo!
En este proyecto estableceremos comunicación inalámbrica entre dos ESP y enviaremos datos de tres sensores a una hoja de cálculo de Excel. Este tutorial muestra una estación meteorológica inalámbrica con registro de datos que puede implementar en su hogar.
Antes de continuar leyendo este proyecto, complete los siguientes tutoriales:
- Comenzando con el ESP8266
- Cómo hacer que dos ESP8266 hablen
- Cómo flashear tu ESP8266 con NodeMCU
Si te gusta el módulo ESP WiFi y quieres crear más proyectos, puedes descargar mi libro electrónico “Domótica con ESP8266” aquí. ¡Vamos a empezar!
Resumen
Aquí hay un diagrama que describe exactamente cómo funciona todo en conjunto:
Lista de artículos
Aquí está el hardware que necesita para construir la estación meteorológica:
- Recomendado: 2x ESP-12E leer Las mejores placas de desarrollo Wi-Fi ESP8266
- Alternativa: 2xESP-201 + 1x programador FTDI
- 1xDS18B20
- 1x placa de pruebas
- 3x pulsadores
- 3x resistencias de 10k ohmios
- 1x resistencia de 4700 ohmios
- 1x potenciómetro de 10k ohmios
Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!
DS18B20 – Sensor de temperatura digital de un solo cable
En este proyecto usaremos esto Sensor de temperatura digital de un solo cable DS18B20. Ahora, antes de pasar a la parte de programación, aprendamos cómo conectar nuestro sensor de temperatura.
El DS18B20 puede funcionar de 3,0 V a 5,5 V, por lo que simplemente puede conectar su pin GND a GND y el pin VDD a 3,3 V desde ESP8266.
Luego conecte el pin DQ a IO04 en el ESP8266. Para subirlo a 3,3 V se requiere una resistencia pull-up de 4K7 ohmios en el pin DQ.
Leer el valor ADC
Usaremos el pin ADC para leer un valor analógico, y cuando nos referimos al pin ESP ADC, a menudo escuchará estos diferentes términos indistintamente:
- ADC (convertidor analógico-digital)
- TRACTOR
- Pin6
- A0
- pin analógico 0
Todos estos términos se refieren al mismo pin en el ESP8266 Esto se resaltará en la siguiente sección (consulte este artículo para obtener más información sobre el pin ADC).
Actualmente, TOUT (Pin6) tiene una precisión de 10 bits y su rango de voltaje de entrada es de 0 a 1,0 V cuando TOUT está conectado a un circuito externo.
Acceda al pin analógico ESP8266
Con el ESP-201 Acceder al ADC es muy simple: simplemente conecte un cable de puente al pin resaltado en la imagen a continuación.
Flashear ambos ESP con NodeMCU
Usaremos el firmware NodeMCU, por lo que deberá actualizar sus ESP con el firmware NodeMCU.
Descargue el IDE de ESPlorer
Recomiendo usar ESPlorer IDE, un programa creado por 4refr0nt para cargar scripts a su ESP8266.
Siga estas instrucciones para descargar e instalar ESPlorer IDE:
1) haga clic aquí para descargar ESPlorer
2) Descomprime la carpeta
3) Ir a la carpeta principal
4) Ejecute ESPlorer.jar
5) Abre ESPlorer
Cargando un script a su ESP8266 (programador FTDI de 3.3V)
Los esquemas para subir scripts a un ESP son muy simples. Todo lo que necesita hacer es crear una conexión en serie entre su programador FTDI y su ESP8266 (repita los esquemas a continuación para el cliente y el servidor).
Aquí están las conexiones:
- VCC – 3,3 V
- Tierra – Tierra
- Enviar recibir
- RX-TX
- GPIO 0-3,3V
- GPIO 15 – TIERRA
Escribe los scripts de tus clientes
Hay tres scripts que debes cargar en tu cliente ESP8266:
Comience cargando el siguiente script y nombrándolo ContadorMax.lua. Es solo un número numérico 1 que cuenta un poco y ayuda a restablecer su placa si se pierde la conexión al servidor ESP.
1
Cuando subes el ContadorMax.lua Se espera que el script dé el siguiente error:
Para leer la temperatura en ºC, sube o sube el script a continuación Este script muestra la temperatura en ºF. Asegúrate de guardar el archivo en tu ESP con el nombre ds18b20.lua.
--------------------------------------------------------------------------------
-- DS18B20 one wire module for NODEMCU
-- LICENCE: http://opensource.org/licenses/MIT
-- Vowstar <[email protected]>
-- Dramatic simplification: Peter Scargill
--------------------------------------------------------------------------------
-- Set module name as parameter of require
local modname = ...
local M = {}
_G[modname] = M
--------------------------------------------------------------------------------
-- Local used modules
--------------------------------------------------------------------------------
-- Table module
local table = table
-- String module
local string = string
-- One wire module
local ow = ow
-- Timer module
local tmr = tmr
-- Limited to local environment
setfenv(1,M)
--------------------------------------------------------------------------------
-- Implementation – you don’t get any shorter than this
--------------------------------------------------------------------------------
function readNumber(pin)
ow.setup(pin)
ow.reset(pin)
ow.write(pin, 0xCC, 1)
ow.write(pin, 0xBE, 1)
data = nil
data = ""
for i = 1, 2 do
data = data .. string.char(ow.read(pin))
end
t = (data:byte(1) + data:byte(2) * 256) / 16
if (t>100) then
t=t-4096
end
ow.reset(pin)
ow.write(pin,0xcc,1)
ow.write(pin, 0x44,1)
return t
end
-- Return module table
return M
Finalmente, cargue el script principal en su ESP y asígnele el nombre init.lua.
-- Yves Arbour wireless weather station project with data logging to Excel sheets with Things Gateway
-- code based on the following
-- Rui Santos - ESP8266 Client
-- DS18B20 one wire module for NODEMCU
-- Vowstar <[email protected]>
-- Peter Scargill
-- Wimp Weather Station by sparkfun Nathan Seidle
wifi.sta.disconnect()
wifi.setmode(wifi.STATION)
wifi.sta.config("test","12345678")
wifi.sta.connect()
print("Looking for a connection")
temp=0
function readds18b20sensor()
t=require("ds18b20.lua")
-- print(t.readNumber(2)) for debuging
temp = (t.readNumber(2)) --GPIO 04
end
winDirection=0
gpio.mode(0,gpio.INPUT)
function readWindDirection ()
windDirection = adc.read(0)
if (windDirection < 26) then windDirection=90 --E
--if (windDirection < 17) then windDirection=113 -- ESE
--elseif (windDirection < 21) then windDirection=68 -- ENE
--elseif (windDirection < 26) then windDirection=90 -- E
--elseif (windDirection < 36) then windDirection=158 -- SSE
elseif (windDirection < 43) then windDirection=135 --SE
--elseif (windDirection < 60) then windDirection=203 -- SSW
elseif (windDirection < 85) then windDirection=180 --S
--elseif (windDirection < 98) then windDirection=23 -- NNE
elseif (windDirection < 120) then windDirection=45 --NE
--elseif (windDirection < 170) then windDirection=248 -- WSW
elseif (windDirection < 210) then windDirection=225 -SW
--elseif (windDirection < 275) then windDirection=338 -- NNW
elseif (windDirection < 380) then windDirection=0 --N
--elseif (windDirection < 500) then windDirection=293 -- WNW
elseif (windDirection < 750) then windDirection=315 --NW
elseif (windDirection < 1005) then windDirection=270 --W
else windDirection=-1
end
end
irqPin = 1 --GPIO5
windSpeed = 0
windClicks = 0
lastWindCheck = 0
function debounce (func)
local delay = 100000
return function (...)
now = tmr.now()
now = now - lastWindCheck
if now < delay then return end
lastWindCheck = tmr.now()
return func (...)
end
end
function windSpeedIrq ()
windClicks = windClicks+1 * 10000000
print (windClicks)
end
function calcWindSpeed ()
local deltaTime = tmr.now () - lastWindCheck
windSpeed = windClicks / deltaTime
print(deltaTime)
windSpeed = windSpeed * 1492 /10000 -- Replace " *1492/10000 " with " *24/100 " for Km/h instead of Mp/h
windClicks = 0
lastWindCheck = tmr.now()
end
gpio.mode(irqPin,gpio.INT)
gpio.trig(irqPin,"down",debounce(windSpeedIrq))
file.open("counterMax.lua","r")
counter=(file.read())
file.close()
tmr.alarm(0, 2000, 1, function()
if(wifi.sta.getip()~=nil) then
tmr.stop(0)
print("Client IP Address:",wifi.sta.getip())
cl=net.createConnection(net.TCP, 0)
cl:connect(80,"192.168.4.1")
tmr.alarm(1, 5000, 1, function()
counter=counter+1
readds18b20sensor()
readWindDirection()
calcWindSpeed()
print (temp)
print(windSpeed)
-- Next is the properly formated string that Things Gateway needs to show Date,Time,Wind speed,Wind direction and Temp.
cl:send("XLS,write,Example,A"..counter..",%date%nXLS,write,Example,B"..counter..",%time%nXLS,write,Example,C"..counter..","..windSpeed.."nXLS,write,Example,D"..counter..","..windDirection.."nXLS,write,Example,E"..counter..","..temp)
cl:on("disconnection",function(reconnect)
file.open("counterMax.lua","w+")
file.writeline(counter)
file.close()
end)
end)
else
print("Connecting...")
end
end)
function reconnect()
wifi.setmode(wifi.STATION)
wifi.sta.config("test","12345678")
wifi.sta.connect()
end
Circuito cliente
Siga este circuito para crear su cliente ESP. Si está utilizando el ESP-12, puede ver los esquemas aquí:
El interruptor derecho, conectado a IO05, se utiliza para simular la velocidad del viento. Actualmente, el programa no proporciona la velocidad del viento en tiempo real, sino un valor medio de los últimos 5 segundos.
Así que no importa qué tan rápido presiones el interruptor correcto. Al presionar el interruptor derecho 5 veces en el período de muestreo de 5 segundos, se obtendrá un promedio de una vez por segundo, lo que da 1,492 MPH o 2,4 KMH (en este punto estamos usando la versión entera de NodeMCU, por lo que obtienes 1492 MPH y 24 KMH. Tienes que dividir por 100 y 10 en la tabla.
Escribiendo el script de tu servidor
Cargue el siguiente script en su ESP y asígnele un nombre init.lua.
-- Rui Santos - ESP8266 Server
-- Modified by Yves Arbour to ennable print string to go directly to an Excel sheet with Things Gateway
print("ESP8266 Server")
wifi.setmode(wifi.STATIONAP);
wifi.ap.config({ssid="test",pwd="12345678"});
print("Server IP Address:",wifi.ap.getip())
sv = net.createServer(net.TCP)
sv:listen(80, function(conn)
conn:on("receive", function(conn, receivedData)
--print("Received Data"..receivedData)
print(receivedData)-- string "Received Data" removed...
--Things Gateway ignores strings that do not start with proper command...
--XLS in this case for Excel sheet
end)
conn:on("sent", function(conn)
collectgarbage()
end)
end)
Cambio de servidor final
Siga este circuito para crear su servidor ESP. Si está utilizando el ESP-12, puede ver los esquemas aquí.
Creamos una PCB personalizada para el ESP-201. Aquí están los detalles:
- Cable amarillo: puede conectar GPIO 0 a GND para actualizar el firmware NodeMCU o a VCC para almacenar scripts en ESP
- GPIO15 está cableado a GND
- Botón de reinicio y resistencia pull-up de 10 K ohmios al pin RST (para reiniciar la placa, es necesario tirar del pin RST hacia abajo y luego volver a subirlo)
Poniendo todo junto
Encienda ambos ESP y asegúrese de que el servidor ESP todavía tenga comunicación en serie con su computadora, ya que así es como publicará los datos en su hoja de cálculo de Excel.
Descargar e instalar Things Gateway
Para este proyecto utilizamos Things Gateway, un software de Roberto Valgolio, para escribir datos en una hoja de cálculo de Excel y mostrar gráficos que se actualizan automáticamente en tiempo real.
Things Gateway es una aplicación para PC que conecta un microcontrolador y le permite:
- Recuperar datos de archivos de Excel
- Escribir archivos de Excel
- Escribir archivos de registro CSV
- Enviar correos electrónicos (si se cumplen ciertas condiciones)
- Mostrar valores y gráficos (los gráficos son independientes de Excel)
Things Gateway también puede conectar un GPS y mostrar en pantalla:
- Velocidad, rumbo, altitud y otra información de navegación.
- Seguimientos en tiempo real en Google Maps
Ir a Puerta de enlace de las cosas sitio web, descargue e instale el programa. Este proyecto fue probado con la versión Beta4.
Lanzando su aplicación Things Gateway
Iniciar la aplicación Things Gateway es muy fácil. Ir a Tu PC > Documentos > ThingsGateway y abre la aplicación.
Luego sigue estas instrucciones:
- Ir a configuración pestaña
- Elegir Puerto COM serie su servidor ESP8266
- Configurar el puerto serie velocidad A 9600
demostración
Abre esto Tiempo real Tabulador y seleccione De serie a Excel.
¡Debería aparecer una hoja de cálculo de Excel y sus datos deberían aparecer allí cada pocos segundos!
Sus datos se guardarán en la hoja de cálculo de Excel de muestra en esta carpeta:
Mejoras futuras
En este tutorial, configuramos un sistema básico para enviar datos de forma inalámbrica a una hoja de cálculo de Excel utilizando 2 ESP8266 y el software Things Gateway.
Utilice este ejemplo para explorar otras funciones de Things Gateway, como:
- Gráfico autoactualizable en tiempo real (no depende de Excel)
- Registro de datos en archivos CSV
- Envío automático de correo electrónico cuando se cumplen condiciones personalizadas (viento fuerte a tantos km/h, temperatura demasiado baja… advertencia de fallo del sistema de calefacción o congelador no lo suficientemente frío, etc.)
- Registro de datos en stream.txt, que se puede reproducir a velocidades de 0,1, 0,5, 1, 5, 10, 60 o 3600 veces más rápido.
- La ruta GPS también se puede transmitir en el mapa de Google a la velocidad real o 0,1, 0,5, 5, 10, 60 o 3600 veces más rápido.
Un mayor desarrollo también podría incluir:
- Otros sensores como el sensor de presión de aire bmp180
- Sensores de luz
- Sensor de humedad
- Cualquier otro sensor digital o analógico que utilice multiplexación.
Tenga en cuenta que Things Gateway está diseñado para usarse con placas Arduino, pero siempre que envíe la cadena correcta en serie, se puede usar con cualquier placa.
Espero que esta guía te haya resultado útil y muchas gracias a Yves Arbor por crear este proyecto.
¿Tiene alguna pregunta o comentario? Deja un comentario a continuación.
Gracias por leer. Si te gusta esta publicación, probablemente también te gustarán las siguientes. Así que apóyame suscribiéndote a mi blog y a mi página de Facebook.
ESP8266 – Estación meteorológica inalámbrica con registro de datos en Excel
En este proyecto vamos a establecer una comunicación inalámbrica entre dos ESPs y enviar datos de tres sensores a una hoja de Excel. Este tutorial muestra una estación meteorológica inalámbrica con registro de datos que puedes implementar en tu hogar.
Este proyecto es una colaboración entre Yves Arbour y Rui Santos.
Resumen
Aquí hay una Figura que describe exactamente cómo todo funciona en conjunto.
Lista de Piezas
Aquí está el hardware que necesitas para hacer la estación meteorológica:
- Recomendado: 2x ESP-12E
- Alternativa: 2x ESP-201 + 1x FTDI Programmer
- 1x DS18B20
- 1x Placa de pruebas (Breadboard)
- 3x Botones
- 3x Resistencias de 10k Ohm
- 1x Resistencia de 4700 Ohm
- 1x Potenciómetro de 10k Ohm
Puedes encontrar todas las piezas para tus proyectos al mejor precio en MakerAdvisor.com/tools.
DS18B20 – Sensor de Temperatura Digital de un solo cable
En este proyecto, vamos a utilizar el sensor de temperatura digital DS18B20 de un solo cable. Antes de entrar en la parte de programación, aprendamos cómo conectar nuestro sensor de temperatura.
El DS18B20 puede ser alimentado entre 3.0V y 5.5V, por lo que puedes simplemente conectar su pin de GND a GND y el pin de VDD a 3.3V del ESP8266.
Luego conecta el pin de DQ a IO04 en el ESP8266. Se requiere una resistencia de pull-up de 4k7 ohmios en el pin de DQ para llevarlo hasta 3.3V.
Leyendo el Valor ADC
Vamos a usar el pin ADC para leer un valor analógico. Al referirnos al pin ADC del ESP8266, a menudo escucharás estos términos intercambiables:
- ADC (Convertidor Analógico-Digital)
- TOUT
- Pin6
- A0
- Pin Analógico 0
Estos términos se refieren al mismo pin en el ESP8266 que se destaca en la siguiente sección.
Actualmente, TOUT (Pin6) tiene una precisión de 10 bits y su rango de voltaje de entrada es de 0 a 1.0V cuando TOUT está conectado a un circuito externo.
Accediendo al Pin Analógico del ESP8266
Con el ESP-201 es muy fácil acceder al ADC, simplemente conecta un cable puente al pin resaltado en la Figura.
Para más información sobre cómo implementar este proyecto, visita el siguiente enlace.
¡Qué interesante proyecto! Me encantaría aprender a hacer una estación meteorológica inalámbrica y poder ver los datos directamente en Excel. ¡Muy útil y práctico! ¡Gracias por compartir!