
De Arduino a Internet: nuestra estación meteorológica ya publica datos en ThingSpeak utilizando Python
Después de varias semanas diseñando y construyendo nuestra estación meteorológica para el Proyecto Eclipse 2026, hemos conseguido uno de los hitos más importantes del proyecto: publicar automáticamente todas las medidas en Internet.
Inicialmente habíamos planteado utilizar una segunda placa ESP32 para conectarnos mediante WiFi, pero finalmente hemos optado por una solución mucho más potente, flexible y fácil de ampliar.
Ahora el auténtico cerebro del sistema es el ordenador.
Arduino Mega continúa realizando aquello para lo que fue diseñado:
- Leer todos los sensores.
- Guardar una copia de seguridad en la tarjeta SD.
- Enviar continuamente las medidas mediante el puerto serie.
Mientras tanto, Python se encarga de:
- Recibir los datos enviados por Arduino.
- Interpretar cada una de las medidas.
- Publicarlas automáticamente en ThingSpeak.
- Preparar el sistema para futuras gráficas en tiempo real.
- Servir como base de la futura interfaz gráfica de la estación meteorológica.
Para desarrollar toda esta parte del proyecto hemos utilizado PyCharm, uno de los entornos de desarrollo más completos para Python.
La comunicación entre Arduino y Python se realiza mediante la librería pySerial, mientras que el envío de datos a ThingSpeak utiliza la librería requests.
La instalación de ambas resulta muy sencilla:
pip install pyserial
pip install requests
Gracias a esta nueva arquitectura conseguimos separar claramente las tareas de adquisición de datos de las de procesamiento y publicación, haciendo que el sistema sea mucho más robusto y sencillo de ampliar en el futuro.
En las próximas entradas iremos incorporando una interfaz gráfica, gráficas en tiempo real, nuevas funciones de análisis e incluso herramientas de inteligencia artificial para estudiar automáticamente los datos registrados durante el eclipse.
import serial
import requests
import time
# =====================================
# CONFIGURACIÓN
# =====================================
PUERTO = "COM3" # Cambiar por el puerto del Mega
BAUDIOS = 115200
CHANNEL_ID = 3435298
WRITE_API_KEY = "PGYX6LNKM0EQZFA9"
URL = "https://api.thingspeak.com/update"
# =====================================
arduino = serial.Serial(PUERTO, BAUDIOS, timeout=1)
print("Puerto serie abierto.")
print("Esperando datos...\n")
ultimo_envio = 0
while True:
linea = arduino.readline().decode(errors="ignore").strip()
if not linea.startswith("DATOS,"):
continue
print(linea)
datos = linea.split(",")
temperatura = float(datos[1])
humedad = float(datos[2])
temperaturaBMP = float(datos[3])
presion = float(datos[4])
altitud = float(datos[5])
luz = int(datos[6])
uv = int(datos[7])
voltajeUV = float(datos[8])
# ThingSpeak gratuito:
# solo enviar cada 20 segundos
if time.time() - ultimo_envio >= 20:
respuesta = requests.get(
URL,
params={
"api_key": WRITE_API_KEY,
"field1": temperatura,
"field2": humedad,
"field3": temperaturaBMP,
"field4": presion,
"field5": altitud,
"field6": luz,
"field7": uv,
"field8": voltajeUV
}
)
if respuesta.text != "0":
print(">>> Datos enviados a ThingSpeak")
ultimo_envio = time.time()
else:
print(">>> Error enviando datos")

Etiqueta:adquisición de datos, Arduino IDE, Arduino Mega, Arduino Mega 2560, Arduino y Python, BMP280, ciencia ciudadana, comunicación serie, DHT22, eclipse solar, Estación meteorológica, estación meteorológica Arduino, Internet de las Cosas, iot, Monitorización ambiental, programación Python, Proyecto Eclipse 2026, Puerto serie, pycharm, pySerial, python, requests, sensor de luminosidad, Sensor UV, sensores, steam, stem, tarjeta SD, ThingSpeak


