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