Recull de pràctiques de 2n de DAM. Curs 2024-2025

De binefa.com
La revisió el 12:35, 14 març 2025 per Jordi Binefa (discussió | contribucions) (→‎M00.3)
(dif) ← Versió més antiga | Versió actual (dif) | Versió més nova → (dif)
Salta a la navegació Salta a la cerca

Carpetes compartides de 2n de DAM. Curs 2024-2025

Contingut

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

caption

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.

caption

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

Enunciat A06.02

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

Enunciat A06.04

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.
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):
Desconnectat del broker
  • Un cop s'ha connectat al broker:
Connectat del 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:
Exemple de classe
  • Suggeriment de constructor:
Exemple de constructor i destructor
  • Suggeriment d'arxiu de projecte emprant qmake:
Exemple 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

Codi de referència i ajuda

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.

Connectat al broker. Desenvolupat amb CMake

Suggeriment d'arxiu de projecte emprant CMake:

Exemple d'arxiu de projecte emprant CMake i Mqtt

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)
Exemple d'arxiu de projecte emprant CMake i 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)
Exemple d'arxiu de projecte emprant CMake i 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:

QtMqttIoT02
  • 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:

02_indicadorLed_00


02_indicadorLed_00
  • 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):

03_indicadorLed_01
  • A12.02-3)

Basant-vos en 04_indicadorBotons00.zip del recull, desenvolupeu el projecte 05_indicadorBotons_01 per a que tingui aquest aspecte:

05_indicadorBotons_01
  • 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

Enunciat A12.03

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

Enunciat A12.04

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

Prova d'execució de QML a Android

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.

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.

Codi IoT-02_11_modbus_bme280

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.