Recull de pràctiques de 2n de DAM. Curs 2024-2025
Carpetes compartides de 2n de DAM. Curs 2024-2025
Contingut
- 1 SM7 / PJ9
- 2 Cronograma i carpetes compartides
- 3 Activitats
- 3.1 A00 - Creació de grups
- 3.2 A03 - Què sabem?
- 3.3 A05 - Identificació dels rols
- 3.4 A06 - POO en C++ i Qt
- 3.5 A07 - Introducció a la placa IoT-02, Wokwi i protocols de comunicació
- 3.5.1 A07.01 - Introducció al control de la placa Iot-02 mitjançant NodeRed
- 3.5.2 A07.02 - Punt multicolor al NodeRED i variables de flux
- 3.5.3 A07.03 - Visualització amb un giny rellotge del nivell de llum
- 3.5.4 A07.04 - Ús d'MQTTS (no MQTT)
- 3.5.5 A07.05 - Instal·lació del servei mosquitto
- 3.5.6 A07.06 - Ús del servei mosquitto
- 3.5.7 A07.07 - Introducció al micropython
- 3.5.8 A07.08 - Prova de QtMQtt a la placa IoT-02
- 3.6 A08 - QML, connexió a rerefons Qt i PureQML
- 3.7 A09 - FreeRTOS i MicroWorkers
- 3.8 A10 - Paho + Telegram + Mastodon
- 3.9 A12 - Qt
- 3.10 A13 - QML a l'escriptori, Android i WebAssembly
- 3.11 A14 - Scada NodeRed + InfluxDB + Grafana + UserLand + Snap! + Telegram + Mastodon API
- 3.12 A17 - LoRa + InfluxDB + Grafana + Scada NodeRed
- 3.12.1 A17.01 - Presa de contacte amb LoRa mitjançant The Things Network
- 3.12.2 A17.02 - Tramesa de dades emprant LoRa, The Things Network i NodeRed
- 3.12.3 A17.05 - Prova bàsica d'ús del NodeRed injectant dades a MariaDB i visualitzant-les a Grafana
- 3.12.4 A17.06 - Visualització a Grafana de les dades, trameses emprant MQTT, dels sensors de la placa IoT-02, fent servir NodeRed i MariaDB
- 3.12.5 A17.07 - Desenvolupament d'una API en NodeRed per a trametre dades
- 3.12.6 A17.08 - Desenvolupament d'una API en NodeRed per a rebre dades
- 3.12.7 A17.09 - Visualització a Grafana de les dades, trameses emprant LoRa, dels sensors de la placa IoT-02, fent servir NodeRed i MariaDB
SM7 / PJ9
M00
M00.1
Proveu el putty amb la placa vermella de la placa IoT-02. En Linux és gtkterm, instal·lable amb l'apt.
M00.2
Instal·leu la biblioteca QSerialPort i QtSerialBus per a fer-la servir al vostre entorn de programació en Qt. Proveu el codi terminal sèrie. Feu servir la placa vermella de la placa IoT-02.
M00.3
Proveu Serial Terminal Exemple estàndard de les Qt per a fer ús de QSerialPort
M00.4
Proveu m01_3_00.zip Programa mínim d'ús de QSerialPort
M01
M01.1
Feu un microprogramari a la placa IoT-02 per a que tregui dos senyals pel port sèrie, una quadrada i una de triangular. L'heu de poder visualitzar al Serial Plotter de l'IDE d'Arduino.
M01.2
Feu un programa en Python capaç de llegir els valors tramesos per la placa IoT-02 pel port sèrie. (Codi en Python que fa servir el port sèrie)
M01.3
Feu un programa emprant la classe QSerialPort capaç de llegir els valors tramesos per la placa IoT-02 pel port sèrie. (Exemple de QSerialPort)
M02
Proveu el codi mb_IoT_00.py present al GitHub connectant la placa IoT-02 mitjançant el ModBus RTU. Expliqueu llur funcionament.
M03
Desenvolupeu un codi per a la placa IoT-02 per a que faci de mestre (master) ModBus RTU. Feu servir d'esclau el codi mb_IoT_slave_00.py present al GitHub. Heu de presentar la temperatura llegida des de l'ordinador a la pantalla OLED de la placa IoT-02.
M04
M04.1
Basant-vos en M01.2 i M01.3 desenvolupeu una aplicació GUI feta en Qt. Ha de tenir dos botons: Set i Reset. Aquests dos botons han de controlar l'estat del relé de la placa mitjançant el protocol ModBus RTU. (Exemple per a calcular el CRC del ModBus)
M04.2
Basant-vos en M04.1 desenvolupeu una aplicació GUI feta en Qt. Ha de tenir tres botons: Set, Reset i Temperatura. Els primers dos botons han de controlar l'estat del relé de la placa mitjançant el protocol ModBus RTU. El tercer botó ha de preguntar la temperatura a la placa i l'heu de mostrar a una etiqueta.
M04.3
Acabeu d'implementar totes les funcions ModBus RTU del codi en Python mb_IoT_00.py a una GUI en Qt.
M05
M05.1
Basant-vos en M01.2 i M01.3 desenvolupeu una aplicació GUI feta en QML. Ha de tenir dos botons: Set i Reset. Aquests dos botons han de controlar l'estat del relé de la placa mitjançant el protocol ModBus RTU. (Exemple per a calcular el CRC del ModBus)
M05.2
Basant-vos en M05.1 desenvolupeu una aplicació GUI feta en QML. Ha de tenir tres botons: Set, Reset i Temperatura. Els primers dos botons han de controlar l'estat del relé de la placa mitjançant el protocol ModBus RTU. El tercer botó ha de preguntar la temperatura a la placa i l'heu de mostrar a una etiqueta.
M05.3
Acabeu d'implementar totes les funcions ModBus RTU del codi en Python mb_IoT_00.py a una GUI en QML.
Cronograma i carpetes compartides
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.
A08.04
Desenvolupeu un joc de pedra, paper, tisora.
A08.04.1
Feu servir lletres.
A08.04.2
Feu servir imatges.
A08.04.3
Afegiu un botó de configuració que porti a una altra pantalla (feu servir SwipeView i PageIndicator) que:
- Permeti seleccionar mode dia o mode nit.
- Digui quantes partides ha guanyat l'usuari i quants l'aplicació (feus servir QSettings per a la persistència de dades).
- Un botó que torni a zero el nombre de partides guanyades i perdudes.
- Un botó per tornar al joc
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.
A10 - Paho + Telegram + Mastodon
A10.3 - Paho
Desenvolupeu un exemple d'ús de Paho fent servir Python (podeu fer servir Jupyter Lab).
A10.3.1 - Subscripció MQTT a Paho i publicació a Snap!
Exemple d'ús de Paho fent servir Python fent de subscriptor i publicant temes MQTT des d'Snap!.
Snap emprant http (existeix la llibreria MQTT)
A10.3.2 - Publicació MQTT a Paho i subscripció a Snap!
Exemple d'ús de Paho fent servir Python fent de publicador tenint la subscripció MQTT a Snap!.
Snap emprant http (existeix la llibreria MQTT)
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).
A13 - QML a l'escriptori, Android i WebAssembly
A13.01
Feu un exemple bàsic executant un codi QML al vostre dispositiu Android o a una màquina virtual funcionant amb Android. En comptes del missatge Una prova heu de posar el vostre nom i cognoms.
Màquina virtual Android per a fer-la servir per a executar codis QML des de QtCreator
Coses a tenir en compte:
- Feu servir una versió mínima d'Android 9 (Android-x86 9.0-R2 Pie), altrament la configuració de la màquina virtual no permet desplegar versions anteriors (amb Android-x86 8.1-R6 Oreo no es desplega).
- Si feu servir la màquina virtual, recoredeu que la xarxa ha d'estar amb configuració pont (no NAT) i la controladora gràfica ha de ser VBoxVGA.
- Quan genereu el projecte al QtCreator seleccioneu dos kits: Desktop 6.8.0 i Android Qt 6.8.0 Clang x86
- Connecteu les dues màquines virtuals fent servir l'eina adb (explicació a Màquina virtual Android per a fer-la servir per a executar codis QML des de QtCreator)
- Heu de signar el projecte abans de desplegar-lo a Android (Projects / Build Android APK / Sign package - podeu fer servir com a Keystore: /home/jordi/AndroidStudioProjects/signedApk/binefa.keystore -
Suggeriment de codi:
import QtQuick 2.15 import QtQuick.Window 2.15 Window { width: 640 height: 480 visible: true title: qsTr("Prova bàsica") color: "orange" Text{ text: qsTr("Una prova") font.bold: true font.pixelSize: 44 anchors.centerIn:parent color: "blue" } }
A13.02
Poseu en marxa sobre Android wsMqtt04_cmake. Cal que instal·leu les QtMqtt per a Android.
Canvieu la MAC per defecte a wsMqtt04_cmake per que sigui la que teniu a la vostra placa IoT-02.
Proveu que controleu la vostra placa IoT-02 bidireccionalment (hi escriviu i hi llegiu) fent servir wsMqtt04_cmake. Feu la prova des de l'escriptori i des del vostre Android (emulat o real).
A13.03
Resoleu aquest examen del curs 2023-2024 de Qt i QML
A13.04
A13.04.1
Joc bàsic de pedra, paper i tisora.
A13.04.2
Interacció amb els leds de la placa IoT-02 amb el joc bàsic de pedra, paper i tisora.
- Quan la partida la guanya l'usuari s'encén el led verd de la placa IoT-02 i s'apaguen els altres.
- Quan la partida la perd l'usuari s'encén el led vermell de la placa IoT-02 i s'apaguen els altres.
- Quan hi ha un empat s'enecén el led groc i s'apaguen els altres.
A13.04.3
Interacció amb els botons de la placa IoT-02 amb el joc bàsic de pedra, paper i tisora.
- Botó IO0: pedra
- Botó I34: paper
- Botó I35: tisora
A13.04.4
Pàgina de configuració persistent (emprant QSettings) al joc bàsic de pedra, paper i tisora. Heu de poder configurar:
- Broker, usuari i contrasenya
- MAC de la placa
- Escollir si l'empat es presenta amb llum groc o blanc a la placa IoT-02
- Relació IO0, I34 i I35 amb pedra, paper i tisora
A13.04.5
Afegiu síntesi de veu. En funció del resultat de la partida, l'aplicació us ha de dir: Guanyes, empates o perds.
A13.04.6
Que tot plegat també funcioni sobre Android físic o virtual
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).
A14.2 - Bot de Telegram
Desenvolupeu un bot de Telegram que interactui amb la vostra placa IoT-02. Les ordres, des del mateix bot, són:
/W : Encén el led blanc
/w : Apaga el led blanc
/botons : Estat dels botons a la placa
A14.3 - Bot de Telegram
Desenvolupeu un bot de Telegram que interactui amb la vostra placa IoT-02. Les ordres, des d'un grup al qual pertany i és administrador, són:
/W : Encén el led blanc
/w : Apaga el led blanc
/botons : Estat dels botons a la placa
I de manera asíncrona avisa quan s'ha premut el botó I35, trametent un missatge al grup al qual pertany. El codi MQTT en format json
A14.4 - Mastodon
Publiqueu la temperatura, humitat relativa i pressió atmosfèrica llegides per la vostra placa IoT-02 i les publiqueu a Mastodon mitjançant NodeRED.
Feu un informe de com ho heu programat i captures de llur funcionament.
A14.5 - Grafana
Documenteu la instal·lació de Grafana al vostre sistema operatiu
A14.7 - UserLand
Pàgina oficial d'UserLand
Arxiu apk: tech.ula_7438725.apk enllaçat des de f-droid (Aquesta versió pregunta usuari i contrasenya. Les versions més noves tan sols ho permeten si es paga).
Instal·leu-vos l'aplicació UserLAnd al vostre telèfon mòbil (no feu servir Google Play, baixeu-vos l'arxiu apk del paràgraf anterior). Si no teniu mòbil disponible, feu servir un emulador d'Android (per exemple Android-x86 8.1-R6 Oreo).
Connecteu el vostre mòbil, real o emulat, a la xarxa sense fils per a IoT i poseu en marxa l'aplicació. Un cop a dins, instal·leu-vos un Ubuntu (a Debian hi ha incompatibilitats per obsolescència). Us demanarà un nom d'usuari i contrasenya. Feu una instal·lació que permeti veure al navegador del vostre ordinador un NodeRED executant-se des del mòbil.
Per a fer-ho:
sudo apt update sudo apt upgrade sudo apt install aptitude openssh-server net-tools curl software-properties-common wget unzip screen
A partir d'ara us podeu connectar remotament per SSH fent servir el port 2022 ( ssh usuari@ipMobil -p 2022 o ssh -o ServerAliveInterval=30 usuari@ipMobil -p 2022 per a que hi hagi persistència en la comunicació)
mkdir bin cd bin curl -sL https://deb.nodesource.com/setup_14.x | sudo bash - sudo apt-get install -y nodejs node -v npm -v mkdir nodered-ui cd nodered-ui wget --no-check-certificate https://www.binefa.cat/IoT/nodeRed/node_red_ui.zip unzip node_red_ui.zip screen node node_modules/node-red/red.js --userDir node_modules/node-red/data --settings node_modules/node-red/settings.js -v --port 2222 --title elmeuTitol --safe flows_meuTitol.json
Premeu Ctrl A + D. I per a tornar a screen funcionant des del rerefons:
screen -r
A14.8 - MariaDB
Feu un document amb totes les passes necessàries per a que funcioni al vostre ordinador un NodeRed amb nodes MariaDB. Repliqueu al vostre ordinador:
Ús de MariaDB per emmagatzemar dades de la Internet de les Coses
Ús de la base de dades MariaDB des de NodeRED
A14.9 - Xat de Telegram accedint a Gemini
Implementeu un xat de Telegram que dialogui amb l'API de Gemini mitjançant NodeRED.
- Connexió amb Gemini Cal una clau d'API (API key) (Guia ràpida d'ús a l'API de Gemini)
- Reconeixement de veu amb Snap! (Accés directe al projecte amb Snap!)
A17 - LoRa + InfluxDB + Grafana + Scada NodeRed
A17.01 - Presa de contacte amb LoRa mitjançant The Things Network
Amb la placa IoT-02 feu una tramesa d'un missatge Hola món fins al vostre NodeRed fent servir el mètode OTAA (On The Air Activation) de LoRa i el rerefons de The Things Stack. Teniu material d'ajuda a la carpeta intro del recull LoRa ( usuari: dam / contrasenya: dam2324)
A17.02 - Tramesa de dades emprant LoRa, The Things Network i NodeRed
Amb la placa IoT-02 feu una tramesa del valor de la LDR amb dos bytes, fent servir el mètode OTAA. (Feu servir unions). Dimensioneu correctament el vector mydata.
LMIC_setTxData2(1, mydata, sizeof(mydata) - 1, 0); // Si no és una cadena de caràcters, hem d'informar del nombre exacte de bytes a trametre.
Exemple de conversió bidireccional de float a cadena unsigned char fent servir union.
A17.05 - Prova bàsica d'ús del NodeRed injectant dades a MariaDB i visualitzant-les a Grafana
Feu una demostració d'ús de Grafana llegint MariaDB. I MariaDB emmagatzemant dades des del NodeRED. Baseu-vos en Aleatorització controlada pel panell de control explicada a Ús de la base de dades MariaDB des de NodeRED
A17.06 - Visualització a Grafana de les dades, trameses emprant MQTT, dels sensors de la placa IoT-02, fent servir NodeRed i MariaDB
A17.06.1) Visualitzeu a Grafana les dades, trameses emprant MQTT, de temperatura, humitat relativa, pressió atmosfèrica i de nivell de llum. Feu servir missatgeria MQTT amb un broker públic. Gestioneu les dades amb NodeRED emmagatzemant-les a una base de dades MariaDB. Visualitzeu les dades a un panell de gràfiques emprant Grafana.
A17.06.2) Visualitzeu a Grafana les dades, trameses emprant MQTT, de temperatura, humitat relativa, pressió atmosfèrica i de nivell de llum. Feu servir missatgeria MQTT amb un broker local (a la vostra màquina base o màquina virtual). Gestioneu les dades amb NodeRED emmagatzemant-les a una base de dades MariaDB. Visualitzeu les dades a un panell de gràfiques emprant Grafana.
A17.07 - Desenvolupament d'una API en NodeRed per a trametre dades
Implementeu un flux per a canviar l'estat dels leds i el relé biestable de la placa IoT-02. Feu la prova de validació des del terminal. Baseu-vos en Desenvolupament d'una API en NodeRed. Pasarel·la HTTP a MQTT
A17.08 - Desenvolupament d'una API en NodeRed per a rebre dades
A17.08.01 - Desenvolupament d'una API en NodeRed per a rebre una dada
Implementeu un flux per a rebre el valor de l'LDR de la placa IoT-02. Feu la prova de validació des del terminal.
A17.08.02 - Desenvolupament d'una API en NodeRed per a rebre un conjunt de dades emprant JSON
Implementeu un flux per a rebre un JSON dels valors dels sensors i els botons de la placa IoT-02 (aprofiteu el tema jsonIn). Feu la prova de validació des del terminal.
A17.09 - Visualització a Grafana de les dades, trameses emprant LoRa, dels sensors de la placa IoT-02, fent servir NodeRed i MariaDB
Visualitzeu a Grafana les dades, trameses emprant LoRa, de temperatura, humitat relativa, pressió atmosfèrica i de nivell de llum. Feu servir missatgeria MQTT amb un broker públic. Gestioneu les dades amb NodeRED emmagatzemant-les a una base de dades MariaDB. Visualitzeu les dades a un panell de gràfiques emprant Grafana.