|
|
(Hi ha 40 revisions intermèdies del mateix usuari que no es mostren) |
Línia 1: |
Línia 1: |
| = Conceptos previos (29 / 5 / 2020) = | | = Conceptos previos (29 / 5 / 2020) = |
− | - Modbus TCP | + | - Protocolos IoT. OPC-UA, HTTP, MQTT(S), ... |
− | | |
− | - OPC-UA
| |
| | | |
| - Combinaciones entre simuladores, sensores y actuadores (Sistemas ciber-físicos) | | - Combinaciones entre simuladores, sensores y actuadores (Sistemas ciber-físicos) |
| | | |
| = Temario (30 / 5 / 2020) = | | = Temario (30 / 5 / 2020) = |
− | == Modbus RTU ==
| |
− | === Dispositivo WP8028ADAM ===
| |
− | [https://binefa.cat/blog/?p=275 Modbus RTU usando Python y Qt] en el [https://www.aliexpress.com/item/2028359405.html dispositivo industrial WP8028ADAM 8DI/8DO]
| |
| | | |
− | [[Image:01modbusWP8028ADAM.png|center|WP8028ADAM]]
| |
| | | |
| + | == Actualización del ''firmware'' MQTTS con FreeRTOS == |
| + | [[Actualización del firmware MQTTS para la placa IoT-02 el día 30/5/2020]] |
| | | |
− | Communication Parameters ( factory default ): 9600, N, 8,1
| + | == Conexión InfluxDB con NodeRED == |
− | | + | [[Uso de InfluxDB en el VPS del Máster de Industria 4.0 el curso 2019-2020]] |
− | [[Image:04modbusWP8028ADAM.png|center|Communication Settings]]
| |
− | | |
− | | |
− | | |
− | Digital input signal acquisition command :
| |
− | | |
− | [[Image:02modbusWP8028ADAM.png|center|Input Acquisition]]
| |
− | | |
− | Data read "C2", is converted into a binary number " 11000010 " , from left to right correspond to the state of 8 digital input signals DI_08-DI_01 , that DI_08, DI_07, DI_02 input , no input other channels
| |
− | | |
− | | |
− | The digital output signal control commands ( multiple control ) :
| |
− | [[Image:03modbusWP8028ADAM.png|center|Output Control]]
| |
− | | |
− | Written data "A4" is converted into a binary number " 10100100 " , from left to right correspond to eight digital output signal status DO_08-DO_01 , that DO_08, DO_06, DO_03 there is output , no other channel output , after the module receives the correct command , make the appropriate action based on the command and response command sent back to the host , indicating successful communication
| |
− | | |
− | === Placa IoT-02 ===
| |
− | [[Bibliotecas en Python necesarias para ejecutar el ejemplo de programa para leer y escribir a ModBus RTU]]
| |
− | | |
− | [https://binefa.cat/training/upcSchool/20200530/modbus/modbusPython.zip Código en Python para la lectura ModBus RTU]
| |
− | ([https://github.com/jordibinefa/IoT-02/tree/master/codes/python/modbus en GitHub]) de la placa IoT-02 programada con un [https://binefa.cat/training/upcSchool/20200530/modbus/IoT-02_11_modbus_bme280.zip código ModBus RTU maestro] ([https://github.com/jordibinefa/IoT-02/tree/master/codes/IoT-02_11_modbus_bme280 en GitHub]).
| |
− | | |
− | [[Image:00modbus.png|center|ModBus]]
| |
− | | |
− | == Actualización del ''firmware'' ==
| |
− | === Nuevas necesidades ===
| |
− | El [https://binefa.cat/training/upcSchool/20200516/IoT-02_mqtts_09.zip ''Firmware'' usado el 23/5/2020] ( [https://github.com/jordibinefa/IoT-02/tree/master/codes/IoT-02_mqtts_09 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'''.
| |
− | | |
− | [[Image:00i2c.jpg|thumb|center|Ejemplo de comunicación I2C]]
| |
− | | |
− | [[Image:01i2c.jpg|thumb|center|Señales I2C en el osciloscopio]]
| |
− | | |
− | [https://github.com/sparkfun/SparkFun_MLX90640_Arduino_Example/issues/2 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.
| |
− | | |
− | [https://freertos.org/ FreeRTOS. Real-time operating system for microcontrollers]
| |
− | | |
− | [https://savjee.be/2020/01/multitasking-esp32-arduino-freertos/ Multitasking on ESP32 with Arduino and FreeRTOS]
| |
− | | |
− | ===== Uso de Mutex. IoT-02_freeRTOS_04 =====
| |
− | Uso de un '''mutex''' para asegurar que la lectura del bus I2C se completa antes de requerir otra lectura. El '''mutex''' da ''exclusividad'' al primer proceso que lo solicita. Es una manera típica de sincronizar tareas ejectutándose en paralelo.
| |
− | | |
− | | |
− | Terminal serie con la salida del ''firmware''' [https://binefa.cat/training/upcSchool/20200530/IoT-02_freeRTOS_04.zip IoT-02_freeRTOS_04] ([https://github.com/jordibinefa/IoT-02/tree/master/codes/freeRTOS/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''' se bloquea el acceso al bus I2C (lectura de temperatura) en cada llamada:
| |
− | 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''' se bloquea el acceso al bus I2C (lectura de temperatura) leyendo de dos en dos:
| |
− | 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'') ====
| |
− | [[Image:00json.png|center|Biblioteca Arduino_Json]]
| |
− | | |
− | [https://github.com/arduino-libraries/Arduino_JSON JSON Library for Arduino]
| |
| | | |
− | === Nuevo ''firmware'' === | + | == Uso de la placa IoT-02 como medidor de altura relativa == |
| + | La altura relativa se puede calcular a partir de la lectura de presión atmosférica. La [https://es.wikipedia.org/wiki/Presi%C3%B3n_atmosf%C3%A9rica presión atmosférica] va variando con el tiempo, pero la lectura de variaciones en corto periodo de tiempo nos permite inferir la altura. |
| | | |
− | [https://binefa.cat/training/upcSchool/20200530/IoT-02_mqtts_freeRTOS_json_12.zip IoT-02_mqtts_freeRTOS_json_12.zip] [https://github.com/jordibinefa/IoT-02/tree/master/codes/IoT-02_mqtts_freeRTOS_json_12 IoT-02_mqtts_freeRTOS_json_12 en GitHub] | + | Es muy común el uso de sensores para disponer de [https://es.wikipedia.org/wiki/Metadatos metadatos]. Por ejemplo, inferir la altura a partir de la presión, inferir la presencia de personas a partir de los cambios de temperatura, ... |
| | | |
− | == JavaScript encastado en HTML ==
| + | [[Image:00alturaBme280.png|center|Presión atmosférica comparada]] |
| | | |
− | [[Image:43mqtts.png|center|Gestión de la MAC con JavaScript en HTML]]
| + | [https://binefa.cat/training/upcSchool/20200530/modbus/00altitude.nodered.txt Código para la interfície gráfica del NodeRED presentando presiones comparadas] y así poder inferir la altura. |
− | | |
− | [http://www.electronics.cat/mac_IoT-02/ Enlace con la herramienta de gestión de MAC via web]. [https://binefa.cat/training/upcSchool/20200523/mac_IoT-02.zip Código de la herramienta de gestión de MAC via web]
| |
− | | |
− | == 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 == | | == Introducción a Grafana == |
| [[Uso de Grafana en el VPS del Máster de Industria 4.0 el curso 2019-2020]] | | [[Uso de Grafana en el VPS del Máster de Industria 4.0 el curso 2019-2020]] |
− |
| |
| | | |
| == Ejercicio == | | == Ejercicio == |
| Lectura de la LDR, temperatura, presión y humedad de la placa IoT-02 y graficarlas con Grafana. | | Lectura de la LDR, temperatura, presión y humedad de la placa IoT-02 y graficarlas con Grafana. |
| | | |
− | == Uso de ''bots'' ==
| + | Nombre de los paneles Grafana: '''Máster ''05'' Dashboard''' y '''Máster ''05'' Json Values''' (Cambiar '''''05''''' por vuestro número asignado) |
− | === ''Bot'' de Telegram ===
| |
− | [https://wiki.binefa.cat/index.php?title=Bot_de_Telegram Bot de Telegram]
| |
− | | |
− | === ''Bot'' de Mastodon ===
| |
− | No todas las instancias de [https://ca.wikipedia.org/wiki/Mastodon_(xarxa_social) Mastodon] facilitan la instalación de ''bots''. Para hacer los primeros pasos os recomiendo esta [https://botsin.space/ instancia pensada para hospedar ''bots'' de Mastodon].
| |
− | | |
− | [https://botsin.space/@siarq_sensors Ejemplo de bot de Mastodon] para hacer lecturas de sensores cada hora.
| |
− | | |
− | [https://gist.github.com/aparrish/661fca5ce7b4882a8c6823db12d42d26 Getting credentials for the Mastodon API with Mastodon.py, step by step]
| |
− | | |
| | | |
− | == Redes LPWAN == | + | == Anexo == |
| + | [[ModBus RTU 30 / 5 / 2020]] |
| | | |
− | === SigFox ===
| + | [[Redes LPWAN. LoRaWAN y SIGFOX. 30 / 5 / 2020]] |
| | | |
− | === LoRa ===
| + | [[Bots. Telegram y Mastodon. 30 / 5 / 2020]] |
− | [[LoRa 2019-2020]] | |
| | | |
− | == Placa IoT-02. Comparación con otras soluciones ==
| + | [[Placa IoT-02. Comparación con otras soluciones]] |