Demo MKRFOX1200

Medición de temperatura y humedad con un Arduino MKRFOX1200 y sistema simple de alarma basado en un umbral superior. Integración en un servidor propio https://www.aprendiendoarduino.com/ y en thingspeak https://thingspeak.com/

Hardware utilizado:

En esta demo demuestra la potencia de la red Sigfox para IoT, usando un sistema simple se va a medir la temperatura y humedad ambiente de forma inalámbrica y con total movilidad. Se usa un sensor de temperatura y humedad DHT22 conectado al MKRFOX1200 que manda mensajes con los datos cada 30 segundos para esta demostración. Para no llegar al límite diario de mensajes de Sigfox habría que hacerlo cada 10 minutos.

En el mensaje se mandan 3 datos:

  • Temperatura (5 bytes en ASCII). De -9.00 a 99.99
  • Humedad (5 bytes en ASCII). De 00.00 a 99.99
  • Evento de alarma (1 byte ASCII). 0 = normal (no event), 1 = alarm triggered, 2 = restore alarm.

Lo mando todo como texto para simplificar todo, pero si puede mandar los float y ahorrar un byte. Un buen ejemplo de base para mandar un float y convertir diferentes tipos de datos para mandar por sigfox: https://github.com/nicolsc/sigfox-weather-station

El propio Arduino detecta la alarma de alta temperatura y manda en el byte de alarma el evento, cuando la alarma se recupera manda un nuevo evento de recuperación.

Puesto que desde el backend de Sigfox no es capaz de distinguir cuando es una alarma o no, ya que solo puede reenviar los datos del mensaje mandado por el dispositivo sigfox, estos datos se reenvían mediante dos callbacks a:

En ambas plataformas la misión es almacenar los datos, representarlos gráficamente y analizar el mensaje y mandar el evento de alarma cuando corresponda. Incluso desde cualquiera de las dos plataformas, se podría hacer la comprobación de alarma al superar el umbral en lugar de mandarlo por mensaje Sigfox. Estas son las tareas que el backend de Sigfox no puede hacer.

La ventaja de usar un servidor/plataforma propia es que los datos los guardamos en nuestra infraestructura y son accesibles para siempre. Para el caso de la plataforma propia aprovechamos para guardar datos adicionales y aprender más de Sigfox:

Y desde la BBDD podríamos ver los valores máximos y mínimos de RSSI y SNR.

El código a cargar en Arduino es https://github.com/jecrespo/AprendiendoArduino-Sigfox

Dispositivos Sigfox y Lora recogiendo datos en campo:

Una vez cargado el código en Arduino y el dispositivo registrado en el backend de Sigfox ya podemos ver los los mensajes en el backend, dentro de device apartado messages.

Los datos del mensaje en el backend se ven en HEX, para comprobar que lo enviado es correcto se puede usar este conversor a ASCII: https://www.rapidtables.com/convert/number/hex-to-ascii.html

Desde el backend las funciones que se pueden hacer con los datos son muy limitadas, así que con el uso de las callbacks podemos reenviar estos datos a plataformas externas.

Estas callbacks transfieren los datos recibidos de los dispositivos asociados al device type a su infraestructura. Para obtener más información, consulte la documentación de callback: https://backend.sigfox.com/apidocs/callback

Las callbacks están asociadas a los device type, he creado dos callbacks una para mandar los datos a la plataforma propia https://www.aprendiendoarduino.com/ y otra para reenviar los datos a thingspeak https://thingspeak.com/

Para  https://www.aprendiendoarduino.com/ el callback es:

Y el código que guarda los datos en la BBDD y manda los mensajes de alarma está hecho en PHP y el código está en: https://github.com/jecrespo/aprendiendoarduino-servicios/tree/master/sigfox y además de guardar los datos en una BBDD, las temperaturas los guarda en otra BBDD para representar gráficamente y se encarga también del envío de alarmas.

Y veo los datos en tiempo real:

Para la plataforma thingspeak: https://thingspeak.com/, hago una llamada a la API de sigfox para actualizar: https://api.thingspeak.com/update.json?api_key=writeapikey&field2={customData#humidity}&field1={customData#temperature}

El callback es:

Este es un esquema de lo que estamos haciendo:

Lo que hago es desde el backend de sigfox es reenviar los datos a la plataforma IoT:

Desde thingspeak hay que configurar un canal con los campos temperatura y humedad y podemos dar una vista pública que puede verse en https://thingspeak.com/channels/440162

Imágenes y más información en:

4 comentarios en “Demo MKRFOX1200

  1. JORGE ALBA URZAIZ

    Buenas tardes,
    Estoy siguiendo tu tutorial pero tengo un problema con la librería DHT, he cargado todas las librerías DHT que he encontrado pero no doy con la adecuada. Puedes por favor indicarme cual es la que tienes tú instalada.
    Muchas gracias de antemano.

    Le gusta a 1 persona

    Responder
      1. JORGE ALBA

        Muchas gracias por tu amable respuesta. Ya con la librería que has indicado compila sin problema. Permiteme alguna pregunta más. Porque dices que envía datos cada 30 segundos? En el codigo pone «t.every(540000, takeReading); //9 minutes».
        Soy muy neofito pero entiendo que ahí se indica que toma medida cada 9 minutos. Por otro lado..no se algo me ocurre en mi prueba ya que manda la lectura al conectarlo…y aparentemente la manda bien a thinkspeak…pero solo manda una….y ya no vuelve a enviar ninguna lectura. seguire trasteando, pero si se te ocurre algo?¿
        Un saludo

        Le gusta a 1 persona

  2. jecrespom Autor

    Hola Jorge, este post corresponde a una demo hecha el 18 de marzo de 2018 en el taller de Redes LPWAN y Sigfox: https://www.aprendiendoarduino.com/talleres-arduino/redes-lpwan-y-sigfox-con-arduino/

    Para la demo se hizo cada 30 segundos para verlo en directo, pero el sketch está cada 9 minutos, puesto que sigfox solo permite 140 mensajes diarios.

    Que solo te mande un mensaje es porque hace el primer takeReading() del setup y no ejecuta los del loop programados con la librería timer. Baja el tiempo de envío de datos a 30 segundos y con el monitor serie comprueba si se ejecuta la función takeReading cada 30 segundos.

    Un saludo,
    EC

    Me gusta

    Responder

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.