El Pytrack es un escudo habilitado para ubicación del módulo Pycom Expansion board y está diseñado específicamente para aplicaciones GPS como el seguimiento y monitoreo de activos. Este escudo se puede usar con cualquiera de sus módulos multi-red de Pycom, lo que le permite expandir sus módulos para incorporar el seguimiento GPS a través de Sigfox, LoRa, Wi-Fi, Bluetooth y LTE-M dual.
En esta guía, presentamos el escudo Pycom Pytrack conectado a un dispositivo Pycom SiPy. El SiPy es una placa de desarrollo multi-red (Sigfox, WiFi y BLE). Para más detalles, consulte la ficha técnica del SiPy. o consulte mis otros artículos sobre conectar su Pycom SiPy a Ubidots a través de Sigfox.
Requisitos
Cable micro-USB
Paso a Paso
Configuración del Hardware
Configuración de un Callback para enviar datos a Ubidots
Programando su Pytrack con Pymakr
1. Configuración del Hardware
Antes de comenzar, asegúrese de que su placa esté programada y actualizada completamente y correctamente:
Si esta es su primera vez trabajando con una placa Pycom, le recomendamos que consulte esta documentación de inicio para familiarizarse con las capacidades y especificaciones de su nueva placa.
Registro del SiPy con Sigfox
Para enviar un mensaje de Sigfox, necesita registrar su SiPy con el backend de Sigfox. Navegue a https://backend.sigfox.com/activate y luego seleccione Sigfox. Luego seleccione Pycom para continuar.
A continuación, deberá elegir el operador de Sigfox correcto para el país en el que activará su SiPy. Encuentre su país y seleccione el operador para continuar.
Luego ingrese su ID de Dispositivo y número PAC que se encuentran en el Dispositivo Pycom
Una vez que su dispositivo esté registrado en el backend de Sigfox, puede verificar su existencia en la sección Dispositivo. Captura de pantalla a continuación para referencia:
NOTA: No olvide conectar la antena a la placa. Si no lo hace, ¡Sigfox no podrá recibir mensajes de su dispositivo!
2. Configuración de un Callback para enviar datos a Ubidots
La gestión de los datos entre Sigfox y Ubidots utiliza un "Callback". El dispositivo Sigfox leerá los sensores y luego enviará los valores a Sigfox. Aquí, los datos se decodificarán utilizando la configuración de carga útil personalizada y luego los datos se retransmiten a Ubidots para visualización, almacenamiento y cálculo.
Ahora es el momento de configurar el callback. Vaya a la sección Dispositivo y haga clic en su dispositivo registrado:
A continuación, verifique la información de su dispositivo y seleccione "CALLBACKS" en el menú de la izquierda de la página, como se muestra a continuación:
Los callbacks de Sigfox le permiten informar datos a un sistema externo como Ubidots. Use los parámetros a continuación para enviar sus datos a la API de Ubidots.
Tipo:
DATA
-UPLINK
Canal:
URL
Configuración de carga útil personalizada:
lat::float:32:little-endian lng::float:32:little-endian
Patrón de URL:
https://industrial.api.ubidots.com/api/v1.6/devices/{device}
Usar método HTTP:
POST
Enviar SNI:
Deshabilitar
Encabezados:
x-auth-token
-{your_ubidots_token}
Tipo de Contenido:
application/json
Cuerpo:
{ "snr" : "{snr}", "avgSnr" : "{avgSnr}", "rssi" : "{rssi}", "position":{"value":1,"context":{"lat":"{customData#lat}","lng":"{customData#lng}"}}}
NOTA IMPORTANTE: El campo "configuración de carga útil personalizada" le permite especificar cómo le gustaría que Sigfox decodificara la carga útil de su dispositivo. Podría, por ejemplo, desear decodificar un byte entrante como un entero sin signo. Un ejemplo de esto es la primera línea del ejemplo a continuación. Como desarrolladores, por favor codifiquen esta sección como lo consideren adecuado.
int1::uint:8 // Entero sin signo de 8 bits con nombre int1str::char:6 // Cadena de caracteres de 6 letras con nombre strb1::bool:7 // Booleano basado en el valor del bit en la posición 7 con nombre b1
Arriba, donde "int1" es el nombre del valor, "uint:8" especifica el tipo de dato y el número de bits, respectivamente. Para saber más sobre cómo construir la configuración de carga útil personalizada, consulte la documentación de Sigfox presionando el ícono de pregunta en la parte superior derecha de la página mostrada.
NOTA IMPORTANTE DE DESPLIEGUE: Ubidots y Sigfox se comunican a través de URL o Batch URL (utilizado para grandes despliegues). Este tutorial explica el canal estándar de URL. Si tiene una red de sensores a gran escala, comuníquese con support@ubidots.com para recibir información adicional sobre integraciones de Batch URL.
Para verificar si el mensaje se recibe en Sigfox, vaya a la sección Dispositivo, luego seleccione el ID del dispositivo:
A continuación, en el menú de la izquierda seleccione "mensaje" para visualizar los mensajes recibidos:
Tenga en cuenta que el "customData#..." del campo cuerpo contendrá la información real del sensor, en el ejemplo mostrado como "lat" y "lng". Si desea enviar más valores, debe asignarlos en la configuración de carga útil personalizada, luego asignarlos en el cuerpo siguiendo la misma estructura.
Siguiendo esta guía, configuramos dos variables "lat" y "lng" como float; puede usar cualquier formato deseado, pero asegúrese de que el dispositivo esté enviando valores a Sigfox utilizando el mismo formato asignado por usted en la configuración de carga útil personalizada.
Después de configurar el callback, su configuración del backend de Sigfox debería verse así:
Una vez que pueda verificar el callback, presione "OK".
3. Programando su Pytrack con Pymakr
Configurar el Pytrack con el Plugin Pymakr - (Atom)
Pycom desarrolló una serie de herramientas conocidas como Plugins Pymakr que le permiten conectar cualquier programa con su dispositivo Pycom. Si esta es su primera vez con Pymakr, consulte la documentación oficial de Pycom y siga todos los pasos proporcionados. Una vez que haya terminado con la "Configuración Inicial", podrá comunicarse con su Pycom SiPy utilizando el Plugin Pymakr.
1. Abra el editor Atom y active el plugin Pymakr.
2. Conecte la placa con el Pymakr (editor Atom). Una vez que la placa esté conectada, verá el mensaje "conectado" en el estado. Los dispositivos Pycom también se pueden acceder utilizando su consola, como se muestra a continuación.
NOTA IMPORTANTE: Este plugin nos permite conectar la placa a través de Serial USB REPL (UART) y a través de Telnet REPL. Basado en nuestra experiencia durante la integración, recomendamos usar Telnet.
Preguntas Frecuentes y Solución de Problemas: Si la placa está conectada a través de Serial USB y no puede acceder a la placa a través de la consola, conéctela al Pymakr por Telnet; consulte esta guía para obtener detalles adicionales sobre cómo establecer una conexión adecuada.
3. Cree un nuevo directorio llamado "ubidots" para gestionar los códigos y bibliotecas. Una vez creado el directorio, en el editor Atom seleccione Abrir un Proyecto, busque el directorio "ubidots," y ábralo.
4. En el archivo "ubidots" vamos a gestionar las bibliotecas y los códigos main/boot. Por favor, consulte y siga la estructura a continuación para construir su proyecto correctamente:
> ubidots - boot.py - main.py > lib - L76GNSS.py - LIS2HH12.py - pytrack.py
Primero, vamos a agregar la carpeta para las bibliotecas. Haga clic derecho en la carpeta "ubidots" y seleccione "Nueva carpeta", y asigne "lib" como nombre.
Ahora, vamos a agregar los archivos main y boot:
Haga clic derecho en la carpeta "ubidots" y seleccione "Nuevo Archivo", asigne "boot.py" como el nombre
Repita los pasos anteriores para crear el main llamado "main.py":
Una vez que ambos archivos estén creados, la estructura de su proyecto se verá como sigue:
5. Por último, debemos agregar los archivos de bibliotecas de Pytrack en la carpeta "lib". Usando el Repositorio de Pycom, descargue las Bibliotecas de Pytrack y guárdelas en la carpeta "lib". La estructura final de su proyecto se verá como sigue si se ejecuta correctamente:
Ahora es el momento de codificar su Pytrack
1. Copie y pegue el código a continuación en el archivo "boot.py":
from machine import UARTimport machineimport osuart = UART(0, baudrate=115200)os.dupterm(uart)machine.main('main.py')
Suba y guarde su código en el "boot.py" file.
2. A continuación, copie/pegue y suba y guarde el código a continuación en el archivo "main.py":
from network import Sigfoximport socketimport structimport timefrom L76GNSS import L76GNSSfrom pytrack import Pytrackinit_timer = time.time()# Constructorpy = Pytrack()l76 = L76GNSS(py, timeout=60)# init Sigfox Zone for RCZ1sigfox = Sigfox(mode=Sigfox.SIGFOX, rcz=Sigfox.RCZ4)# create a Sigfox sockets = socket.socket(socket.AF_SIGFOX, socket.SOCK_RAW)# make the socket blockings.setblocking(True)# configure it as DOWNLINK specified by 'True's.setsockopt(socket.SOL_SIGFOX, socket.SO_RX, False)while(True): # time-counter configurations final_timer = time.time() diff = final_timer - init_timer # save the coordinates in a new variable coord = l76.coordinates() # verify the coordinates received if coord == (None, None): print("Getting Location...") continue # time established to send the next Sigfox message # diff <= 900 takes 15 min approximately to send the next message if diff <= 900 and coord != (None, None): print("Waiting for send the next Sigfox message") continue # send the Coordinates to Sigfox s.send(struct.pack("<f", float(coord[0]))+struct.pack("<f", float(coord[1]))) print("Coordinates sent -> lat: " + str(coord[0]) + ", lng: " + str(coord[1])) # reset the timer init_timer = final_timer
Guarde su código una vez que lo haya subido al "main.py" file.
3. A continuación, sincronice el proyecto. Presione el icono "Sync" desde la consola, o seleccione Paquetes > Pymakr > Sincronizar proyecto.
NOTA: Como puede ver en la última parte del código "main.py", los valores se envían siguiendo el mismo formato asignado en la configuración de carga útil personalizada.
Código:
s.send(struct.pack("<f", float(coord[0]))+struct.pack("<f", float(coord[1])))
Configuración de carga útil personalizada (Sigfox):
lat::float:32:little-endian lng::float:32:little-endian
Tenga en cuenta que la "Etiqueta de API del Dispositivo" será la misma que el campo Sigfox {device}.
Si desea cambiar los nombres de su dispositivo y variable a uno más amigable, consulte este artículo del Centro de Ayuda de Ubidots.
4. Una vez que el proyecto esté correctamente sincronizado, debe esperar un par de minutos para que el módulo GPS capte la latitud y longitud. El código proporcionado le da al módulo GNSS 60 segundos de tiempo de espera para captar las coordenadas; si el dispositivo no puede transmitir las coordenadas durante el tiempo especificado, recibirá el mensaje "Obteniendo ubicación..." una vez por minuto hasta que se reciba la ubicación del dispositivo. A continuación se muestra un ejemplo típico de esta experiencia de "Obteniendo ubicación".
5. Una vez que el módulo esté recibiendo coordenadas correctamente, tomará aproximadamente 15 minutos enviar el primer mensaje de Sigfox. Una vez que haya recibido las primeras coordenadas en la consola, el mensaje también estará disponible en el backend de Sigfox y luego en Ubidots para la implementación requerida de su aplicación.
Datos al backend de Sigfox:
Datos mostrados en Ubidots:
Este código de ejemplo sube datos cada 15 minutos para mantener bajos los costos de datos. Si desea tiempos incrementales de más/menos de 15 minutos, use el limit
del diff
condicional para ajustar la tasa de envío.
if diff <= (limit) and coord != (None, None):
4. Resumen
A través de esta guía, hicimos un simple rastreador GPS utilizando Sigfox. Más allá del seguimiento de dispositivos, el Pytrack tiene muchas otras características más allá del GPS para maximizar la eficiencia de sus aplicaciones.
Si desea aprender a gestionar mensajes Uplink y Downlink, utilizando Callbacks de Sigfox y UbiFunction Engine, consulte las guías a continuación:
Ahora es el momento de crear un tablero para controlar y gestionar las variables de su dispositivo Pycom. Para aprender más sobre los widgets y eventos de Ubidots, consulte estos útiles tutoriales en video.
Otros lectores también han encontrado útil...