DAM2 - EH3. IoT Lab. Curs 2025-2026
Quan tingueu les credencials d'accés a la NET heu de compartir una carpeta amb aquest nom: 2526-DAM-1rCognom2nCognomNom (Per exemple, si el vostre nom és Xavier López Pujol --> 2526-DAM-LopezPujolXavier). Heu de compartir-la amb el professor transversal dels projectes globals i amb mi. A aquest enllaç podreu veure si ja hi sou a la llista:
Carpetes compartides de 2n de DAM. Curs 2025-2026
Contingut
- 1 Enllaços ràpids
- 2 Algunes classes
- 3 Repositori de codis fet a classe durant el curs
- 4 Documentació
Enllaços ràpids
Recull de pràctiques de 2n de DAM. Curs 2025-2026
Recull de codis fets a classe. Curs 2025-2026
Introducció al QML. Curs 2025-2026
Algunes classes
20251212
Creació de projectes Qt multiplataforma emprant sòcols web segurs (wss) sobre escriptori, WebAssembly i Android.
alumne@qtedu:~/QtPrj/qml$ ./qt_project_generator.py ============================================================ GENERADOR DE PROJECTES QT MULTIPLATAFORMA ============================================================ 📦 Nom del projecte (ex: mqtt00): mqt00 📱 Nom de l'aplicació [appmqt00]: 📌 Versió del projecte [0.1]: 🎨 URI QML [premeu Enter per deixar buit o ex: com.example.mqt00]: ✅ Projecte 'mqt00' creat correctament! 📁 Ubicació: /home/alumne/QtPrj/qml/mqt00 📝 Passos següents: 1. Copia a la nova carpeta els arxius (.h i .cpp): connexio, mqttbasic i websocketiodevice 2. Obre Qt Creator 3. File → Open File or Project... 4. Selecciona: /home/alumne/QtPrj/qml/mqt00/CMakeLists.txt 5. Configura els kits (Desktop, Android, WebAssembly) 6. Build → Build All alumne@qtedu:~/QtPrj/qml$
Per a connectar el rerefons amb el QML, afegiu a main.cpp el text en negreta:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "connexio.h"
int main(int argc, char *argv[]){
QGuiApplication app(argc, argv);
qmlRegisterType<Connexio>("desDe.connexio",1,0,"Connexio");
QQmlApplicationEngine engine;
...
Així podeu importar el rerefons des del main.qml:
import QtQuick import QtQuick.Controls import desDe.connexio 1.0
Podent fer crides a mètodes públics de la classe C++ de rerefons:
mqttController.on_btConnecta_clicked(); // on_btConnecta_clicked() és un mètode osca públic (public slot) de la classe Connexió a C++
Tots les captures dels senyals de la classe en C++ duen on al davant i es posa en majúscula el primer caràcter del senyal:
Connexio {
id: mqttController
// Rep el senyal quan el C++ confirma la connexió
onVSignalMqttConnected: {
estatText.text = "Connectat!";
estatText.color = "green";
exitButton.text = "&Desconnecta";
}
20251205
20251201
- Seguim amb QML
- Seguim fent exercicis pendents
- A l'exemple qml05 surt aquest advertiment:
qt.qml.context: qrc:/qml05/main.qml:22:9 Parameter "event" is not declared. Injection of parameters into signal handlers is deprecated. Use JavaScript functions with formal parameters instead.
Solució (afegiu function(event)):
Keys.onDownPressed: square.y += 8
Keys.onPressed: function(event){
switch(event.key) {
case Qt.Key_Plus:
square.scale += 0.2
break;
case Qt.Key_Minus:
square.scale -= 0.2
break;
}
}
20251128
- Seguim amb QML
- Seguim fent exercicis pendents
20251124
- Seguim fent exercicis pendents
- Primer exemple:
import QtQuick
Window {
width: 640
height: 480
visible: true
title: qsTr("Primera prova. Curs 2025-2026")
Rectangle{
anchors.centerIn: parent
anchors.fill: parent
color: "lime"
Text{
anchors.centerIn: parent
text: "DAM 2025-2026"
color: "darkblue"
font.family: "Comic Sans"
font.pixelSize: 32
font.bold: true
}
}
}
PureQML
Posada en marxa del PureQML
- Instal·lació de l'eina python-future:
pip3 install future
A GNU/Linux Debian 13:
sudo apt update sudo apt install python3-venv python -m venv entorn source entorn/bin/activate deactivate
A Windows:
pip install future
- Primera aplicació
mkdir prjFolder cd prjFolder git clone https://github.com/pureqml/qmlcore.git git clone https://github.com/pureqml/controls.git ./qmlcore/build --boilerplate ./qmlcore/build
A Windows, les dues darreres passes:
python qmlcore/build --boilerplate python qmlcore/build
Obriu amb un navegador l'arxiu prjFolder/build.web/index.html
- Modificació de prjFolder/src/app.qml:
Text {
anchors.fill: context;
text: 'Primer exemple de pureQML';
color: 'red';
font.pixelSize: 32;
verticalAlignment: Text.AlignVCenter;
horizontalAlignment: Text.AlignHCenter;
}
Reconstruïu-ho:
./qmlcore/build
A Windows:
python qmlcore/build
Torneu a obrir amb un navegador l'arxiu prjFolder/build.web/index.html per a observar els canvis
Activitats A08.00 del recull de pràctiques de 2n de DAM. Curs_2026-2026
20251121
- Solucions de l'examen
- Nou exercici A06.03
- Seguim fent exercicis
20251117ex
The Emscripten versions are:
Qt 6.2: 2.0.14 Qt 6.3: 3.0.0 Qt 6.4: 3.1.14 Qt 6.5: 3.1.25 Qt 6.6: 3.1.37 Qt 6.7: 3.1.50 Qt 6.8: 3.1.56 Qt 6.9: 3.1.70 Qt 6.10: 4.0.7
Use emsdk to install specific Emscripten versions. For example, to install it for Qt 6.8 enter:
./emsdk install 3.1.70 ./emsdk activate 3.1.70
On Windows, Emscripten is in your path after installation. On macOS or Linux you need to add it to your path, like this:
source /path/to/emsdk/emsdk_env.sh
Check this with the following command:
em++ --version
20251114
Seguim fent els exercicis pendents de Qt i IoT del recull.
20251110
- Aneu a alguns exemples amb Qt i baixeu-vos 01_simpleclient_usr_pwd_CMake.zip, exQt_05.zip i ginyMqtt04_cmake.zip. Analitzem els codis i llur funcionament.
- Baixeu-vos tots els arxius d'avui al recull. Analitzem els codis i llur funcionament.
- Comencem A12.01 i A12.02 del recull
20251107
- Acabem exercicis pendents
- Connexió MQTT: botonera (codi font QML/Qt i apk per Android) i codi Snap! amb MQTT (sols temes) o codi Snap! amb MQTT (mou personatges) o codi Snap! amb MQTT (mou personatges amb blocs personalitzats)
20251031
- Acabem de comentar A06.2
- Introducció a l'ús del Node-RED
- Fem A07.02 i A07.03
20251027
- Acabem A06.02 del recull de pràctiques
set(CMAKE_AUTORCC ON)
20251024
- Fem A06.02 del recull de pràctiques
- Canvis al CMakeLists.txt (ho teniu penjat al recull del dia d'avui ex04siva.zip):
- Afegiu set(CMAKE_AUTORCC ON) - això processa automàticament els fitxers .qrc- (també és convenient, no necessari a aquesta pràctica, afegir set(CMAKE_AUTOMOC ON)) a CMakeLists.txt
20251017
- Seguim amb Pr03
void Giny::on_btCesar_clicked()
{
qDebug() << "Cesar";
//ui->lbNom->setText("César");
n+=2;
//ui->lbNom->setNum(n);
vEscriuNum(n);
emit senyalNum(n); // <----- !!!!!
}
void Base::vMostraN(int n){
//qDebug() << "Número: " << QString::number(ui->spN->value());
qDebug() << "Número: " << QString::number(n);
setN(n); // <-- !!!!!!!
}
20251013
- Dubtes del dia anterior
- Exercicis pendents
20251006
- Dubtes del dia anterior
- Seguim analitzant codis
- Exercicis pendents
20251003
- Analitzem term00_0x.zip i term01.zip.
- Analitzem pr00.zip i pr00_02.zip.
- Analitzem implementacions GUI en Qt/C++ (02_ .. 03_)
20250929
Control de la placa IoT-02 amb Snap! (Modifiqueu la MAC i poseu-hi la vostra)
20250926
- Instal·lació de l'IDE d'Arduino v2.3.6.
- Lliurament de les plaques IoT-02 que es faran servir durant el curs (al final del curs s'han de tornar).
- Addició de l'ESP32 a l'IDE d'Arduino (Instal·leu les versions 2 i 3 del compilador d'Espressif alhora).
- Prova de programació de microprogramari a la placa IoT-02.
- Control amb Snap!
- Analitzem term00_0x.zip i term01.zip.
20250922
Recull del dia 20250919 usuari: dam | contrasenya: dam2526
Instal·lació del Node-RED
Linux Installers for Node-RED
Per a Debian 13 i Raspberry Pi:
sudo apt install build-essential bash <(curl -sL https://github.com/node-red/linux-installers/releases/latest/download/update-nodejs-and-nodered-deb) sudo systemctl enable nodered sudo systemctl start nodered
Linux Installers for Node-RED (GitHub)
Running Node-RED locally
Running Node-RED locally (nodered.org)
Prova de funcionament del Node-RED
Instal·lació del Node-RED Dashboard 2.0
El Node-RED diu que la col·lecció de nodes node-red-dashboard és obsoleta. La versió actual és Node-RED Dashboard 2.0. En el moment de fer aquesta entrada no es pot instal·lar Node-RED Dashboard 2.0 des del mateix gestor del Node-RED.
Una solució és anar al directori .node-red i fer la instal·lació emprant npm
jb@clotfje:~$ cd ~/.node-red jb@clotfje:~/.node-red$ npm install @flowfuse/node-red-dashboard added 172 packages, and audited 173 packages in 7s 20 packages are looking for funding run `npm fund` for details found 0 vulnerabilities jb@clotfje:~/.node-red$ sudo systemctl stop nodered jb@clotfje:~/.node-red$ sudo systemctl start nodered jb@clotfje:~/.node-red$
Connectant Snap! i Node-RED mitjançant MQTT
20250919
Recull del dia 20250919 usuari: dam | contrasenya: dam2526
Distribució de M07UF1 i M13 al curs 2024-2025 (obsolet)
Distribució de M07UF1 i M13 al curs 2024-2025 de 2n de DAM
Qt
El Qt Creator serà l'IDE que farem servir per a desenvolupar el disseny d'aplicacions gràfiques d'usuari:
Aneu a la pàgina Qt for Open Source Development i cerqueu Download the Qt Online Installer. Baixeu-vos-ho i instal·leu-ho (us demana registrar-vos per a poder-ho instal·lar).
Paquets que manquen per a fer funcionar les Qt a l'Ubuntu:
sudo apt install libx11-xcb-dev libglu1-mesa-dev libxcb-xinerama0
IoT
- NodeRED (Running Node-RED locally)
Instal·lació de Node.js Guia d'instal·lació de node i npm
Supported Node versions on NodeRed
Verificació:
node --version npm --version
Instal·lació i funcionament del NodeRed autònom
ecat@iot-ecat:~$ mkdir bin ecat@iot-ecat:~$ cd bin ecat@iot-ecat:~/bin$ sudo apt install unzip ecat@iot-ecat:~/bin$ mkdir nodered-ui ecat@iot-ecat:~/bin$ cd nodered-ui ecat@iot-ecat:~/bin/nodered-ui$ wget https://www.binefa.cat/IoT/nodeRed/node_red_ui.zip ecat@iot-ecat:~/bin/nodered-ui$ unzip node_red_ui.zip ecat@iot-ecat:~/bin/nodered-ui$ 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
Si hi ha problemes de confiança amb el certificat al descarrega l'arxiu .zip, hi podeu afegir l'opció --no-check-certificate:
wget --no-check-certificate https://www.binefa.cat/IoT/nodeRed/node_red_ui.zip
Credencials IoT
#define EAP_ANONYMOUS_IDENTITY "CL-Internet_de_les_coses" #define EAP_IDENTITY "CL-Internet_de_les_coses" #define EAP_PASSWORD "CLioT2022_" #define EAP_USERNAME "CL-Internet_de_les_coses" const char* ssid = "IOTJE";
Repositori de codis fet a classe durant el curs
Codis fets a les classes de 2n de DAM usuari: dam | contrasenya: dam2526
Documentació
Curs2024-2025 Eina d'avaluació GP1 Curs 2024-2025 - Departament
Drive curs 2023-2024 (Alèxia, SAC). Eina d'avaluació GP1
Distribució de M07UF1 i M13 al curs 2022-2023 de 2n de DAM
Recull de pràctiques de 2n de DAM. Curs 2022-2023
Qt/QML
How To Install the Qt Educational License
Paquets que manquen per a fer funcionar les Qt a l'Ubuntu:
sudo apt install libx11-xcb-dev libglu1-mesa-dev libxcb-xinerama0 sudo apt install libxcb-cursor0 libxcb-cursor-dev
Activació de l'editor QML al QtCreator 6
Qt5 de Jan Bodnar
Qt5 Cadaques! A Book about Qt5
Qt Quick tutorial de Jan Bodnar
PyQt5 de Jan Bodnar
Instal·lació de QtMQtt a les Qt
Qt for Android
Getting Started with Qt for Android
Getting Started with Qt6.5 for Android
Qt for WebAssembly
json
How To Manipulate JSON With C++ and Qt
QProcess
Qt5 tutorial FFmpeg converter using QProcess - 2020
CMake
Cal fer la instal·lació d'aquests paquets a Debian 11:
sudo apt-get install libqt5svg5-dev qtscript5-dev sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev sudo apt purge ibus
Vídeos externs per aprendre QML
(Gentilesa d'en Raül Gil García)
- (10) Tutorial QML - YouTube
- qmlscene
- Tesla Model 3 Dashboard with Advanced Map Integration and Seamless Music Control Using QT QML
IoT
TCP/UDP Capa de transport d'Ethernet
Afegint la targeta ESP8266 a l'IDE d'Arduino (NodeMCU1.0)
Micropython and the Internet of Things
SCADA fent servir Python QML i Arduino
Placa IoT-02
Per a la programació amb l'IDE d'Arduino: https://dl.espressif.com/dl/package_esp32_index.json
LoRaWAN
Consola de The Things Stack (Community Edition) de The Things Network
Presentació LoRaWAN (esborrany v0.4)
Recull introductori per a treballar amb LoRa ( usuari: dam / contrasenya: dam2122)
Recull de pràctiques de 2n de DAM. Curs 2021-2022
Transmissió d'un número real de tipus IEEE-754 (4 bytes) i llur recuperació a NodeRED