Recull de pràctiques de 2n de DAM. Curs 2024-2025
Contingut
- 1 Cronograma i carpetes compartides
- 2 Activitats
- 2.1 A00 - Creació de grups
- 2.2 A03 - Què sabem?
- 2.3 A05 - Identificació dels rols
- 2.4 A06 - POO en C++ i Qt
- 2.5 A07 - Introducció a la placa IoT-02, Wokwi i protocols de comunicació
- 2.5.1 A07.01 - Introducció al control de la placa Iot-02 mitjançant NodeRed
- 2.5.2 A07.02 - Punt multicolor al NodeRED i variables de flux
- 2.5.3 A07.03 - Visualització amb un giny rellotge del nivell de llum
- 2.5.4 A07.04 - Ús d'MQTTS (no MQTT)
- 2.5.5 A07.05 - Instal·lació del servei mosquitto
- 2.5.6 A07.06 - Ús del servei mosquitto
- 2.5.7 A07.07 - Introducció al micropython
- 2.5.8 A07.08 - Prova de QtMQtt a la placa IoT-02
- 2.6 A08 - QML, connexió a rerefons Qt i PureQML
- 2.7 A09 - FreeRTOS i MicroWorkers
- 2.8 A12 - Qt
- 2.9 A14 - Scada NodeRed + InfluxDB + Grafana + UserLand + Snap! + Telegram + Mastodon API
Cronograma i carpetes compartides
Carpetes compartides de 2n de DAM. Curs 2024-2025
Activitats
A00 - Creació de grups
Dins de la carpeta compartida feu una subcarpeta amb el nom activitats. I a dins de la subcarpeta A00. Deseu a la subcarpeta A00 l'activitat feta amb el professor transversal en format .odt i .pdf
A03 - Què sabem?
Dins de la carpeta compartida feu una subcarpeta amb el nom activitats. I a dins de la subcarpeta A03. Deseu a la subcarpeta A03 l'activitat feta amb el professor transversal en format .odt i .pdf
A05 - Identificació dels rols
Feu la subcarpeta A05 dins de la subcarpeta activitats de la carpeta compartida. Deseu a la subcarpeta A05 l'activitat feta amb el professor transversal en format .odt i .pdf
A06 - POO en C++ i Qt
A06.01 - Ginys encastats
- a0601a. Feu una interfície gràfica (GUI) amb dos botons (+ i -) i una etiqueta numèrica.
- a0601b. Feu una interfície gràfica (GUI) amb una barra lliscant (slider) i un giny LCD de dos números. La barra lliscant controla l'LCD.
- a0601c. Feu una interfície gràfica (GUI) que integri els dos projectes anteriors. La botonera també controla la barra lliscant i l'LCD. La barra lliscant també controla el valor de l'etiqueta numèrica.
Exercici A06.01. (Heu de desar a la carpeta A06 un document 2425-DAM-A06.01-1rCognom2nCognomNom.pdf amb les solucions explicades i un arxiu 2425-DAM-A06.01-1rCognom2nCognomNom.zip amb els codis comprimits, sense el .pro.user).
A06.02 - Interfícies gràfiques
Exercici A06.02. (Heu de desar a la carpeta un document 2425-DAM-A06.02-1rCognom2nCognomNom.pdf amb les solucions explicades i un arxiu 2425-DAM-A06.02-1rCognom2nCognomNom.zip amb els codis comprimits, sense el .pro.user si ho feu amb qmake o el .txt.user si ho feu amb CMake).
A06.03 - Instal·lació de QtMQtt a les Qt
Instal·lació de QtMQtt a les Qt
Exercici A06.03. (Heu de desar a la carpeta un document anomenat 2425-DAM-A06.03-1rCognom2nCognomNom.pdf ).
A06.04 - Interfícies gràfiques
Exercici A06.04. (Heu de desar a la carpeta A06 un document 2324-DAM-A06.04-1rCognom2nCognomNom.pdf amb les solucions explicades i un arxiu 2324-DAM-A06.04-1rCognom2nCognomNom.zip amb els codis comprimits, sense el .pro.user).
A06.05 - Prova de QtMQtt a la placa IoT-02
Un cop heu fet la Instal·lació de QtMQtt a les Qt proveu el funcionament de simplecient amb usuari i contrasenya. Provem llur funcionament interactuant bidireccionalment amb la placa IoT-02. Heu de subscriure-vos a un tema d'un botó i publicar 1 i 0 a un tema d'un led.
Exercici A06.05. (Heu de desar a la carpeta un document 2425-DAM-A06.05-1rCognom2nCognomNom.pdf amb les solucions explicades i un arxiu 2425-DAM-A06.05-1rCognom2nCognomNom.zip amb els codis comprimits, sense el .pro.user si ho feu amb qmake o el .txt.user si ho feu amb CMake).
A07 - Introducció a la placa IoT-02, Wokwi i protocols de comunicació
A07.01 - Introducció al control de la placa Iot-02 mitjançant NodeRed
Exercici A07.01 (Heu de desar a la carpeta A07 un document 2425-DAM-A07.01-1rCognom2nCognomNom.pdf amb l'explicació del procés de resolució de la pràctica, incloent-hi captures de pantalla i fotografies.
A07.01.1
Feu un codi emprant el panell de control (Dashboard) de NodeRed que surtin quatre interruptors que controlin els quatre leds de la placa IoT-02, mitjançant comunicació MQTT.
A07.01.2
Feu un codi emprant el panell de control (Dashboard) de NodeRed que mostri l'estat dels tres botons de la placa IoT-02, mitjançant comunicació MQTT.
A07.01.3
Agrupeu a una sola pestanya A07.01.1 i A07.01.2.
A07.02 - Punt multicolor al NodeRED i variables de flux
Feu una visualització d'un punt que representa un led multicolor. A la placa IoT-02:
- Quan el botó IO0 sigui premut incorpora el color vermell al punt multicolor representat al panell de control del NodeRED
- Quan el botó IO0 no sigui premut traieu el color vermell al punt multicolor representat al panell de control del NodeRED
- Quan el botó I34 sigui premut incorpora el color verd al punt multicolor representat al panell de control del NodeRED
- Quan el botó I34 no sigui premut traieu el color verd al punt multicolor representat al panell de control del NodeRED
- Quan el botó I35 sigui premut incorpora el color blau al punt multicolor representat al panell de control del NodeRED
- Quan el botó I35 no sigui premut traieu el color blau al punt multicolor representat al panell de control del NodeRED
A07.03 - Visualització amb un giny rellotge del nivell de llum
Feu una visualització d'un giny rellotge que indiqui el nivell de llum a la LDR de la placa IoT-02.
A07.04 - Ús d'MQTTS (no MQTT)
Feu una visualització d'un giny rellotge que indiqui el nivell de llum a la LDR de la placa IoT-02, emprant MQTTS (no MQTT)
- Canvieu
WiFiClient espClient;
per
WiFiClientSecure espClient;
- Descomenteu
espClient.setCACert(ca_cert);
- Comenteu les credencials MQTT i descomenteu:
const char* mqtt_server = "iot.siarq.net"; // Your MQTTS broker const int mqtt_port = 8883; const char* mqtt_user = "ecat"; const char* mqtt_password = "clotClot";
- I és molt important descomentar el certificat digital:
const char* ca_cert = \ "-----BEGIN CERTIFICATE-----\n" \ "MIIDtTCCAp2gAwIBAgIUdVu53YlKp/Tb9f2ZLOX1EEBCzwowDQYJKoZIhvcNAQEN\n" \ ... "B6dNTB+hY0PzLbJhLq/7Mud6G8czvR2SWV2mnVHmFjnhs3MxbKhIoZc=\n" \ "-----END CERTIFICATE-----\n";
- Al Node-Red:
Heu d'afegir un broker MQTTS:
Broker: iot.siarq.net Port: 8883 Usuari ecat i contrasenya clotClot Cliqueu l'opció de fer servir TLS
A07.05 - Instal·lació del servei mosquitto
How to Install The Mosquitto MQTT Broker on Windows
Mosquitto Username and Password Authentication -Configuration and Testing
Afegiu a mosquitto.conf:
listener 1883 0.0.0.0 allow_anonymous true
Per a Finestrots cal executar el broker d'aquesta manera des del terminal:
mosquitto -c mosquitto.conf -v
Al fer-ho demana permís per accedir al servei.
A07.06 - Ús del servei mosquitto
Feu una visualització d'un punt que representa un led multicolor. Feu servir un broker MQTT (no MQTTS):
- Quan el botó IO0 sigui premut incorpora el color vermell al punt multicolor representat al panell de control del NodeRED
- Quan el botó IO0 no sigui premut traieu el color vermell al punt multicolor representat al panell de control del NodeRED
- Quan el botó I34 sigui premut incorpora el color verd al punt multicolor representat al panell de control del NodeRED
- Quan el botó I34 no sigui premut traieu el color verd al punt multicolor representat al panell de control del NodeRED
- Quan el botó I35 sigui premut incorpora el color blau al punt multicolor representat al panell de control del NodeRED
- Quan el botó I35 no sigui premut traieu el color blau al punt multicolor representat al panell de control del NodeRED
- Afegiu quatre selectors (switch) o vuit botons per a apagar i encendre cadascun dels quatre leds de la placa IoT-02
A07.07 - Introducció al micropython
Heu de desar a la carpeta A07 un document 2425-DAM-A07.07-1rCognom2nCognomNom.pdf
- L'explicació del procés de la instal·lació de microPython a la placa IoT-02
- Feu servir ampy
- Feu servir Thonny.
- Feu la traducció de IoT-02_01_leds a MicroPython
- Feu la traducció de IoT-02_05_ldr a MicroPython
adc_pin = Pin(36, mode=Pin.IN) # adc_pin diu el canal ADC corresponent al pin adc = ADC(adc_pin) # adc_pin no és el número de pota, és el número d'ADC
A07.08 - Prova de QtMQtt a la placa IoT-02
Un cop heu fet la Instal·lació de QtMQtt a les Qt proveu el funcionament de simplecient amb usuari i contrasenya. Provem llur funcionament interactuant bidireccionalment amb la placa IoT-02. Heu de subscriure-vos a un tema d'un botó i publicar 1 i 0 a un tema d'un led.
Exercici A07.08. (Heu de desar a la carpeta A07 un document 2425-DAM-A07.08-1rCognom2nCognomNom.pdf amb les solucions explicades i un arxiu 2425-DAM-A07.08-1rCognom2nCognomNom.zip amb els codis comprimits, sense el .pro.user).
A08 - QML, connexió a rerefons Qt i PureQML
A08.00
Feu un document explicant com fer un projecte emprant PureQML i llur migració a QML.
A08.01
Feu un programa en QML que al principi hi surti un quadrat vermell centrat. Al prémer la tecla B hi sortirà de color blau, al prémer la tecla G hi sortirà de color verd i al prémer la tecla R torna a ser vermell.
A08.02
Feu un programa en QML a on hi aparegui centrat, horitzontalment i vertical, ben gros i en negreta el nom Escola del Clot. Al prémer la tecla + la lletra es farà més grossa. I al prémer la tecla - la lletra es farà més petita.
A08.03
Feu un programa que hi surti el text, centrat a la finestra, "Comptador: 0" de color vermell. Al prémer el botó + incrementarà el valor del comptador, i al prémer el botó '-' es decrementarà. Al prémer la tecla N el text serà de color negre i al prémer V tornarà a ser de color vermell.
A09 - FreeRTOS i MicroWorkers
A09.01: fent servir Microworkers emprant MicroPython
A09.02: fent servir FreeRTOS emprant l'IDE d'Arduino
FreeRTOS i MicroWorkers
fr-mw-1) Presa de contacte amb MicroWorkers i FreeRTOS
Codi uPython_mqtt_01 amb el botó dibuixat (copieu l'arxiu .json)
Fent servir la placa IoT-02 feu un programa amb dues tasques. Una tasca farà que el led groc faci pampallugues (500ms encés i 500ms apagat). Una altra tasca llegirà el botó I35, fent que quan estigui premut el cicle del led groc sigui de 100ms encés i 100ms apagat.
Per a definir entrades i sortides a MicroPython:
from machine import Pin btn = Pin(35,Pin.IN) # Botó connectat a l'entrada I35 del Wokwi i la placa IoT-02 ledIntern = Pin(2,Pin.OUT) # led intern a Wokwi i led groc a la placa IoT-02 és el 19
Per a controlar la lluminositat del led:
from time import sleep while True: ledIntern.value(1) # Encés sleep(0.5) ledIntern.value(0) # Apagat sleep(0.5)
Per a llegir el botó:
currentBtn = btn() lastBtn = currentBtn while True: currentBtn = btn() if currentBtn != lastBtn: lastBtn = currentBtn if currentBtn == 1: print("Button released. ",end="") else: print("Button pressed. ",end="")
fr-mw-2) Connexió a WiFi i un broker MQTT
Afegiu una tasca per a fer connexió a WiFi i MQTT.
- Emprant MicroWorkers
Us podeu basar en el codi present a prj_mqtt_json. Feu servir també una variable booleana bSocConnectat (que serà certa quan hi hagi connexió i falsa quan no s'hagi establert la connexió o s'hagi perdut -quan es perd la IP que s'autollegeix és 0.0.0.0-).
- Emprant FreeRTOS
Us podeu basar en el codi present a IoT-02_mqtts_freeRTOS_json_12. Afegiu-hi també un #define USING_WIFI per saber si cal que funcionin totes aquelles funcions que tenen relació amb la wifi. Feu servir també una variable booleana bSocConnectat (que serà certa quan hi hagi connexió i falsa quan no s'hagi establert la connexió o s'hagi perdut -quan es perd la IP que s'autollegeix és 0.0.0.0-).
- Publicació
Si bSocConnectat és certa, publica el canvi d'estat del botó quan es prem I35.
- Subscripció
Quan feu la connexió a MQTT, afegiu una subscripció al tema /MAC/led (essent MAC la MAC de la vostra placa). Si rebeu per aquest tema un '1', 'On','on' o 'ON' s'ha d'encendre el led blanc. Si rebeu '0', 'Off', 'off' o 'OFF' s'apaga el led blanc.
A12 - Qt
A12.01.1 - ginyMqtt amb QMake
L'objectiu d'aquest exercici és fer una aplicació en Qt capaç de comunicar-se bidireccionalment amb la Placa IoT-02. A partir de simplecient amb usuari i contrasenya s'ha generat la classe mqttBasic. Heu de desenvolupar l'aplicació ginyMqtt que tingui aquest aspecte:
- Pantalla inicial, quan encara no s'ha connectat al broker (el nom del broker MQTT, usuari i contrasenya s'escriuen al codi. És a dir, no es demana una personalització del broker):
- Un cop s'ha connectat al broker:
La casella de selecció encén i apaga el led blanc de la placa IoT-02 publicant el tema i missatge corresponent. L'etiqueta s'ha de subscriure al tema MQTT del botó I35 i presenta llur missatge traduït al català.
- Suggeriment de classe GinyMqtt:
- Suggeriment de constructor:
- Suggeriment d'arxiu de projecte emprant qmake:
Exercici A12.01.1 (Heu de desar a la carpeta A12 del Drive un document 2425-DAM-A12.01.1-1rCognom2nCognomNom.pdf amb les solucions explicades i un arxiu 2425-DAM-A12.01.1-1rCognom2nCognomNom.zip amb els codis comprimits, sense el .pro.user).
A12.01.2 - ginyMqtt amb CMake
L'objectiu d'aquest exercici és fer una aplicació en Qt capaç de comunicar-se bidireccionalment amb la Placa IoT-02. El funcionament és exactament igual que a l'exercici anterior que heu fet emprant qmake, en aquest heu de fer servir CMake.
Suggeriment d'arxiu de projecte emprant CMake:
Afegiu Network i Mqtt a find_package():
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Network Mqtt) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network Mqtt)
Afegiu Qt${QT_VERSION_MAJOR}::Network i Qt${QT_VERSION_MAJOR}::Mqtt a target_link_libraries():
target_link_libraries(ginyMqtt04_cmake PUBLIC Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::Mqtt)
Exercici A12.01.2 (Heu de desar a la carpeta A12 del Drive un document 2525-DAM-A12.01.2-1rCognom2nCognomNom.pdf amb les solucions explicades i un arxiu 2425-DAM-A12.01.2-1rCognom2nCognomNom.zip amb els codis comprimits, sense el CMakeLists.txt.user).
A12.02 Mqtt_IoT02
Desenvolupeu un projecte en Qt, capaç d'interaccionar amb la Placa IoT-02, amb aquest aspecte:
- A12.02-1)
Prenent com a base els arxius 00_botonsToggle05.zip i 00_botonsToggle06.zip del recull, desenvolupeu el projecte 02_indicadorLed_00 per a que tingui aquest comportament:
- A12.02-2)
Basant-vos en 02_indicadorLed_00 i 01_json_00.zip del recull, desenvolupeu el projecte 03_indicadorLed_01 per a que tingui aquest aspecte (els valors dels led R, G i B donen valors 0 i 1. Els valors del led W són true i false):
- A12.02-3)
Basant-vos en 04_indicadorBotons00.zip del recull, desenvolupeu el projecte 05_indicadorBotons_01 per a que tingui aquest aspecte:
- A12.02-4)
Basant-vos en 03_indicadorLed_01, desenvolupeu 03_indicadorLed_01_mqtt que controli els quatre leds de la placa IoT-02.
Mqtt_IoT02::Mqtt_IoT02(QWidget *parent) : QWidget(parent) , ui(new Ui::Mqtt_IoT02) { ui->setupUi(this); mqttBasic = new MqttBasic; indicadorLed = new IndicadorLed; indicadorBotons = new IndicadorGrupBotonsEt; ui->hlAmunt->addWidget(mqttBasic); ui->hlCentre->addWidget(indicadorLed); ui->hlAvall->addWidget(indicadorBotons); connect(mqttBasic,SIGNAL(vSignalMqttConnected()),this,SLOT(vMqttConnectat())); connect(mqttBasic,SIGNAL(vSignalMqttDisconnected()),this,SLOT(vMqttDesconnectat())); connect(indicadorLed,SIGNAL(vTrametJsonLeds(QString)),this,SLOT(vTrametJsonLeds(QString))); indicadorBotons->vSetJsonText(""); //showMaximized(); }
- A12.02-5)
Basant-vos en 05_indicadorBotons_01, desenvolupeu 05_indicadorBotons_01_mqtt que llegeixi els tres botons de la placa IoT-02.
- A12.02-6)
Feu l'integració per a que l'aspecte sigui semblant a la captura d'inici de l'activitat A12.02. Haureu d'afegir un QTimer per anar demanant periòdicament el JSON que conté el valor de l'LDR.
A12.03 Qt
Exercici A12.03. (Heu de desar a la carpeta compartida un document 2425-DAM-A12.03-1rCognom2nCognomNom.pdf amb les solucions explicades i un arxiu 2425-DAM-A12.03-1rCognom2nCognomNom.zip amb els codis comprimits, sense el .pro.user si ho feu amb qmake o el .txt.user si ho feu amb CMake).
A12.04 Qt
Exercici A12.04. (Heu de desar a la carpeta compartida un document 2425-DAM-A12.04-1rCognom2nCognomNom.pdf amb les solucions explicades i un arxiu 2425-DAM-A12.04-1rCognom2nCognomNom.zip amb els codis comprimits, sense el .pro.user si ho feu amb qmake o el .txt.user si ho feu amb CMake).
A14 - Scada NodeRed + InfluxDB + Grafana + UserLand + Snap! + Telegram + Mastodon API
A14.1 - Autenticació d'accés a NodeRED
Personalitzeu l'autenticació d'accés al vostre NodeRed (Autenticació d'accés a NodeRED).