Diferència entre revisions de la pàgina «Curso práctico de programación de electrónica embebida de bajo coste para la Internet de las Cosas. Edición del 13 al 16 de Mayo de 2024. Días 14 y 15»
m (→Node-RED) |
|||
(Hi ha 57 revisions intermèdies del mateix usuari que no es mostren) | |||
Línia 1: | Línia 1: | ||
− | = | + | = Programa = |
− | + | [[Programa de K-LAGAN Curso práctico de programación electrónica "embeded low-cost para la IOT. Edición del 13 al 16 de Mayo de 2024.]] | |
− | |||
− | Basándoos | + | [https://moodle.eic.cat/ Acceso al Moodle del curso] |
+ | |||
+ | [https://eic-cat.zoom.us/j/86104101719?pwd=NaZCBD8aJvlckKrDHXS0z53Y9uZP5W.1 Videoconferencia en Zoom] (ID de reunión: 861 0410 1719)<!-- Código de acceso: 590551 --> Os han enviado un código de acceso por correo electrónico. | ||
+ | |||
+ | = Los sistemas embebidos = | ||
+ | == Microcontroladores de escala pequeña == | ||
+ | [https://www.binefa.cat/training/ceic/20230223/s4a/20181031_ceic_02.pdf Una introducción a Arduino] (Comentado el primer día) | ||
+ | == Microcontroladores de escala mediana == | ||
+ | [https://raw.githubusercontent.com/AchimPieters/esp32-homekit-camera/master/Images/ESP32-30PIN-DEVBOARD.png Distribución de pines en el ESP32-VROOM] | ||
+ | |||
+ | [[Placa IoT-02 (es) | Placa IoT-02]] ([https://www.binefa.cat/IoT/IoT-02/info/iot02_00_es.pdf Introducción a la placa IoT-02 en pdf]) | ||
+ | |||
+ | == Microcontroladores de escala sofisticada == | ||
+ | Un ejemplo de electrónica embebida controlada por una Raspberry Pi: [[IoT-Vertebrae]] (MAC ESP32: 70B8F662BC7C ) | ||
+ | |||
+ | = Gemelos digitales = | ||
+ | == TinkerCAD == | ||
+ | [https://www.tinkercad.com/things/5gKEMfq8rA0-pr03 Ejemplo de Arduino con electrónica exterior (dos potenciómetros para la lectura analógica y leds)]: | ||
+ | |||
+ | * '''Comunicación''' básica con el ejemplo: Desde el terminal '''e''' enciende un led i con '''a''' apaga el led (carácteres 101 y 97 del [https://es.wikipedia.org/wiki/ASCII código ASCII]). | ||
+ | |||
+ | * '''Graficación''' del nivel de los potenciómetros del ejemplo: Permite visión graficada quitándole los paréntesis. | ||
+ | |||
+ | == Wokwi == | ||
+ | [https://wokwi.com/dashboard/projects Zona de proyectos en Wokwi] | ||
+ | |||
+ | [https://wokwi.com/projects/305336312628511297 Ejemplo de control de 31 servos] simulando un Arduino Mega en Wokwi. | ||
+ | |||
+ | [https://wokwi.com/projects/329840862091543122 Ejemplo de entradas y salidas digitales simulando un ESP32 en Wokwi] ([https://github.com/jordibinefa/IoT-02/blob/master/codes/IoT-02_03_inputs/IoT-02_03_inputs.ino Código IoT-02_03_inputs.ino en Github]) | ||
+ | |||
+ | [https://wokwi.com/projects/330035502407221843 Visión graficada usando Wokwi] | ||
+ | |||
+ | Simulación del código en MicroPython [https://wokwi.com/projects/344353328302391891 uPython_00_blinky.py] en [https://wokwi.com/ wokwi] | ||
+ | |||
+ | = Ejemplos básicos de actuadores = | ||
+ | [https://wokwi.com/arduino/projects Carpeta de proyectos en Wokwi] | ||
+ | |||
+ | === Control de 4 leds con ESP32 === | ||
+ | [https://wokwi.com/projects/329845964804194900 Control de cuatro leds en Wokwi] [https://github.com/jordibinefa/IoT-02/blob/master/codes/IoT-02_01_leds/IoT-02_01_leds.ino IoT-02_01_leds.ino en GitHub] | ||
+ | |||
+ | === Control de un relé === | ||
+ | [https://www.binefa.cat/training/ceic/20220330/s4a/20181031_ceic_02.pdf Páginas 13, 17 y 18] | ||
+ | |||
+ | [https://wokwi.com/projects/322802227591774802 Set / Reset con un par de relés sin microcontrolador simulado en Wokwi] | ||
+ | |||
+ | [https://www.tinkercad.com/things/1O4C6ZoLpdB Relé en TinkerCad] | ||
+ | |||
+ | [https://www.tinkercad.com/things/8y6p1MUZXTT Circuit de enclavamiento en TinkerCad] | ||
+ | |||
+ | ==== Arduino Uno ==== | ||
+ | [https://wokwi.com/projects/322846360729551444 Control de un relé en Wokwi usando Arduino Uno] | ||
+ | |||
+ | ==== ESP32 ==== | ||
+ | [https://wokwi.com/projects/329903075159442004 Control de un relé en Wokwi usando ESP32] | ||
+ | |||
+ | === Servomotores === | ||
+ | [https://www.binefa.cat/training/ceic/20220330/s4a/20181031_ceic_02.pdf Páginas 31 a 40] | ||
+ | |||
+ | ==== Arduino Uno ==== | ||
+ | [https://wokwi.com/arduino/libraries/Servo/Knob Potenciómetro controlando la posición de un servo usando Arduino Uno] | ||
+ | |||
+ | [https://wokwi.com/arduino/libraries/Servo/Sweep Barrido de posiciones de un servo usando Arduino Uno] | ||
+ | |||
+ | ==== Arduino Mega ==== | ||
+ | [https://wokwi.com/projects/305336312628511297 Ejemplo de control de 31 servos] | ||
+ | |||
+ | ==== ESP32 ==== | ||
+ | [https://www.arduino.cc/reference/en/libraries/esp32servo/ Biblioteca de control de servomotores para ESP32 en el IDE de Arduino] | ||
+ | |||
+ | [https://wokwi.com/projects/323706614646309460 Simulación en Wokwi de un servo con ESP32 teniendo permisos para subir bibliotecas] | ||
+ | |||
+ | [https://wokwi.com/projects/329900810993402450 Simulació en Wokwi de un servo con ESP32 sin tener permisos para subir biblioteques] | ||
+ | |||
+ | = Ejemplos básicos de sensórica = | ||
+ | [https://www.binefa.cat/training/ceic/20220330/s4a/20181031_ceic_02.pdf Entradas digitales: Páginas 7 a 9] | ||
+ | |||
+ | == Detección de final de carrera == | ||
+ | [https://wokwi.com/projects/329840862091543122 Control de leds con botones en Wokwi] [https://github.com/jordibinefa/IoT-02/blob/master/codes/IoT-02_03_inputs/IoT-02_03_inputs.ino IoT-02_03_inputs.ino en GitHub] | ||
+ | |||
+ | == Nivel de lluminosidad == | ||
+ | [https://wokwi.com/projects/329839893260796499 Lectura de la LDR en Wokwi] [https://github.com/jordibinefa/IoT-02/blob/master/codes/IoT-02_05_ldr/IoT-02_05_ldr.ino IoT-02_05_ldr.ino al GitHub] | ||
+ | |||
+ | == Medida de la distancia por ultrasonidos == | ||
+ | [https://wokwi.com/projects/330033931816534611 Medida de la distancia por ultrasonidos con ESP32 en Wokwi] | ||
+ | |||
+ | == Medida de inclinaciones y aceleraciones == | ||
+ | [https://wokwi.com/projects/305936654686749250 Medida de inclinaciones y aceleraciones. Arduino Uno + MPU6050 con Arduino Uno en Wokwi] | ||
+ | |||
+ | [https://wokwi.com/projects/305937156771152449 Visualización gráfica de inclinaciones y aceleraciones. Arduino Uno + MPU6050 con Arduino Uno en Wokwi] | ||
+ | |||
+ | == Plotter básico == | ||
+ | [https://wokwi.com/projects/330035502407221843 Plotter básico con ESP32 en Wokwi] | ||
+ | |||
+ | Recordando añadir una coma al principio para mantener el formato ''json'', hemos añadido al final del archivo ''diagram.json'': | ||
+ | "serialMonitor": { "display": "plotter" } | ||
+ | |||
+ | * Ejemplo con dispositivo físico: [https://www.binefa.cat/training/ceic/20220427/s4a_joystick_grafica.zip s4a_joystick_grafica.zip] | ||
+ | |||
+ | == Medida de humedad y temperatura == | ||
+ | [https://wokwi.com/projects/322410731508073042 Medida de humedad y temperatura con ESP32 el Wokwi] | ||
+ | |||
+ | [https://wokwi.com/projects/330040082126864980 Medida de temperatura usando un termistor de tipo NTC con ESP32 en Wokwi] | ||
+ | |||
+ | = Snap! y Wokwi combinados = | ||
+ | Primer uso del protocolo más usado en Internet de las Cosas (MQTT): | ||
+ | |||
+ | [https://wokwi.com/projects/395171178315723777 ESP32 programado en MicroPython usando MQTT] en Wokwi interaccionando con [https://snap.binefa.cat/snap.html#open:https://raw.githubusercontent.com/jordibinefa/IoT-02/master/codes/snap/esp32Mqtt00.xml un ESP32 en Snap!] | ||
+ | |||
+ | = Comunicación con componentes = | ||
+ | [https://www.binefa.cat/training/ceic/20220330/s4a/20181031_ceic_02.pdf Páginas 49 a 79] | ||
+ | == Protocolos internos: I2C, SPI y UART == | ||
+ | === I2C === | ||
+ | [https://wokwi.com/projects/329847579409908306 Escaneo de direcciones I2C] [https://github.com/jordibinefa/IoT-02/tree/master/codes/IoT-02_06_i2cScanner Códigos IoT-02_06_i2cScanner al GitHub] | ||
+ | |||
+ | [https://wokwi.com/projects/329848007382008404 Lectura de la LDR en la pantalla OLED al Wokwi] [https://github.com/jordibinefa/IoT-02/tree/master/codes/IoT-02_07_SSD1306 Codis IoT-02_07_SSD1306 al GitHub] | ||
+ | == Protocolos externos: ModBus, CanBus == | ||
+ | [[Modbus RTU]] | ||
+ | |||
+ | [[Algunes captures de pantalla del vídeo de ProSoft Technology explicant el ModBus RTU i ModBus TCP | Resumen del ModBus RTU y ModBus TCP]] | ||
+ | |||
+ | = Ejercicios = | ||
+ | == Graficación de los valores de temperatura y humedad == | ||
+ | Basándoos en el ejemplo [https://wokwi.com/projects/322410731508073042 Medida de humedad y temperatura con ESP32 al Wokwi], visualizad gráficamente los valores de temperatura y humedad. Acordaos de modificar el archivo ''diagram.json'' (después de "connections":[] añadid ''',serialMonitor": { "display": "plotter" })'''. Para dar más inmediatez podéis bajar el tiempo entre lecturas analógicas. | ||
Serial.print(data.temperature); | Serial.print(data.temperature); | ||
Línia 10: | Línia 131: | ||
Serial.println(""); | Serial.println(""); | ||
− | == Sistema de tres leds que | + | == Sistema de tres leds que indica la temperatura de confort == |
− | Seguint els consells de [https://www.azosensors.com/article.aspx?ArticleID=487 Determining Thermal Comfort Using a Humidity and Temperature Sensor] volem fer un sistema amb tres leds de colors. Basant-vos en l'exemple [https://wokwi.com/projects/330040082126864980 Mesura de temperatura emprant un termistor de tipus NTC amb ESP32 al Wokwi] i l'article anterior seguint la norma ISO7730 (i ignorant l'efecte de la humitat relativa), afegiu tres leds de colors (blau, verd i vermell). El led '''blau''' s'encendrà quan la temperatura estigui '''per sota de 20ºC''' (els altres dos leds hauran d'estar apagats). El led '''verd''' s'encendrà quan la temperatura estigui '''entre 20ºC i 26ºC''' (els altres dos leds hauran d'estar apagats). El led '''vermell''' s'encendrà quan la temperatura sigui '''superior a 26ºC''' (els altres dos leds hauran d'estar apagats). | + | <!-- Seguint els consells de [https://www.azosensors.com/article.aspx?ArticleID=487 Determining Thermal Comfort Using a Humidity and Temperature Sensor] volem fer un sistema amb tres leds de colors. Basant-vos en l'exemple [https://wokwi.com/projects/330040082126864980 Mesura de temperatura emprant un termistor de tipus NTC amb ESP32 al Wokwi] i l'article anterior seguint la norma ISO7730 (i ignorant l'efecte de la humitat relativa), afegiu tres leds de colors (blau, verd i vermell). El led '''blau''' s'encendrà quan la temperatura estigui '''per sota de 20ºC''' (els altres dos leds hauran d'estar apagats). El led '''verd''' s'encendrà quan la temperatura estigui '''entre 20ºC i 26ºC''' (els altres dos leds hauran d'estar apagats). El led '''vermell''' s'encendrà quan la temperatura sigui '''superior a 26ºC''' (els altres dos leds hauran d'estar apagats). |
+ | |||
+ | https://wokwi.com/projects/397753815709435905 | ||
+ | --> | ||
+ | Siguiendo los consejos de [https://www.azosensors.com/article.aspx?ArticleID=487 Determining Thermal Comfort Using a Humidity and Temperature Sensor] queremos hacer un sistema con tres ledes de colores. Basándoos en el ejemplo [https://wokwi.com/projects/330040082126864980 Medida de temperatura empleando un termistor de tipo NTC con ESP32 al Wokwi] y el artículo anterior siguiendo la norma ISO7730 (e ignorando el efecto de la humedad relativa), añadid tres ledes de colores (azul, verde y rojo). El led '''azul''' se encenderá cuando la temperatura esté '''por debajo de 20 °C''' (los otros dos leds tendrán que estar apagados). El led '''verde''' se encenderá cuando la temperatura esté '''entre 20 °C y 26 °C''' (los otros dos leds tendrán que estar apagados). El led '''rojo''' se encenderá cuando la temperatura sea '''superior a 26 °C''' (los otros dos leds tendrán que estar apagados). | ||
+ | [[Image:WokwiComfort00.png|center|thumb|Indicador de temperatura de confort]] | ||
+ | Propuesta de distribución de pines: | ||
+ | #define LED_R 23 | ||
+ | #define LED_G 27 | ||
+ | #define LED_B 32 | ||
+ | Parte del código ''json'' de distribución de componentes: | ||
+ | "parts": [ | ||
+ | { "type": "wokwi-esp32-devkit-v1", "id": "esp", "top": -108.67, "left": 55.33, "attrs": {} }, | ||
+ | { | ||
+ | "type": "wokwi-ntc-temperature-sensor", | ||
+ | "id": "ntc1", | ||
+ | "top": -101.06, | ||
+ | "left": -211.45, | ||
+ | "attrs": {} | ||
+ | }, | ||
+ | { | ||
+ | "type": "wokwi-led", | ||
+ | "id": "led1", | ||
+ | "top": -224.4, | ||
+ | "left": 359.4, | ||
+ | '''"attrs": { "color": "red", "flip": "1" }''' | ||
+ | }, | ||
+ | { | ||
+ | "type": "wokwi-resistor", | ||
+ | "id": "r1", | ||
+ | "top": -188.05, | ||
+ | "left": 288, | ||
+ | '''"attrs": { "value": "1000" }''' | ||
+ | }, | ||
+ | { | ||
+ | "type": "wokwi-led", | ||
+ | "id": "led2", | ||
+ | "top": -157.2, | ||
+ | "left": 359.4, | ||
+ | '''"attrs": { "color": "green", "flip": "1" }''' | ||
+ | }, | ||
+ | |||
+ | = MQTT = | ||
+ | [[El protocolo MQTT]] | ||
+ | |||
+ | [[Conexión entre la placa IoT-02 y Snap! v9 mediante MQTT]] | ||
+ | |||
+ | = Gemelo digital = | ||
+ | [[Image:WokwiDigitalTwin01.png|center|thumb|Gemelo digital para el uso práctico de MQTT con Snap! y Node-RED]] | ||
+ | |||
+ | [https://wokwi.com/projects/384384549968583681 Gemelo digital en Wokwi para interactuar con MQTT]. Cambiad en la línea 81 los cuatro últimos números de la MAC por los de vuestro puerto asignado. | ||
+ | |||
+ | stMac = "7C9EBDF872FC_2893"; // <-- Cambiad 2893 por el número de vuestro puerto asignado | ||
+ | |||
= Node-RED = | = Node-RED = | ||
+ | [[Asignación de puertos para el curso de electrónica embebida de bajo coste para la Internet de las Cosas. Edición del 13 al 16 de Mayo de 2024]] | ||
+ | |||
+ | [[Image:WokwiNodered00.png|center|thumb|Node-RED interactuando con el gemelo digital usando MQTT]] | ||
+ | |||
[[Uso del NodeRED (2024) | Uso del NodeRED]] | [[Uso del NodeRED (2024) | Uso del NodeRED]] | ||
+ | |||
+ | Haced un flujo que lea el valor de la LDR y lo traduzca a un porcentaje entre 0 y 100. Haced que se visualize en un reloj (''gauge'') y en una gráfica. | ||
+ | |||
+ | [[Uso de la base de datos MariaDB desde NodeRED (2023) | Uso de la base de datos MariaDB desde Node-RED]] | ||
+ | |||
+ | [[Uso de Telegram desde NodeRED]] |
Revisió de 11:52, 14 maig 2024
Contingut
Programa[modifica]
Videoconferencia en Zoom (ID de reunión: 861 0410 1719) Os han enviado un código de acceso por correo electrónico.
Los sistemas embebidos[modifica]
Microcontroladores de escala pequeña[modifica]
Una introducción a Arduino (Comentado el primer día)
Microcontroladores de escala mediana[modifica]
Distribución de pines en el ESP32-VROOM
Placa IoT-02 (Introducción a la placa IoT-02 en pdf)
Microcontroladores de escala sofisticada[modifica]
Un ejemplo de electrónica embebida controlada por una Raspberry Pi: IoT-Vertebrae (MAC ESP32: 70B8F662BC7C )
Gemelos digitales[modifica]
TinkerCAD[modifica]
Ejemplo de Arduino con electrónica exterior (dos potenciómetros para la lectura analógica y leds):
- Comunicación básica con el ejemplo: Desde el terminal e enciende un led i con a apaga el led (carácteres 101 y 97 del código ASCII).
- Graficación del nivel de los potenciómetros del ejemplo: Permite visión graficada quitándole los paréntesis.
Wokwi[modifica]
Ejemplo de control de 31 servos simulando un Arduino Mega en Wokwi.
Ejemplo de entradas y salidas digitales simulando un ESP32 en Wokwi (Código IoT-02_03_inputs.ino en Github)
Simulación del código en MicroPython uPython_00_blinky.py en wokwi
Ejemplos básicos de actuadores[modifica]
Control de 4 leds con ESP32[modifica]
Control de cuatro leds en Wokwi IoT-02_01_leds.ino en GitHub
Control de un relé[modifica]
Set / Reset con un par de relés sin microcontrolador simulado en Wokwi
Circuit de enclavamiento en TinkerCad
Arduino Uno[modifica]
Control de un relé en Wokwi usando Arduino Uno
ESP32[modifica]
Control de un relé en Wokwi usando ESP32
Servomotores[modifica]
Arduino Uno[modifica]
Potenciómetro controlando la posición de un servo usando Arduino Uno
Barrido de posiciones de un servo usando Arduino Uno
Arduino Mega[modifica]
Ejemplo de control de 31 servos
ESP32[modifica]
Biblioteca de control de servomotores para ESP32 en el IDE de Arduino
Simulación en Wokwi de un servo con ESP32 teniendo permisos para subir bibliotecas
Simulació en Wokwi de un servo con ESP32 sin tener permisos para subir biblioteques
Ejemplos básicos de sensórica[modifica]
Entradas digitales: Páginas 7 a 9
Detección de final de carrera[modifica]
Control de leds con botones en Wokwi IoT-02_03_inputs.ino en GitHub
Nivel de lluminosidad[modifica]
Lectura de la LDR en Wokwi IoT-02_05_ldr.ino al GitHub
Medida de la distancia por ultrasonidos[modifica]
Medida de la distancia por ultrasonidos con ESP32 en Wokwi
Medida de inclinaciones y aceleraciones[modifica]
Medida de inclinaciones y aceleraciones. Arduino Uno + MPU6050 con Arduino Uno en Wokwi
Plotter básico[modifica]
Plotter básico con ESP32 en Wokwi
Recordando añadir una coma al principio para mantener el formato json, hemos añadido al final del archivo diagram.json:
"serialMonitor": { "display": "plotter" }
- Ejemplo con dispositivo físico: s4a_joystick_grafica.zip
Medida de humedad y temperatura[modifica]
Medida de humedad y temperatura con ESP32 el Wokwi
Medida de temperatura usando un termistor de tipo NTC con ESP32 en Wokwi
Snap! y Wokwi combinados[modifica]
Primer uso del protocolo más usado en Internet de las Cosas (MQTT):
ESP32 programado en MicroPython usando MQTT en Wokwi interaccionando con un ESP32 en Snap!
Comunicación con componentes[modifica]
Protocolos internos: I2C, SPI y UART[modifica]
I2C[modifica]
Escaneo de direcciones I2C Códigos IoT-02_06_i2cScanner al GitHub
Lectura de la LDR en la pantalla OLED al Wokwi Codis IoT-02_07_SSD1306 al GitHub
Protocolos externos: ModBus, CanBus[modifica]
Resumen del ModBus RTU y ModBus TCP
Ejercicios[modifica]
Graficación de los valores de temperatura y humedad[modifica]
Basándoos en el ejemplo Medida de humedad y temperatura con ESP32 al Wokwi, visualizad gráficamente los valores de temperatura y humedad. Acordaos de modificar el archivo diagram.json (después de "connections":[] añadid ,serialMonitor": { "display": "plotter" }). Para dar más inmediatez podéis bajar el tiempo entre lecturas analógicas.
Serial.print(data.temperature); Serial.print(","); Serial.print(data.humidity); Serial.println("");
Sistema de tres leds que indica la temperatura de confort[modifica]
Siguiendo los consejos de Determining Thermal Comfort Using a Humidity and Temperature Sensor queremos hacer un sistema con tres ledes de colores. Basándoos en el ejemplo Medida de temperatura empleando un termistor de tipo NTC con ESP32 al Wokwi y el artículo anterior siguiendo la norma ISO7730 (e ignorando el efecto de la humedad relativa), añadid tres ledes de colores (azul, verde y rojo). El led azul se encenderá cuando la temperatura esté por debajo de 20 °C (los otros dos leds tendrán que estar apagados). El led verde se encenderá cuando la temperatura esté entre 20 °C y 26 °C (los otros dos leds tendrán que estar apagados). El led rojo se encenderá cuando la temperatura sea superior a 26 °C (los otros dos leds tendrán que estar apagados).
Propuesta de distribución de pines:
#define LED_R 23 #define LED_G 27 #define LED_B 32
Parte del código json de distribución de componentes:
"parts": [ { "type": "wokwi-esp32-devkit-v1", "id": "esp", "top": -108.67, "left": 55.33, "attrs": {} }, { "type": "wokwi-ntc-temperature-sensor", "id": "ntc1", "top": -101.06, "left": -211.45, "attrs": {} }, { "type": "wokwi-led", "id": "led1", "top": -224.4, "left": 359.4, "attrs": { "color": "red", "flip": "1" } }, { "type": "wokwi-resistor", "id": "r1", "top": -188.05, "left": 288, "attrs": { "value": "1000" } }, { "type": "wokwi-led", "id": "led2", "top": -157.2, "left": 359.4, "attrs": { "color": "green", "flip": "1" } },
MQTT[modifica]
Conexión entre la placa IoT-02 y Snap! v9 mediante MQTT
Gemelo digital[modifica]
Gemelo digital en Wokwi para interactuar con MQTT. Cambiad en la línea 81 los cuatro últimos números de la MAC por los de vuestro puerto asignado.
stMac = "7C9EBDF872FC_2893"; // <-- Cambiad 2893 por el número de vuestro puerto asignado
Node-RED[modifica]
Haced un flujo que lea el valor de la LDR y lo traduzca a un porcentaje entre 0 y 100. Haced que se visualize en un reloj (gauge) y en una gráfica.