Ir al contenido principal
Todas las coleccionesConecta tus dispositivos
Conectar la Raspberry Pi con Ubidots
Conectar la Raspberry Pi con Ubidots

Aprende cómo configurar la Raspberry Pi utilizando Wi-Fi o Ethernet y cómo enviar datos a Ubidots.

Sergio M avatar
Escrito por Sergio M
Actualizado hace más de 2 meses

Raspberry Pi se ha convertido en un dispositivo ampliamente utilizado, no solo para prototipos y fines educativos, sino también para proyectos de producción dentro de las empresas.

Además de su pequeño tamaño, bajo costo y sistema operativo Linux completamente operativo, la mayor diferencia con tu PC de escritorio radica en su capacidad para interactuar con otros periféricos a través de pines GPIO (General Purpose Input/Output Pins).

Esto te permite codificar aplicaciones de hardware bastante robustas sin tener que ser un experto en electrónica embebida.

Al final de esta guía, podrás leer y enviar valores de datos desde tu Pi a Ubidots.

Requisitos

Para completar este tutorial, necesitarás:

  • Una Raspberry Pi conectada a Internet

Configuración

Esta guía asume que tu Raspberry Pi ha sido configurada y ya está conectada a Internet. Para aprender cómo hacer esto, te sugerimos seguir esta guía de inicio rápido de la Raspberry Pi Foundation.

Si estás utilizando un dongle WiFi, te sugerimos usar Wicd para gestionar tu conexión WiFi.

Actualizando Repositorios e Instalando Bibliotecas

Actualizar repositorios apt-get:

$ sudo apt-get update$ sudo apt-get upgrade

Requests: HTTP para Humanos

Requests es una biblioteca popular de Python que simplifica la realización de solicitudes HTTP desde cualquier script de Python que se puede ejecutar en la terminal de tu computadora o en cualquier dispositivo Linux embebido como la Raspberry Pi.

Para instalar la biblioteca, ejecuta el siguiente comando en la Terminal de Raspberry Pi:

$ pip install requests

Enviar un valor a Ubidots

Vamos a crear un script de Python usando tu editor de texto favorito. Usaremos “nano” en este caso. Este script envía un valor aleatorio a Ubidots, pero se puede adaptar fácilmente para enviar valores de entradas digitales en tu Raspberry Pi, o incluso lecturas analógicas al usar escudos especiales.

Crear script de Python

$ nano ubi_test.py

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

import timeimport requestsimport mathimport randomTOKEN = "..."  # Pon tu TOKEN aquíDEVICE_LABEL = "machine"  # Pon la etiqueta de tu dispositivo aquí VARIABLE_LABEL_1 = "temperature"  # Pon la etiqueta de tu primera variable aquíVARIABLE_LABEL_2 = "humidity"  # Pon la etiqueta de tu segunda variable aquíVARIABLE_LABEL_3 = "position"  # Pon la etiqueta de tu tercera variable aquídef build_payload(variable_1, variable_2, variable_3):    # Crea dos valores aleatorios para enviar datos    value_1 = random.randint(-10, 50)    value_2 = random.randint(0, 85)    # Crea coordenadas GPS aleatorias    lat = random.randrange(34, 36, 1) + \        random.randrange(1, 1000, 1) / 1000.0    lng = random.randrange(-83, -87, -1) + \        random.randrange(1, 1000, 1) / 1000.0    payload = {variable_1: value_1,               variable_2: value_2,               variable_3: {"value": 1, "context": {"lat": lat, "lng": lng}}}    return payloaddef post_request(payload):    # Crea los encabezados para las solicitudes HTTP    url = "http://industrial.api.ubidots.com"    url = "{}/api/v1.6/devices/{}".format(url, DEVICE_LABEL)    headers = {"X-Auth-Token": TOKEN, "Content-Type": "application/json"}    # Realiza las solicitudes HTTP    status = 400    attempts = 0    while status >= 400 and attempts <= 5:        req = requests.post(url=url, headers=headers, json=payload)        status = req.status_code        attempts += 1        time.sleep(1)    # Procesa los resultados    print(req.status_code, req.json())    if status >= 400:        print("[ERROR] No se pudo enviar datos después de 5 intentos, por favor verifica \            tus credenciales de token y la conexión a Internet")        return False    print("[INFO] solicitud realizada correctamente, tu dispositivo está actualizado")    return Truedef main():    payload = build_payload(        VARIABLE_LABEL_1, VARIABLE_LABEL_2, VARIABLE_LABEL_3)    print("[INFO] Intentando enviar datos")    post_request(payload)    print("[INFO] terminado")if __name__ == '__main__':    while (True):        main()        time.sleep(1)

Una vez que el código ha sido compilado con tu TOKEN de Ubidots, presiona CONTROL + O y ENTER para guardar el archivo - asignando un nombre de archivo al guardar (asegúrate de recordar el ".py" en el nombre de tu archivo). Una vez que el script esté guardado, sal del editor de Python presionando CONTROL + X y regresa a la terminal de la computadora.

Ejecutar el script

$ python ubi_test.py

Obtener un valor de Ubidots

Crea un script de Python usando tu editor de texto favorito. Usaremos “nano” en este caso.

Crear script de Python

$ nano ubi-test-get.py

Copia y pega el siguiente código en tu terminal; asignando tu TOKEN de Ubidots donde se indica en el código. Además, debes asignar la etiqueta del dispositivo y la etiqueta de la variable deseadas para obtener la información deseada.

Para más información, consulta la Referencia de la API REST de Ubidots.

import requestsimport randomimport timeTOKEN = "xxxxxxxx" # Asigna tu Token de UbidotsDEVICE = "xxxxxxxx" # Asigna la etiqueta del dispositivo para obtener la variableVARIABLE = "xxxxxxxx" # Asigna la etiqueta de la variable para obtener el valor de la variableDELAY = 1  # Retraso en segundosdef get_var(device, variable):    try:        url = "http://industrial.api.ubidots.com/"        url = url + \            "api/v1.6/devices/{0}/{1}/".format(device, variable)        headers = {"X-Auth-Token": TOKEN, "Content-Type": "application/json"}        req = requests.get(url=url, headers=headers)        return req.json()['last_value']['value']    except:        passif __name__ == "__main__":    while True:        print(get_var(DEVICE, VARIABLE))        time.sleep(DELAY)

Ejecutar el script

$ python ubi-test-get.py


¿Ha quedado contestada tu pregunta?