Ir al contenido principal
Todas las coleccionesGuías de desarrollador
Rastrea la Estación Espacial Internacional con Ubidots y Python
Rastrea la Estación Espacial Internacional con Ubidots y Python

Aprende a trabajar con coordenadas GPS utilizando la API de Ubidots y Python.

Sergio M avatar
Escrito por Sergio M
Actualizado hace más de una semana

En este tutorial aprenderemos a rastrear la ubicación GPS de la Estación Espacial Internacional (ISS) utilizando Python y Ubidots. Estaremos consultando este servicio hecho posible por Nathan Bergey, que actualizará la nube de Ubidots con la posición de la ISS en tiempo real. Luego, con los datos de posición en bruto proporcionados, exploraremos cómo medir distancias y triangular ubicaciones con el software en la nube de Ubidots.

¡Envía datos a la nube de Ubidots y crea un mapa en tu Dashboard para rastrear la Estación Espacial Internacional en tiempo real!

Desde el Terminal de tu Computadora

Requests: HTTP para Humanos

Requests es una biblioteca popular de Python que simplifica la realización de solicitudes HTTP. Para comenzar, instalaremos los paquetes de Python usando pip:

$ pip install requests

Enviando datos a Ubidots para visualización

Crea y ejecuta un script de Python en el terminal de tu computadora:

$ nano iss_tracking_ubidots.py

Luego copia y pega el siguiente código en tu terminal; asignando tu TOKEN de Ubidots y las coordenadas de ubicación donde se indica en el código. Para más información, consulta la Referencia de la API REST de Ubidots.

NOTA: Este script solo rastrea la posición de la ISS y utiliza una fórmula estándar para calcular su distancia a un punto específico en la tierra. No refleja oportunidades de avistamiento reales, ya que esto depende más de variables climáticas y de tiempo que simplemente de la proximidad (es decir, ubicación relativa a ti).

import requestsimport timefrom math import *TOKEN = 'xxxxxxxx'  # Asigna tu TOKEN de UbidotsDEVICE_LABEL = 'iss'  # Asigna la etiqueta del dispositivo deseadaVARIABLE_LABEL = "distance"BASE_URL = 'http://industrial.api.ubidots.com/api/v1.6/devices/'# Asigna tus coordenadas de hogarLAT_HOME = 42.361145LNG_HOME = -71.057083def get_iss_position():    # Obtener la posición actual de la ISS    req_iss = requests.get('http://api.open-notify.org/iss-now.json')    dict = req_iss.json()    lat_lng = dict['iss_position']    # guardar la posición actual de la ISS en nuevas variables    lat_iss = float(lat_lng['latitude'])    lng_iss = float(lat_lng['longitude'])    return lat_iss, lng_issdef deg2rad(deg):    return deg * (pi/180)def getDistance(lat_iss, lng_iss, lat_home, lng_home):    R = 6371  # Radio de la tierra en km    dLat = deg2rad(lat_home-lat_iss)  # deg2rad abajo    dLng = deg2rad(lng_home-lng_iss)    a = sin(dLat/2) * sin(dLat/2) + cos(deg2rad(lat_iss)) * \        cos(deg2rad(lat_home)) * sin(dLng/2) * sin(dLng/2)    c = 2 * atan2(sqrt(a), sqrt(1-a))    d = R * c  # Distancia en km a Casa    return ddef build_payload(variable_label, value, lat_iss, lng_iss):    # Construir la carga útil a enviar    payload = {variable_label: value, "position": {        "value": 1, "context": {"lat": lat_iss, "lng": lng_iss}}}    return payloaddef send_ubidots(device_label, payload):    # Hacer la solicitud HTTP a Ubidots    url = "{0}{1}/?token={2}".format(BASE_URL, device_label, TOKEN)    status = 400    attempts = 0    while status >= 400 and attempts <= 5:        req = requests.post(url, json=payload)        status = req.status_code        attempts += 1    response = req.json()    return responsedef main(device_label, variable_label, lat_home, lng_home):    # Obtener la posición actual de la ISS    lat_iss, lng_iss = get_iss_position()    # Calcular la distancia en KM a Casa    distance = getDistance(lat_iss, lng_iss, lat_home, lng_home)    distance = round(distance, 1)    # Construir la carga útil a enviar    payload = build_payload(variable_label, distance, lat_iss, lng_iss)    # Enviar la solicitud HTTP a Ubidots    response = send_ubidots(device_label, payload)    return responseif __name__ == '__main__':    while True:        try:            response = main(DEVICE_LABEL, VARIABLE_LABEL, LAT_HOME, LNG_HOME)            print("respuesta json del servidor: \n{0}".format(response))        except:            pass        time.sleep(1)

Una vez que el código se haya completado con tu TOKEN de Ubidots y coordenadas, presiona CONTROL + O y ENTER para guardar. Para salir del editor de Python, presiona CONTROL + X y regresa al terminal de la computadora.

NOTA: Este script está rastreando la posición de la ISS y utilizando una fórmula estándar para calcular su distancia a un punto específico en la tierra. Esto no reflejará oportunidades de avistamiento reales, ya que depende de más que simplemente la proximidad (es decir, la hora del día y el clima).

Ahora, de vuelta en el terminal de la computadora, ejecutemos el script y confirmemos nuestro trabajo. Pega y ejecuta el siguiente script en el terminal de tu computadora.

python iss_tracking_ubidots.py


Si tiene éxito, tu terminal comenzará a informar respuestas del servidor de inmediato.


Para visualizar tu trabajo en Ubidots, ve a la pestaña de Gestión de Dispositivos de tu cuenta y visualiza el dispositivo creado :)

¿Ha quedado contestada tu pregunta?