
Arduino Mega y Python: comenzamos la comunicación con nuestra estación meteorológica
Después de varias semanas construyendo nuestra estación meteorológica para el Proyecto Eclipse 2026, ha llegado el momento de dar un paso muy importante: comunicar Arduino con Python.
Aunque inicialmente pensamos utilizar una segunda placa ESP32 para enviar los datos a Internet, finalmente hemos optado por una solución mucho más flexible y potente.
El ordenador será el auténtico centro de control de la estación.
Arduino continuará realizando las tareas que mejor sabe hacer:
- Leer todos los sensores.
- Guardar una copia de seguridad en la tarjeta SD.
- Enviar todos los datos mediante el puerto serie.
Por su parte, Python será el encargado de:
- Leer continuamente los datos enviados por Arduino.
- Almacenarlos en el ordenador.
- Publicarlos automáticamente en ThingSpeak.
- Dibujar gráficas en tiempo real.
- Servir de base para desarrollar una interfaz gráfica completa.
Para desarrollar todo el software hemos elegido PyCharm, uno de los mejores entornos de desarrollo para Python.
En este primer contacto únicamente nos hemos centrado en establecer la comunicación serie entre ambos dispositivos utilizando la librería pySerial.
La instalación resulta muy sencilla:
pip install pyserial
Una vez instalada la librería, únicamente tenemos que abrir el puerto serie correspondiente al Arduino y comenzar a leer las líneas de datos que éste envía periódicamente.
El siguiente paso será interpretar esos datos y convertir nuestro ordenador en una auténtica estación meteorológica capaz de visualizar y publicar toda la información del eclipse en tiempo real.
Código Python utilizado
import serial
PUERTO = "COM5" # Cambiar por el puerto correspondiente
VELOCIDAD = 115200
arduino = serial.Serial(PUERTO, VELOCIDAD, timeout=1)
print("Esperando datos...\n")
while True:
linea = arduino.readline().decode(errors="ignore").strip()
if linea.startswith("DATOS,"):
print(linea)
import serial
PUERTO = "COM3"
VELOCIDAD = 115200
arduino = serial.Serial(PUERTO, VELOCIDAD, timeout=1)
print("Esperando datos...\n")
while True:
linea = arduino.readline().decode(errors="ignore").strip()
if linea.startswith("DATOS,"):
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])
voltiosUV = float(datos[8])
print("--------------------------------")
print("Temperatura:", temperatura)
print("Humedad:", humedad)
print("Presión:", presion)
print("UV:", uv)



