Diferència entre revisions de la pàgina «30 / 5 / 2020 - Tecnologías IoT, Hands on y MVP»

De binefa.com
Salta a la navegació Salta a la cerca
Línia 56: Línia 56:
 
  Task 1 (9) --> T: 25.19
 
  Task 1 (9) --> T: 25.19
 
  '''Ending task 1'''
 
  '''Ending task 1'''
 +
 +
En la tarea '''task 1''':
 +
  for ( int i = 0; i < 10; i++ ) {
 +
    '''xSemaphoreTake(xMutex, portMAX_DELAY);'''
 +
    Serial.print("Task 1 ("); Serial.print(i); Serial.print(") --> ");
 +
    vReadTemperature();
 +
    '''xSemaphoreGive(xMutex);'''
 +
    vTaskDelay(xDelay);
 +
  }
 +
  Serial.println("Ending task 1");
 +
 +
En la tarea '''task 2''':
 +
  for ( int n = 0; n < 5; n++) {
 +
    '''xSemaphoreTake(xMutex, portMAX_DELAY);'''
 +
    for ( int i = 0; i < 2; i++ ) {
 +
      Serial.print("Task 2 ("); Serial.print(nC); Serial.print(") --> ");
 +
      vReadTemperature();
 +
      vTaskDelay(xDelay);
 +
      nC++;
 +
    }
 +
    '''xSemaphoreGive(xMutex);'''
 +
  }
  
 
==== Bibliotecas (''libraries'') ====
 
==== Bibliotecas (''libraries'') ====

Revisió del 12:32, 25 maig 2020

Conceptos previos (29 / 5 / 2020)

- Modbus TCP

- OPC-UA

- Combinaciones entre simuladores, sensores y actuadores (Sistemas ciber-físicos)

Temario (30 / 5 / 2020)

Actualización del firmware

Nuevas necesidades

El Firmware usado el 23/5/2020 ( IoT-02_mqtts_09 en GitHub ) puede manejar correctamente los temas MQTT mientras las peticiones tengan un intervalo mínimo de tiempo entre ellas.

En la clase de hoy vamos a estresar la placa IoT-02 haciéndole peticiones de temas (topics) cada segundo. Debido a la latencia de la red, es muy probable que algunas peticiones sean recibidas casi al mismo tiempo. ¿Y qué pasa si recibimos órdenes simultáneamente? Si las órdenes simultáneas son muy seguidas habrá dos procesos simultáneos de acceso al bus I2C, provocando la lectura errónea del sensor I2C.

Ejemplo de comunicación I2C
Señales I2C en el osciloscopio

Fuente de las imágenes de las señales I2C

El tiempo de una comunicación I2C, en la foto de la señales en la pantalla del osciloscopio, es de 150 microsegundos (el tiempo dependerá de la velocidad del dispositivo I2C maestro).

Tecnologías añadidas

Uso de FreeRTOS

No hace falta añadir ninguna biblioteca para usar FreeRTOS en el ESP32. Ya viene por defecto en el IDE de Arduino configurado fara funcionar con el ESP32.

FreeRTOS. Real-time operating system for microcontrollers

Multitasking on ESP32 with Arduino and FreeRTOS

Uso de Mutex. IoT-02_freeRTOS_04

Código de ejemplo usando FreeRTOS en la placa IoT-02

Terminal serie con la salida del firmware' IoT-02_freeRTOS_04 (en GitHub):

/home/jordi/Arduino/IoT-02_freeRTOS_04/IoT-02_freeRTOS_04.ino
Task 1 (0) --> T: 25.12
Task 2 (0) --> T: 25.12
Task 2 (1) --> T: 25.12
Task 1 (1) --> T: 25.12
Task 2 (2) --> T: 25.12
Task 2 (3) --> T: 25.13
Task 1 (2) --> T: 25.14
Task 2 (4) --> T: 25.14
Task 2 (5) --> T: 25.14
Task 1 (3) --> T: 25.15
Task 2 (6) --> T: 25.15
Task 2 (7) --> T: 25.16
Task 1 (4) --> T: 25.16
Task 2 (8) --> T: 25.16
Task 2 (9) --> T: 25.17 
Task 1 (5) --> T: 25.17
Ending task 2
Task 1 (6) --> T: 25.17
Task 1 (7) --> T: 25.18
Task 1 (8) --> T: 25.18
Task 1 (9) --> T: 25.19
Ending task 1

En la tarea task 1:

 for ( int i = 0; i < 10; i++ ) {
   xSemaphoreTake(xMutex, portMAX_DELAY);
   Serial.print("Task 1 ("); Serial.print(i); Serial.print(") --> ");
   vReadTemperature();
   xSemaphoreGive(xMutex);
   vTaskDelay(xDelay);
 }
 Serial.println("Ending task 1");

En la tarea task 2:

 for ( int n = 0; n < 5; n++) {
   xSemaphoreTake(xMutex, portMAX_DELAY);
   for ( int i = 0; i < 2; i++ ) {
     Serial.print("Task 2 ("); Serial.print(nC); Serial.print(") --> ");
     vReadTemperature();
     vTaskDelay(xDelay);
     nC++;
   }
   xSemaphoreGive(xMutex);
 }

Bibliotecas (libraries)

Biblioteca Arduino_Json

JSON Library for Arduino

Nuevo firmware

Conexión InfluxDB con NodeRED

Uso de InfluxDB en el VPS del Máster de Industria 4.0 el curso 2019-2020

Introducción a Grafana

Uso de Grafana en el VPS del Máster de Industria 4.0 el curso 2019-2020


Ejercicio

Lectura de la LDR, temperatura, presión y humedad de la placa IoT-02 y graficarlas con Grafana.

Uso de bots

Bot de Telegram

Bot de Telegram

Bot de Mastodon

No todas las instancias de Mastodon facilitan la instalación de bots. Para hacer los primeros pasos os recomiendo esta instancia pensada para hospedar bots de Mastodon.

Ejemplo de bot de Mastodon para hacer lecturas de sensores cada hora.

Getting credentials for the Mastodon API with Mastodon.py, step by step


Modbus RTU

Bibliotecas en Python necesarias para ejecutar el ejemplo de programa para leer y escribir a ModBus RTU

Código en Python para la lectura ModBus RTU de la placa IoT-02 programada con un código ModBus RTU maestro.

Redes LPWAN

SigFox

LoRa

Placa IoT-02. Comparación con otras soluciones