Diferència entre revisions de la pàgina «1 / 4 / 2023 - Tecnologías IoT, Hands on y MVP»
(Hi ha 26 revisions intermèdies del mateix usuari que no es mostren) | |||
Línia 1: | Línia 1: | ||
− | |||
− | |||
= Conceptos previos (31 / 3 / 2023) = | = Conceptos previos (31 / 3 / 2023) = | ||
- Noción de broker MQTT (Mosquitto). ''Broker'': '''vps656540.ovh.net''' ''Usuario'': '''user''' ''Contraseña'': '''pass''' (Puerto TCP: '''1883''', Puerto ws: '''8080''') | - Noción de broker MQTT (Mosquitto). ''Broker'': '''vps656540.ovh.net''' ''Usuario'': '''user''' ''Contraseña'': '''pass''' (Puerto TCP: '''1883''', Puerto ws: '''8080''') | ||
− | - Noción de Node-RED como a app de Node | + | - Noción de [http://vps656540.ovh.net:2881 Node-RED] como a app de Node (''puertos entre el 2881 y el 2900. master / iot20xx'') |
- Node-RED como pasarela universal IoT | - Node-RED como pasarela universal IoT | ||
− | |||
− | |||
− | |||
− | |||
- Concepto de sistema embebido (''embbeded'') pequeño y sofisticado. Diferencias entre Arduino y Raspberry Pi. | - Concepto de sistema embebido (''embbeded'') pequeño y sofisticado. Diferencias entre Arduino y Raspberry Pi. | ||
Línia 17: | Línia 11: | ||
- Entradas y salidas (I/O) digitales y analógicas. | - Entradas y salidas (I/O) digitales y analógicas. | ||
+ | |||
+ | - [https://wokwi.com/projects/324549436880454228 Ejemplo de wokwi usando MQTT] | ||
== Conversiones de pseudocódigo a lenguajes de programación == | == Conversiones de pseudocódigo a lenguajes de programación == | ||
Línia 50: | Línia 46: | ||
= Temario (1 / 4 / 2023) = | = Temario (1 / 4 / 2023) = | ||
+ | [https://meet.google.com/gri-jhzr-fzh Videoconferencia] | ||
+ | == Gemelos digitales == | ||
+ | * TinkerCAD | ||
+ | |||
+ | [https://www.tinkercad.com/things/5gKEMfq8rA0-pr03 Arduino con electrónica exterior]. 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]). Permite visión graficada. | ||
+ | |||
+ | * 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] | ||
+ | |||
+ | * Snap! y Qt/QML sobre WebAssembly | ||
+ | |||
+ | [http://formacio.things.cat/snap8/snap.html#open:../codisSnap/esp32_DT_8.0.0.xml ESP32 en Snap! v8] interaccionando con [http://formacio.things.cat/xtra/wsMqtt02/ un ekemplo Qt/QML con WebAssembly] ([https://www.binefa.cat/training/iot02/qt/wsMqtt03.zip Código fuente del ejemplo usando Qt/QML sobre WebAssembly]) | ||
+ | |||
+ | * Wokwi y Qt/QML sobre WebAssembly | ||
+ | |||
+ | [https://wokwi.com/projects/350955865540395602 ESP32 programado en MicroPython usando MQTT] interaccionando con [http://formacio.things.cat/xtra/wsMqtt02/ un ejemplo Qt/QML sobre WebAssembly] | ||
+ | |||
== Introducción a la placa IoT-02 == | == Introducción a la placa IoT-02 == | ||
[https://www.binefa.cat/training/iot02/pdf/iot02_00_es.pdf Introducción a la placa IoT-02 en castellano] en pdf ([https://www.binefa.cat/training/iot02/pdf/iot02_00_ca.pdf ''Introducció a la placa IoT-02'' en catalán]) | [https://www.binefa.cat/training/iot02/pdf/iot02_00_es.pdf Introducción a la placa IoT-02 en castellano] en pdf ([https://www.binefa.cat/training/iot02/pdf/iot02_00_ca.pdf ''Introducció a la placa IoT-02'' en catalán]) | ||
− | [http://rebost.binefa.cat/iot/videos/01_Intro_placa_IoT-02_es.mkv Vídeo introductorio a la placa IoT-02] | + | <!--[http://rebost.binefa.cat/iot/videos/01_Intro_placa_IoT-02_es.mkv Vídeo introductorio a la placa IoT-02] |
− | [http://rebost.binefa.cat/iot/videos/02_IDE_Arduino_ESP32_es.mkv Vídeo de instalación del Arduino IDE y algunas bibliotecas extra para probar los códigos en la placa IoT-02] | + | [http://rebost.binefa.cat/iot/videos/02_IDE_Arduino_ESP32_es.mkv Vídeo de instalación del Arduino IDE y algunas bibliotecas extra para probar los códigos en la placa IoT-02]--> |
+ | [https://youtu.be/_EIXCGkGQ0U Vídeo de introducción a la placa IoT-02] | ||
+ | |||
+ | [https://youtu.be/JothMIY4DWE Vídeo de configuración del IDE de Arduino] ([https://www.binefa.cat/training/iot02/libraries/libraries_20230324.zip Nuevo enlace para bajar las bibliotecas / ''libraries'']) | ||
[[Añadir ESP32 al IDE de Arduino]] | [[Añadir ESP32 al IDE de Arduino]] | ||
Línia 97: | Línia 122: | ||
=== I2C === | === I2C === | ||
[https://www.luisllamas.es/arduino-i2c/ El bus I2C en Arduino] | [https://www.luisllamas.es/arduino-i2c/ El bus I2C en Arduino] | ||
+ | |||
+ | [https://wokwi.com/projects/329847579409908306 Búsqueda de dispositivos I2C usando Wokwi, un simulador en línea] | ||
En la placa IoT-02 hay dos conectores para conectar un BME280 (o BME680) y una pantalla OLED de 0,97". | En la placa IoT-02 hay dos conectores para conectar un BME280 (o BME680) y una pantalla OLED de 0,97". | ||
Línia 103: | Línia 130: | ||
[https://www.binefa.cat/training/iot02/IoT-02_06_i2cScanner.zip Firmware comprimido en .zip para escanear todos los dispositivos I2C conectados]. [https://github.com/jordibinefa/IoT-02/tree/master/codes/IoT-02_06_i2cScanner IoT-02_06_i2cScanner en el GitHub] | [https://www.binefa.cat/training/iot02/IoT-02_06_i2cScanner.zip Firmware comprimido en .zip para escanear todos los dispositivos I2C conectados]. [https://github.com/jordibinefa/IoT-02/tree/master/codes/IoT-02_06_i2cScanner IoT-02_06_i2cScanner en el GitHub] | ||
− | |||
==== OLED ==== | ==== OLED ==== | ||
[[Image:11oled.jpg|center|thumb|IoT-02 funcionando con la pantalla OLED]] | [[Image:11oled.jpg|center|thumb|IoT-02 funcionando con la pantalla OLED]] | ||
La dirección I2C de la pantalla OLED es '''0x3C'''. | La dirección I2C de la pantalla OLED es '''0x3C'''. | ||
+ | |||
+ | [https://wokwi.com/projects/329848007382008404 Lectura de la LDR en la pantalla OLED usando Wokwi, un simulador en línea] ([https://github.com/jordibinefa/IoT-02/tree/master/codes/IoT-02_07_SSD1306 Código IoT-02_07_SSD1306 en GitHub]) | ||
[https://www.binefa.cat/training/iot02/IoT-02_08_SSD1306_io.zip Firmware comprimido en .zip de prueba de funcionamiento de la pantalla OLED en la placa IoT-02]. [https://github.com/jordibinefa/IoT-02/tree/master/codes/IoT-02_07_SSD1306 IoT-02_07_SSD1306 en el GitHub] | [https://www.binefa.cat/training/iot02/IoT-02_08_SSD1306_io.zip Firmware comprimido en .zip de prueba de funcionamiento de la pantalla OLED en la placa IoT-02]. [https://github.com/jordibinefa/IoT-02/tree/master/codes/IoT-02_07_SSD1306 IoT-02_07_SSD1306 en el GitHub] | ||
Línia 171: | Línia 199: | ||
[http://formacio.things.cat/mac_IoT-02_mI40/ Herramienta de gestión de la MAC de la placa IoT-02, mediante un cliente web usando JS] | [http://formacio.things.cat/mac_IoT-02_mI40/ Herramienta de gestión de la MAC de la placa IoT-02, mediante un cliente web usando JS] | ||
− | == | + | [http://formacio.things.cat/mac_IoT-02_broker2/ Herramienta de gestión de la MAC de la placa IoT-02, mediante un cliente web usando JS y el broker2] ([https://www.binefa.cat/training/iot02/IoT-02_mqtt_upcSchool_broker2.zip Firmware MQTT usando broker 2 para la placa IoT-02]) |
+ | |||
+ | == MicroPython == | ||
Simulación del código [https://wokwi.com/projects/344353328302391891 uPython_00_blinky.py] en [https://wokwi.com/ wokwi] | Simulación del código [https://wokwi.com/projects/344353328302391891 uPython_00_blinky.py] en [https://wokwi.com/ wokwi] | ||
− | + | Preparación de la Placa IoT-02 para funcionar con MicroPython: [[Placa IoT-02 (es)]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<!-- | <!-- | ||
== Protocolo UDP == | == Protocolo UDP == | ||
Línia 232: | Línia 244: | ||
= Acceso a todos los códigos comentados hoy = | = Acceso a todos los códigos comentados hoy = | ||
[https://www.binefa.cat/training/upcSchool/2021/20210327/ Acceso a todos los códigos comentados hoy]--> | [https://www.binefa.cat/training/upcSchool/2021/20210327/ Acceso a todos los códigos comentados hoy]--> | ||
+ | <!-- | ||
+ | ssh root@vps656540.ovh.net | ||
+ | root:pb79DMKU | ||
+ | |||
+ | user: docent.industria4.0@talent.upc.edu | ||
+ | pass: Industria4@online2022 | ||
+ | --> |
Revisió de 06:57, 1 abr 2023
Contingut
Conceptos previos (31 / 3 / 2023)[modifica]
- Noción de broker MQTT (Mosquitto). Broker: vps656540.ovh.net Usuario: user Contraseña: pass (Puerto TCP: 1883, Puerto ws: 8080)
- Noción de Node-RED como a app de Node (puertos entre el 2881 y el 2900. master / iot20xx)
- Node-RED como pasarela universal IoT
- Concepto de sistema embebido (embbeded) pequeño y sofisticado. Diferencias entre Arduino y Raspberry Pi.
- Arduino básico. Blink, el Hola mundo en Arduino.
- Entradas y salidas (I/O) digitales y analógicas.
- Ejemplo de wokwi usando MQTT
Conversiones de pseudocódigo a lenguajes de programación[modifica]
Pautas y tablas de conversión hechas por Xavier Pi:
Pautas de conversión de un algoritmo a C
Tabla de conversión de un algoritmo a JavaScript (Node.js, ES6)
Pautas de conversión de un algoritmo a Python
Tabla de conversión de un algoritmo a Snap!
Temario (1 / 4 / 2023)[modifica]
Gemelos digitales[modifica]
- TinkerCAD
Arduino con electrónica exterior. Desde el terminal e enciende un led i con a apaga el led (carácteres 101 y 97 del código ASCII). Permite visión graficada.
- Wokwi
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
- Snap! y Qt/QML sobre WebAssembly
ESP32 en Snap! v8 interaccionando con un ekemplo Qt/QML con WebAssembly (Código fuente del ejemplo usando Qt/QML sobre WebAssembly)
- Wokwi y Qt/QML sobre WebAssembly
ESP32 programado en MicroPython usando MQTT interaccionando con un ejemplo Qt/QML sobre WebAssembly
Introducción a la placa IoT-02[modifica]
Introducción a la placa IoT-02 en castellano en pdf (Introducció a la placa IoT-02 en catalán)
Vídeo de introducción a la placa IoT-02
Vídeo de configuración del IDE de Arduino (Nuevo enlace para bajar las bibliotecas / libraries)
Añadir ESP32 al IDE de Arduino
Firmware comprimido en zip de test de la placa IoT-02. IoT-02_11_modbus_bme280 en GitHub. Este es el firmware que iba instalado cuando os llegó la placa.
Muestra en línea del ejemplo inicial con microrruptores, relés reed y relés convencionales:
Hoja de características del relé de enclavamiento HFD2/005-M-L2-D
Entradas y salidas de sensores[modifica]
UART[modifica]
Esta placa tiene la opción de poder funcionar a 5V o 3,3V. Para el Arduino Nano o Uno tiene que ir a 5 voltios. Para el ESP32 (chip microcontrolador de la placa IoT-02) o para la Raspberry Pi tiene que ir a 3,3 voltios. Esta selección se hace mediante un puente (jumper). Por defecto, en vuestro kit ya venía seleccionado con el puente en la posición de 3,3 voltios.
Programas de acceso directo a la UART
La placa IoT-02 usa dos UART (de las tres posibles en el ESP32). La primera es para la programación del firmware y la segunda se usa para la comunicación ModBus-RTU (protocolo industrial usado desde finales de los años 70 del siglo XX y todavía muy usado para la lectura de sensores y presente en cualquier sistema SCADA industrial).
Conexión de la UART a la placa IoT-02 para hacer la programación[modifica]
Posición de la conexión de la placa UART para la programción de la placa IoT-02:
El cable microusb de alimentación (de color negro en la foto) sirve para proporcionar 5 voltios. Es necesario para poder activar y desactivar el relé blanco de la placa, así como la parte de ModBus-RTU.
SPI[modifica]
Este puerto está implementado en la placa IoT-02 para la parte de LoRaWAN (control del RFM95).
I2C[modifica]
Búsqueda de dispositivos I2C usando Wokwi, un simulador en línea
En la placa IoT-02 hay dos conectores para conectar un BME280 (o BME680) y una pantalla OLED de 0,97".
Firmware comprimido en .zip para escanear todos los dispositivos I2C conectados. IoT-02_06_i2cScanner en el GitHub
OLED[modifica]
La dirección I2C de la pantalla OLED es 0x3C.
Lectura de la LDR en la pantalla OLED usando Wokwi, un simulador en línea (Código IoT-02_07_SSD1306 en GitHub)
Firmware comprimido en .zip de prueba de funcionamiento de la pantalla OLED en la placa IoT-02. IoT-02_07_SSD1306 en el GitHub
BME280[modifica]
La dirección I2C del sensor BME280 es 0x76 (o 0x77 para el sensor BME680). Los datos leídos desde el BME280 se presentan en la pantalla OLED. Ambos dispositivos están usando el protocolo I2C. Esta versión de BME280 tiene el patillaje previsto para poder funcionar con el bus SPI, pero la placa IoT-02 está configurada para ir exclusivamente por el puerto I2C.
Firmware comprimido en .zip de prueba de funcionamiento del sensor BME280 en la placa IoT-02. IoT-02_07_SSD1306_BME280 en el GitHub
Conexión WiFi[modifica]
Escaneo de las conexiones WiFi disponibles[modifica]
Firmware comprimido en .zip que lee cada 5 segundos las conexiones WiFi disponibles y su potencia en dBm. IoT-02_wifi_00_scan en el GitHub
Firmware comprimido en .zip que lee cada 5 segundos las conexiones WiFi disponibles y las visualiza en las 6 primeras líneas de la pantalla OLED de la placa IoT-02. Primero informa del número de señales WiFi detectadas. Un segundo después presenta una lista con el nombre de la red (SSID), entre paréntesis los dBm de potencia de la señal, una c seguida por el canal WiFi y si sale un * significa que la red está cifrada. El ciclo se repite cada 5 segundos.
Conexión a una WiFi[modifica]
Firmware comprimido en zip para conectar a una WiFi. IoT-02_wifi_02_simpleWiFi en GitHub
Conectividad a múltiples WiFi[modifica]
Firmware comprimido en zip para conectar a una WiFi de un listado. IoT-02_wifi_03_multWiFi en GitHub
Solución a problemas de conectividad WiFi[modifica]
Cuando exista dificultad para conectarse a cualquier WiFi es aconsejable hacer reset. Por prudencia, es conveniente introducir esta función de reset cada vez que se intente una conexión WiFi. (No todos los códigos expuestos en este curso incorporan la función reset de WiFi. En caso de tener problemas de conectividad se sugiere incorporarlo)
Protocolos TCP[modifica]
TCP (Transmission Control Protocol): retrato del protocolo de transporte
HTTP[modifica]
Generalidades del protocolo HTTP
Firmware comprimido en zip que presenta una página web en HTML capaz de controlar el led blanco. IoT-02_wifi_01_simpleWiFiServer en GitHub
MQTT y MQTTS[modifica]
¿Qué es MQTT? Su importancia como protocolo IoT
Más información sobre MQTT y MQTTS
Conexión entre la placa IoT-02 y Snap! v8 mediante MQTT
Herramienta de gestión de la MAC de la placa IoT-02, mediante un cliente web usando JS
Herramienta de gestión de la MAC de la placa IoT-02, mediante un cliente web usando JS y el broker2 (Firmware MQTT usando broker 2 para la placa IoT-02)
MicroPython[modifica]
Simulación del código uPython_00_blinky.py en wokwi
Preparación de la Placa IoT-02 para funcionar con MicroPython: Placa IoT-02 (es)