Diferència entre revisions de la pàgina «DAM 2022-2023»

De binefa.com
Salta a la navegació Salta a la cerca
 
(Hi ha 272 revisions intermèdies del mateix usuari que no es mostren)
Línia 1: Línia 1:
Quan tingueu les credencials d'accés a la [https://clot.fje.edu/ca NET] heu de compartir-me una carpeta amb aquest nom: '''2223-DAM-1rCognom2nCognomNom''' (Per exemple, si el teu nom és Xavier López Pujol --> ''2223-DAM-LopezPujolXavier''). A aquest enllaç podreu veure si ja hi sou a la llista:
+
Quan tingueu les credencials d'accés a la [https://clot.fje.edu/ca NET] heu de compartir una carpeta amb aquest nom: '''2223-DAM-1rCognom2nCognomNom''' (Per exemple, si el vostre nom és Xavier López Pujol --> ''2223-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 2022-2023]]
 
[[Carpetes compartides de 2n de DAM. Curs 2022-2023]]
Línia 7: Línia 7:
  
 
[https://meet.google.com/wwr-knez-ukp Teleconferència provisional per a compartir pantalla i confinats]
 
[https://meet.google.com/wwr-knez-ukp Teleconferència provisional per a compartir pantalla i confinats]
 +
=== Accessos ràpids ===
 +
[[Recull de pràctiques de 2n de DAM. Curs 2022-2023]]
  
== 20220912 (3h) ==
+
[[Vídeos QML]]
[https://meet.google.com/wwr-knez-ukp Teleconferència pel dia d'avui]
+
 
 +
[[Introducció al QML. Curs 2022-2023]]
 +
== 20230525 '''Lliurament de projectes''' ==
 +
Lliurament de projectes
 +
== 20230522 '''Darrer dia de classe''' ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230518 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230515 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230512 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230511 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230508 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230505 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230504 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230427 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230424 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230420 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230417 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230414 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230413 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230331 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230330 ==
 +
* Seguim desenvolupant GP3
 +
== 20230327 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
* Seguim fent M07UF1
 +
 
 +
== 20230324 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230323 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230320 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230316 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230313 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
* Seguim fent M07UF1
 +
 
 +
== 20230310 ==
 +
* Seguim desenvolupant GP3
 +
 
 +
== 20230306 (2h) '''GP3''' ==
 +
* Dues primeres hores: GP3
 +
 
 +
* Tercera hora: Qt/QML
 +
 
 +
== 20230303 (2h) ==
 +
* Darrer dia de les pràctiques del [[Recull de pràctiques de 2n de DAM. Curs 2022-2023 | recull]]
 +
 
 +
== 20230227 (2h) '''Examen Projecte Global. Part Internet de les Coses''' ==
 +
[https://recull.binefa.cat/files/20230227exPrjGlobal_IoT/ Examen Projecte Global. Part Internet de les Coses] usuari: dam | contrasenya: dam2223
 +
 
 +
== 20230227 (1h) '''Examen Parcial M07UF1. Qt i QML''' ==
 +
[https://recull.binefa.cat/files/20230227exParcialM07UF1/ Examen Parcial M07UF1. Qt i QML] usuari: dam | contrasenya: dam2223
 +
 
 +
== 20230224 (2h) ==
 +
* Seguim fent les pràctiques del [[Recull de pràctiques de 2n de DAM. Curs 2022-2023 | recull]]
 +
 
 +
[https://recull.binefa.cat/files/material/mqttQml/ Material d'ajuda mqttQml]
 +
 
 +
== 20230223 (1h) ==
 +
* [https://recull.binefa.cat/files/material/mqttQml/ Exemples de QML amb TCP-MQTT i ws-MQTT]
 +
 
 +
== 20230217 (2h) ==
 +
[https://recull.binefa.cat/files/20230217/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
Seguim fent els exercicis pendents del [[Recull de pràctiques de 2n de DAM. Curs 2022-2023 | recull de pràctiques]].
 +
 
 +
== 20230216 (1h + 1h) ==
 +
[https://recull.binefa.cat/files/20230216/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
* Pràctica '''A14.7''' [https://userland.tech/ UserLand] al [[Recull de pràctiques de 2n de DAM. Curs 2022-2023 | recull de pràctiques]]. Es tracta d'instal·lar com a aplicació del vostre telèfon mòbil Android (real o simulat) un sistema Debian. A aquest sistema, dins de l'aplicació UserLand, hi instal·lareu un NodeRed que serà visible des del vostre ordinador.
 +
 
 +
* Afegida la pràctica '''A17.04'''. Lectura de dades de la placa IoT-02, visualitzant-les a Grafana, emprant NodeRed, InfluxDB.
 +
 
 +
== 20230213 (3h) ==
 +
[https://recull.binefa.cat/files/20230213/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
* S'han afegit les pràctiques '''A14.5''', '''A14.6''' i '''A17.03''' al [[Recull de pràctiques de 2n de DAM. Curs 2022-2023 | recull de pràctiques]]. És la instal·lació de Grafana i InfluxDB al vostre sistema operatiu.
 +
 
 +
* Instal·leu [https://flows.nodered.org/node/node-red-contrib-influxdb node-red-contrib-influxdb] al vostre NodeRed.
 +
 
 +
* Seguim fent els exercicis pendents del [[Recull de pràctiques de 2n de DAM. Curs 2022-2023 | recull de pràctiques]].
 +
 
 +
== 20230210 (2h) ==
 +
[https://recull.binefa.cat/files/20230202/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
* S'ha afegit la pràctica '''A10.3''' al [[Recull de pràctiques de 2n de DAM. Curs 2022-2023 | recull de pràctiques]]. És una pràctica bàsica de la biblioteca '''Paho''' emprant Python.
 +
 
 +
* Seguim fent els exercicis pendents del [[Recull de pràctiques de 2n de DAM. Curs 2022-2023 | recull de pràctiques]].
 +
 
 +
=== '''Paho''' - MQTT i Python ===
 +
# pip install paho-mqtt
 +
 
 +
A una cel·la del jupyter-lab:
 +
 +
import random
 +
 +
import paho.mqtt.subscribe as subscribe
 +
import paho.mqtt.client as mqtt
 +
import paho.mqtt.properties as properties
 +
 +
mqttc = mqtt.Client('idClient-'+str(random.randrange(100000,999999)))
 +
# mqttc.username_pw_set("usuari","contrasenya");
 +
mqttc.connect("broker.emqx.io", 1883)
 +
 +
def on_message(clientId, userdata, message):
 +
    msg = str(message.payload.decode("utf-8"))
 +
    print('topic = ', message.topic)
 +
    print('payload = ', msg)
 +
 +
mqttc.on_message = on_message
 +
mqttc.subscribe('topicName')
 +
 
 +
A una altra cel·la del jupyter-lab:
 +
mqttc.loop_start()
 +
 
 +
[https://techoverflow.net/2021/12/27/how-to-set-username-password-in-paho-mqtt/ Usuari i contrasenya a MQTT emprant Paho]
 +
 
 +
* Publicació MQTT des de Paho:
 +
mqttc.publish('topicName','Escola del clot')
 +
 
 +
== 20230209 (1h) ==
 +
[https://recull.binefa.cat/files/20230202/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
Seguim fent els exercicis pendents del [[Recull de pràctiques de 2n de DAM. Curs 2022-2023 | recull de pràctiques]].
 +
 
 +
=== Alternativa a ''sys.argv'': argparser ===
 +
[https://docs.python.org/3/library/argparse.html '''argparser''' - Parser for command-line options, arguments and sub-commands]
 +
 
 +
[https://docs.python.org/3/howto/argparse.html Argparse Tutorial]
 +
 
 +
== 20230206 (3h) ==
 +
[https://recull.binefa.cat/files/20230202/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
Seguim fent els exercicis pendents del [[Recull de pràctiques de 2n de DAM. Curs 2022-2023 | recull de pràctiques]].
 +
 
 +
=== '''Mastodon''' ===
 +
* Mastodon, una alternativa lliure a Twitter
 +
 
 +
No totes les instàncies de [https://ca.wikipedia.org/wiki/Mastodon_(xarxa_social) Mastodon] faciliten la instal·lació de ''bots''. Per a fer els primers passos us recomano aquesta [https://botsin.space/ instància pensada per a hostatjar ''bots'' de Mastodon] ('''tal i com es va demanar el dia anterior, heu d'haver demanat les credencials a la instància de Mastodon [https://botsin.space/ botsin.space] amb molta antelació. Si ho sol·liciteu avui mateix no podreu seguir la classe''').
 +
 
 +
 
 +
[https://botsin.space/@siarq_sensors Exemple de bot de Mastodon] per a fer lectures de sensors cada hora.
 +
 
 +
<!--[https://gist.github.com/aparrish/661fca5ce7b4882a8c6823db12d42d26 Getting credentials for the Mastodon API with Mastodon.py, step by step]
 +
 
 +
[[Getting credentials for the Mastodon API with Mastodon.py, step by step]] -->
 +
[[Obtenció de les credencials per a l'API de Mastodon amb Mastodon.py, pas per pas]]
 +
 
 +
== 20230203 (2h) ==
 +
[https://recull.binefa.cat/files/20230202/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
Seguim fent els exercicis pendents del [[Recull de pràctiques de 2n de DAM. Curs 2022-2023 | recull de pràctiques]].
 +
 
 +
* Pujats els nous exercicis '''A10.1''', '''A10.2''', '''A14.1''', '''A14.2''', '''A14.3''' i '''A14.4''' al [[Recull de pràctiques de 2n de DAM. Curs 2022-2023 | recull de pràctiques]].
 +
 
 +
=== Autenticació d'accés a NodeRED ===
 +
[https://nodered.org/docs/user-guide/runtime/securing-node-red Securing NodeRED]
 +
 
 +
Generació de la contrasenya d'accés en mode hash des de la carpeta d'execució del NodeRED:
 +
node node_modules/node-red/red.js admin hash-pw
 +
 
 +
En aquest exemple fem servir aquesta contrasenya en mode hash:
 +
'''$2a$08$PbYFpiQSnoVaOfD1daCelU2Kvcg19KElO1DbVtE8GAJXacD6ABq'''
 +
 
 +
Edició de '''settings.js''':
 +
toni@vps-10d8edcd:~/bin/nodered$ nano ./node_modules/node-red/settings.js
 +
 
 +
    // Securing Node-RED
 +
    // -----------------
 +
    // To password protect the Node-RED editor and admin API, the following
 +
    // property can be used. See http://nodered.org/docs/security.html for details.
 +
    adminAuth: {
 +
        type: "credentials",
 +
        users: [{
 +
            username: "'''toni'''",
 +
            password: "'''$2a$08$PbYFpiQSnoVaOfD1daCelU2Kvcg19KElO1DbVtE8GAJXacD6ABq'''",
 +
            permissions: "*"
 +
        }]
 +
    },
 +
 
 +
Un cop fets el canvis '''cal reiniciar el NodeRED'''.
 +
 
 +
=== '''Telegram''' ===
 +
[https://wiki.binefa.cat/index.php?title=Bot_de_Telegram Bot de Telegram]
 +
 
 +
* Creació de bots amb BotFather
 +
 
 +
* Instal·lació de nodes de Telegram a NodeRED (afegiu els nodes [https://flows.nodered.org/node/node-red-contrib-telegrambot '''node-red-contrib-telegrambot'''])
 +
 
 +
* Interacció amb un usuari de Telegram
 +
 
 +
* Interacció amb un grup de Telegram
 +
 
 +
[https://recull.binefa.cat/files/doc/bots Material per a fer el bot i flux de prova per al bot de Telegram]
 +
 
 +
== 20230202 (1h) ==
 +
[https://recull.binefa.cat/files/20230202/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
Seguim fent els exercicis pendents del [[Recull de pràctiques de 2n de DAM. Curs 2022-2023 | recull de pràctiques]].
 +
 
 +
== 20230130 (3h) ==
 +
[https://recull.binefa.cat/files/20230127/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
'''No us oblideu de dur la placa!'''
 +
 
 +
Seguim fent els exercicis pendents del [[Recull de pràctiques de 2n de DAM. Curs 2022-2023 | recull de pràctiques]].
 +
 
 +
* Plantejament de l'exercici '''A18.01''' (Recepció de dades LoRa, emprant el rerefons de The Things Network i un visualitzador QML) del [[Recull de pràctiques de 2n de DAM. Curs 2022-2023 | recull de pràctiques]].
 +
 
 +
* En cas de no tenir-ne, feu-vos un compte de [https://telegram.org/ Telegram].
 +
 
 +
* Feu-vos un compte a aquesta [https://botsin.space/ instància pensada per a hostatjar ''bots'' de Mastodon] (triga un temps en activar-se).
 +
 
 +
=== '''Mastodon''' ===
 +
* Mastodon, una alternativa lliure a Twitter
 +
 
 +
No totes les instàncies de [https://ca.wikipedia.org/wiki/Mastodon_(xarxa_social) Mastodon] faciliten la instal·lació de ''bots''. Per a fer els primers passos us recomano aquesta [https://botsin.space/ instància pensada per a hostatjar ''bots'' de Mastodon] ('''tal i com es va demanar el dia anterior, heu d'haver demanat les credencials a la instància de Mastodon [https://botsin.space/ botsin.space] amb molta antelació. Si ho sol·liciteu avui mateix no podreu seguir la classe''').
 +
 
 +
 
 +
[https://botsin.space/@siarq_sensors Exemple de bot de Mastodon] per a fer lectures de sensors cada hora.
 +
 
 +
<!--[https://gist.github.com/aparrish/661fca5ce7b4882a8c6823db12d42d26 Getting credentials for the Mastodon API with Mastodon.py, step by step]
 +
 
 +
[[Getting credentials for the Mastodon API with Mastodon.py, step by step]] -->
 +
[[Obtenció de les credencials per a l'API de Mastodon amb Mastodon.py, pas per pas]]
 +
 
 +
== 20230127 (2h) ==
 +
[https://recull.binefa.cat/files/20230127/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
'''No us oblideu de dur la placa!'''
 +
 
 +
[[Formació d'Internet de les Coses - 2a sessió. Viladecans 20 d'octubre de 2022 | Introducció a LoRa / LoRaWAN]]
 +
 
 +
* [https://recull.binefa.cat/files/doc/iot02/loraWan/lora/codis/unions_01.c Exemple de conversió bidireccional de ''float'' a cadena ''unsigned char'' fent servir ''union''].
 +
 
 +
* Nodes a carregar al NodeRed:
 +
 
 +
[https://flows.nodered.org/node/node-red-contrib-float node-red-contrib-float]
 +
 
 +
[https://flows.nodered.org/node/node-red-node-base64 node-red-node-base64]
 +
 
 +
* Exemple de recopilació de dades trameses per la [[Placa IoT-02 | placa IoT-02]] mitjançant LoRa des de NodeRed (arxius al [https://recull.binefa.cat/files/20230127/ recull del dia d'avui]).
 +
 
 +
* Plantejament dels exercicis '''A17.01''' (Presa de contacta amb LoRa mitjançant The Things Network) i '''A17.02''' (Tramesa de dades emprant LoRa, The Things Network i NodeRed) del [[Recull de pràctiques de 2n de DAM. Curs 2022-2023 | recull de pràctiques]].
 +
 
 +
== 20230126 (1h) ==
 +
Seguim fent les activitats plantejades al [[Recull de pràctiques de 2n de DAM. Curs 2022-2023]].
 +
 
 +
== 20230123 (3h) '''LoRa''' ==
 +
[https://recull.binefa.cat/files/20230123/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
'''No us oblideu de dur la placa!'''
 +
 
 +
Doneu-vos d'alta a [https://www.thethingsnetwork.org/ thethingsnetwork.org]
 +
 
 +
[[Formació d'Internet de les Coses - 2a sessió. Viladecans 20 d'octubre de 2022 | Introducció a LoRa / LoRaWAN]]
 +
 
 +
== 20230120 (2h) ==
 +
[https://recull.binefa.cat/files/20230120/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
Seguim fent les activitats plantejades al [[Recull de pràctiques de 2n de DAM. Curs 2022-2023]].
 +
 
 +
== 20230119 (1h) ==
 +
[https://recull.binefa.cat/files/20230119/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
Seguim fent les activitats plantejades al [[Recull de pràctiques de 2n de DAM. Curs 2022-2023]].
 +
 
 +
== 20230116 (3h) ==
 +
[https://recull.binefa.cat/files/20230116/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
Seguim fent les activitats plantejades al [[Recull de pràctiques de 2n de DAM. Curs 2022-2023]].
 +
 
 +
== 20230113 (2h) ==
 +
[https://recull.binefa.cat/files/20230113/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
Seguim fent les activitats plantejades al [[Recull de pràctiques de 2n de DAM. Curs 2022-2023]].
 +
 
 +
== 20230112 (1h) ==
 +
[https://recull.binefa.cat/files/20230112/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
Seguim fent les activitats plantejades el darrer dia. Han estat afegides, a [[Recull de pràctiques de 2n de DAM. Curs 2022-2023]], les pràctiques A08.05, A08.06 i A07.03, que són per a controlar remotament, mitjançant MQTT, un joc de tenis taula.
 +
 
 +
== 20230109 (3h) ==
 +
[https://recull.binefa.cat/files/20230109/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
Seguim fent les activitats plantejades el darrer dia. Han estat afegides, a [[Recull de pràctiques de 2n de DAM. Curs 2022-2023]], les pràctiques A13.03, A13.04 i A13.05, que són la versió en QML de la darrera pràctica feta amb Qt. Les dues darreres pràctiques plantejades avui són la implementació fent servir sòcols web, que permeten l'execució sobre pàgina web (per tant, poden funcionar amb WebAssembly i PureQML).
 +
 
 +
Al recull d'avui hi ha codi per ajudar a fer la pràctica emprant sòcols web MQTT.
 +
 
 +
void IndicadorLed::vSetLabelColor(QLabel* et,QColor col, QColor rerefons){
 +
    QPixmap *pix = new QPixmap(22,22);
 +
    QPainter *paint = new QPainter(pix);
 +
    paint->setBrush(rerefons);
 +
    paint->drawRect(0, 0, 21, 21);
 +
    paint->setBrush(col);
 +
    paint->setPen(Qt::white);
 +
    paint->drawEllipse(5, 5, 10, 10);
 +
    et->setPixmap(*pix);
 +
}
 +
 
 +
== 20221219 (4h) ==
 +
[https://recull.binefa.cat/files/20221219/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
Seguim fent les activitats plantejades el darrer dia.
 +
 
 +
Pujat al recull d'avui l'arxiu [https://recull.binefa.cat/files/20221219/ginyMqtt04.zip ginyMqtt04.zip] (Per a fer la connexió MQTT des de Qt)
 +
 
 +
== 20221216 (2h) ==
 +
Seguim fent les activitats plantejades el darrer dia:
 +
 
 +
* [[Recull_de_pràctiques_de_2n_de_DAM._Curs_2022-2023#A12.02 | A12.02 - Programa en Qt per a interaccionar amb la placa IoT-02]]
 +
 
 +
* [[Recull_de_pràctiques_de_2n_de_DAM._Curs_2022-2023#A15.04_-_Codi_de_la_placa_IoT-02_per_a_que_funcioni_amb_l.27activitat_A12.02 | A15.04 - Programa per la IoT-02 per a interaccionar amb el programa fet amb Qt de l'activitat A12.02]]
 +
 
 +
== 20221215 (1h) ==
 +
[https://recull.binefa.cat/files/20221215/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
Seguim fent les activitats plantejades el darrer dia:
 +
 
 +
* [[Recull_de_pràctiques_de_2n_de_DAM._Curs_2022-2023#A15.03_-_IoT-02_servint_p.C3.A0gina_web_per_a_canviar_contrasenya | A15.03 - IoT-02 servint pàgina web per a canviar contrasenya]]
 +
 
 +
* [[Recull_de_pràctiques_de_2n_de_DAM._Curs_2022-2023#A12.02 | A12.02 - Programa en Qt per a interaccionar amb la placa IoT-02]]
 +
 
 +
* [[Recull_de_pràctiques_de_2n_de_DAM._Curs_2022-2023#A15.04_-_Codi_de_la_placa_IoT-02_per_a_que_funcioni_amb_l.27activitat_A12.02 | A15.04 - Programa per la IoT-02 per a interaccionar amb el programa fet amb Qt de l'activitat A12.02]]
 +
 
 +
== 20221212 (3h) ==
 +
[https://recull.binefa.cat/files/20221212/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
[http://www.xtec.cat/formaciotic/ateneu_historic/materials/td97/d97m5/d97m5te.htm Repàs apuntadors]
 +
 
 +
Seguim fent les activitats plantejades el darrer dia:
 +
 
 +
* [[Recull_de_pràctiques_de_2n_de_DAM._Curs_2022-2023#A15.03_-_IoT-02_servint_p.C3.A0gina_web_per_a_canviar_contrasenya | A15.03 - IoT-02 servint pàgina web per a canviar contrasenya]]
 +
 
 +
* [[Recull_de_pràctiques_de_2n_de_DAM._Curs_2022-2023#A12.02 | A12.02 - Programa en Qt per a interaccionar amb la placa IoT-02]]
 +
 
 +
* [[Recull_de_pràctiques_de_2n_de_DAM._Curs_2022-2023#A15.04_-_Codi_de_la_placa_IoT-02_per_a_que_funcioni_amb_l.27activitat_A12.02 | A15.04 - Programa per la IoT-02 per a interaccionar amb el programa fet amb Qt de l'activitat A12.02]]
 +
 
 +
== 20221205 (3h) ==
 +
[https://recull.binefa.cat/files/20221205/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
* [[Recull_de_pràctiques_de_2n_de_DAM._Curs_2022-2023#A15.03_-_IoT-02_servint_p.C3.A0gina_web_per_a_canviar_contrasenya | A15.03 - IoT-02 servint pàgina web per a canviar contrasenya]]
 +
 
 +
* [[Recull_de_pràctiques_de_2n_de_DAM._Curs_2022-2023#A12.02 | A12.02 - Programa en Qt per a interaccionar amb la placa IoT-02]]
 +
 
 +
* [[Recull_de_pràctiques_de_2n_de_DAM._Curs_2022-2023#A15.04_-_Codi_de_la_placa_IoT-02_per_a_que_funcioni_amb_l.27activitat_A12.02 | A15.04 - Programa per la IoT-02 per a interaccionar amb el programa fet amb Qt de l'activitat A12.02]]
 +
 
 +
== 20221201 (1h + 1h tutoria accidental) ==
 +
[https://recull.binefa.cat/files/20221201/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
== 20221128 (3h) ==
 +
[https://recull.binefa.cat/files/20221125/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
[https://doc.qt.io/qt-6.2/wasm.html WebAssembly i Emscripten a Qt/QML]
 +
 
 +
import QtQuick 2.15
 +
import QtQuick.Window 2.15
 +
 +
Window {
 +
    width: 640
 +
    height: 480
 +
    visible: true
 +
    title: qsTr("Títol")
 +
    Rectangle{
 +
        color: "lime"
 +
        anchors.centerIn: parent
 +
        width: parent.width - 20
 +
        height: parent.height - 20
 +
        Text {
 +
            id: name
 +
            text: qsTr("Una prova")
 +
            color: "blue"
 +
            anchors.centerIn: parent
 +
            font.pixelSize: 32
 +
            font.family: "Helvetica"
 +
        }
 +
    }
 +
}
 +
 
 +
== 20221125 (2h) ==
 +
[https://recull.binefa.cat/files/20221125/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
Avui és el darrer dia d'entrada de notes del primer trimestre. És convenient que acabeu les activitats pendents.
 +
 
 +
Al recull d'avui podeu veure les notes de les activitats fins al dia d'ahir.
 +
 
 +
== 20221124 (1h + 1h tutoria) ==
 +
[https://recull.binefa.cat/files/20221124/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
* '''Classe'''
 +
 
 +
Seguim fent '''A08.04''' i '''A12.01'''
 +
 
 +
Demà, 25 de novembre, és el darrer dia d'entrada de notes del primer trimestre. És convenient que acabeu les activitats pendents.
 +
 
 +
* '''Tutoria ''accidental'' del 24 de novembre de 2022'''
 +
 
 +
[https://forms.gle/6zfamTGjRqyyKxfR6 22-23  Enquesta d'inici de curs]
 +
 
 +
Aclariments:
 +
 
 +
- Per poder respondre han de tenir oberta la sessió de correu fje.edu, encara que l'enquesta és anònima.
 +
 
 +
- El sistema només permet respondre una sola vegada per usuari.
 +
 
 +
- Hi ha preguntes que tenen la possibilitat de respostes múltiples i d'altres de resposta única.
 +
 
 +
- Hi ha respostes que demanen un breu raonament.
 +
 
 +
- El temps a dedicar-hi no va més enllà dels 10 minuts.
 +
 
 +
== 20221121 (3h) ==
 +
[https://recull.binefa.cat/files/20221121/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
[[Recull de pràctiques de 2n de DAM. Curs 2022-2023]]
 +
 
 +
[[Vídeos QML]]
 +
 
 +
[[Introducció al QML. Curs 2022-2023]]
 +
 
 +
Per afegir '''QMLDesigner''' a l'entorn del QtCreator: Aneu al menú ''Help'' / ''About pluggins'' / Seleccioneu ''QMLDesigner''
 +
 
 +
Per afegir un nou formulari: '''nomForm.ui.qml'''
 +
 
 +
== 20221117 (1h) ==
 +
[https://recull.binefa.cat/files/20221114/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
[[Recull de pràctiques de 2n de DAM. Curs 2022-2023]]
 +
 
 +
== 20221114 (3h) '''A08 - QML, connexió a rerefons Qt i PureQML''' ==
 +
[https://recull.binefa.cat/files/20221114/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
'''L'exercici A06.03 passa a ser l'A12.01'''
 +
 
 +
'''L'exercici fr-mw-2 d'A09.01 i A09.02 passa a ser A15.01 i A15.02'''
 +
 
 +
[https://pureqml.com/ PureQML]
 +
 
 +
[[Introducció al QML. Curs 2022-2023]]
 +
 
 +
=== PureQML ===
 +
[https://pureqml.com/ Pàgina oficial de PureQML]
 +
 
 +
==== Posada en marxa del PureQML ====
 +
* Instal·lació de l'eina '''python-future''':
 +
pip3 install future
 +
A Windows:
 +
pip install future
 +
 
 +
* Primera aplicació
 +
mkdir prjFolder
 +
cd prjFolder
 +
git clone https://github.com/pureqml/qmlcore.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
 +
 
 +
== 20221111 (2h) ==
 +
[https://recull.binefa.cat/files/20221111/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
Revisem projectes pujats a la carpeta compartida i acabem els que tenim pendents.
 +
 
 +
== 20221110 (1h) ==
 +
[https://recull.binefa.cat/files/20221110/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
'''A9.01''': fent servir '''Microworkers''' emprant MicroPython
 +
 
 +
'''A9.02''': fent servir '''FreeRTOS''' emprant l'IDE d'Arduino
 +
 
 +
[https://provisional.binefa.com/index.php/DAM_2022-2023#20221028_.282h.29_A9 Més informació sobre la pràctica A09]
 +
 
 +
== 20221107 (3h) ==
 +
[https://recull.binefa.cat/files/20221107/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
== 20221104 (2h) ==
 +
[https://recull.binefa.cat/files/20221104/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
Ens posem al dia amb les pràctiques pendents.
 +
== 20221103 (1h) '''QDialog''' ==
 +
[https://recull.binefa.cat/files/20221103/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
Al recull d'avui hi ha un exemple de codi emprant la classe ''QDialog''.
 +
 
 +
[https://doc.qt.io/qt-6/examples-dialogs.html Exemples de diàlegs en Qt6]
 +
 
 +
== 20221028 (2h) '''A9''' ==
 +
[https://recull.binefa.cat/files/20221028/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
 
 +
'''A9.01''': fent servir '''Microworkers''' emprant MicroPython
 +
 
 +
'''A9.02''': fent servir '''FreeRTOS''' emprant l'IDE d'Arduino
 +
=== FreeRTOS i MicroWorkers ===
 +
==== fr-mw-1) Presa de contacte amb FreeRTOS ====
 +
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.
 +
 
 +
==== 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 [https://github.com/jordibinefa/IoT-02/tree/master/micropython/prj_mqtt_json 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 [https://github.com/jordibinefa/IoT-02/tree/master/codes/IoT-02_mqtts_freeRTOS_json_12 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-).
 +
 
 +
[[Recull de pràctiques de 2n de DAM. Curs 2022-2023]]
 +
===== fr-mw-2.2) Publicació =====
 +
Si '''bSocConnectat''' és certa, publica el canvi d'estat del botó quan es prem I35.
 +
 
 +
===== fr-mw-2.3) 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.
 +
 
 +
== 20221027 (1h) '''MicroPython''' ==
 +
[https://recull.binefa.cat/files/20221027/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
Seguim amb MicroPython
 +
 
 +
[https://github.com/ttncat/viladecans-formacio-iot-2022/blob/master/02-dispositius/Viladecans%20-%2002%20-%20Dispositius.pdf Pistes per a la instal·lació de MicroPython a les pàgines 49 a 52]
 +
 
 +
[https://github.com/jczic/MicroWorkers MicroWorkers]
 +
 
 +
== 20221024 (3h) ==
 +
[https://recull.binefa.cat/files/20221024/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
* [https://github.com/ttncat/viladecans-formacio-iot-2022/tree/master/02-dispositius MicroPython a la placa IoT-02]
 +
 
 +
* [https://recull.binefa.cat/files/doc/projecteGlobal/activitats/a06/A06.03/ Exercici '''A06.03'''] (Heu de desar a la carpeta '''A06''' un document '''2223-DAM-''A06.03''-1rCognom2nCognomNom.pdf''' amb les solucions explicades i un arxiu '''2223-DAM-''A06.02''-1rCognom2nCognomNom.zip''' amb els codis comprimits, sense el '''.pro.user''').
 +
 
 +
== 20221021 (2h) ==
 +
[https://recull.binefa.cat/files/20221021/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
== 20221020 (1h) '''Menús a QMainWindow''' ==
 +
[https://recull.binefa.cat/files/20221020/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
== 20221017 (3h) ==
 +
* Dubtes
 +
 
 +
* Finalització de les subactivitats pendents
 +
 
 +
== 20221014 (2h) '''A06.02''', '''A06.03''', '''A07.01''' i '''A07.02''' ==
 +
[https://recull.binefa.cat/files/20221013/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
* Dubtes
 +
 
 +
* Acabem les subactivitats pendents (A06.02, A06.03, A07.01 i/o A07.02).
 +
 
 +
== 20221013 (1h) '''A07.02'''==
 +
[https://recull.binefa.cat/files/20221013/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
* Feu-vos un usuari a [https://wokwi.com/ Wokwi]. Us podeu autenticar fent servir el vostre usuari a l'Escola o el vostre usuari personal a GMail.
 +
 
 +
Feu-vos una còpia a la vostra zona a [https://wokwi.com/ Wokwi] d'aquest  [https://wokwi.com/projects/341892004923310676 bessó digital d'un ESP32, implementat en micropython, comunicant mitjançant MQTT]. Canvieu la MAC del bessó digital per la MAC de la vostra [[Placa IoT-02 | placa IoT-02]].
 +
 
 +
* Exercici '''A07.02''' (Heu de desar a la carpeta '''A07''' un document '''2223-DAM-''A07.02''-1rCognom2nCognomNom.pdf''' amb l'explicació de com heu modificat la MAC (escrivint-hi la de la vostra [[Placa IoT-02 | placa IoT-02]]) del [https://wokwi.com/projects/341892004923310676 bessó digital] copiat a la vostra zona de [https://wokwi.com/ Wokwi]. Feu el document fent servir '''com a controladors l'Snap!, NodeRED, i el codi amb QtMqtt''' [https://recull.binefa.cat/files/20221013/ginyMqtt04.zip ginyMqtt04]. I '''com a dispositius la vostra còpia modificada del [https://wokwi.com/projects/341892004923310676 bessó digital] i  la [[Placa IoT-02 | placa IoT-02]]''' per a provar la bidireccionalitat de la comunicació MQTT amb el botó i el led.
 +
 
 +
* Explicació dels codis [https://recull.binefa.cat/files/20221013/ginyMqtt00.zip ginyMqtt00] fins a [https://recull.binefa.cat/files/20221013/ginyMqtt04.zip ginyMqtt04], que fan servir ginys QWidget i QtMqtt.
 +
 
 +
== 20221010 (3h) '''A06.02''', '''A07.01''' i '''A06.03''' ==
 +
[https://recull.binefa.cat/files/20221010/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
* Exercici '''A06.02''' (Heu de desar a la carpeta '''A06''' un document '''2223-DAM-''A06.02''-1rCognom2nCognomNom.pdf''' amb l'explicació del procés per a instal·lar QtMqtt al vostre sistema. Verifiqueu que us funciona fent servir el codi de la carpeta de l'[https://recull.binefa.cat/files/doc/projecteGlobal/activitats/a06/A06.02/ exercici A06.02]
 +
 
 +
- Si feu servir Windows i no teniu el llenguatge ''perl'' instal·lat, [https://strawberryperl.com/ instal·leu ''perl'']
 +
 
 +
ecat@iot-ecat:~/Qt/6.2.4/gcc_64/lib$ '''git clone git://code.qt.io/qt/qtmqtt.git'''
 +
ecat@iot-ecat:~/Qt/6.2.4/gcc_64/lib$ '''cd qtmqtt/'''
 +
ecat@iot-ecat:~/Qt/6.2.4/gcc_64/lib/qtmqtt$ '''git checkout 6.1''' (malgrat tingueu la 6.2.4)
 +
ecat@iot-ecat:~/Qt/6.2.4/gcc_64/lib/qtmqtt$ rm -r examples/
 +
 
 +
Mitjançant el '''Qt Creator''' obriu el projecte /home/ecat/Qt/6.2.4/gcc_64/lib/qtmqtt/'''qtmqtt.pro'''. Aneu al menú i seleccioneu '''Build / Run qmake'''
 +
 
 +
ecat@iot-ecat:~/Qt/6.2.4/gcc_64/lib/qtmqtt$ '''make'''
 +
ecat@iot-ecat:~/Qt/6.2.4/gcc_64/lib/qtmqtt$ '''sudo make install'''
 +
 
 +
[https://nuwen.net/files/mingw/history/mingw-17.1.exe Descàrrega del C++ 17] per Windows.
 +
 
 +
Compilació i instal·lació des de Windows, un cop instal·lat [https://nuwen.net/files/mingw/history/mingw-17.1.exe C++ 17] (i la ruta del PATH havent afegit '''C:\MinGW\bin''').
 +
 
 +
'''mingw32-make.exe'''
 +
'''mingw32-make.exe install'''
 +
 
 +
* Exercici '''A07.01''' (Heu de desar a la carpeta '''A07''' un document '''2223-DAM-''A07.01''-1rCognom2nCognomNom.pdf''' amb l'explicació del procés de fer servir la modificació de '''simpleclient''', anomenant-la '''simpleclientUsrPwd''', incorporant usuari i contrasenya. Heu de comunicar la [[Placa IoT-02 | placa IoT-02]] de forma bidireccional amb  '''simpleclientUsrPwd'''.
 +
 
 +
void MainWindow::on_buttonConnect_clicked()
 +
{
 +
    if (m_client->state() == QMqttClient::Disconnected) {
 +
        ui->lineEditHost->setEnabled(false);
 +
        ui->spinBoxPort->setEnabled(false);
 +
        ui->buttonConnect->setText(tr("Disconnect"));
 +
        '''ui->leUser->setEnabled(false);'''
 +
        '''ui->lePwd->setEnabled(false);'''
 +
        '''m_client->setUsername(ui->leUser->text());'''
 +
        '''m_client->setPassword(ui->lePwd->text());'''
 +
        m_client->connectToHost();
 +
    } else {
 +
        ui->lineEditHost->setEnabled(true);
 +
        ui->spinBoxPort->setEnabled(true);
 +
        '''ui->leUser->setEnabled(true);'''
 +
        '''ui->lePwd->setEnabled(true);'''
 +
        ui->buttonConnect->setText(tr("Connect"));
 +
        m_client->disconnectFromHost();
 +
    }
 +
}
 +
 
 +
* [https://recull.binefa.cat/files/doc/projecteGlobal/activitats/a06/A06.03/ Exercici '''A06.03'''] (Heu de desar a la carpeta '''A06''' un document '''2223-DAM-''A06.03''-1rCognom2nCognomNom.pdf''' amb les solucions explicades i un arxiu '''2223-DAM-''A06.02''-1rCognom2nCognomNom.zip''' amb els codis comprimits, sense el '''.pro.user''').
 +
 
 +
== 20221007 (2h) '''A06.01''' ==
 +
[https://recull.binefa.cat/files/20221007/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
== 20221006 (1h) '''A06.01''' ==
 +
[https://recull.binefa.cat/files/20221006/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
[https://recull.binefa.cat/files/20221003/20161129ex1rT.tar.gz Exercici '''A06.01'''] (Heu de desar a la carpeta '''A06''' un document '''2223-DAM-''A06.01''-1rCognom2nCognomNom.pdf''' amb les solucions explicades i un arxiu '''2223-DAM-''A06.01''-1rCognom2nCognomNom.zip''' amb els codis comprimits, sense el '''.pro.user''').
 +
 
 +
== 20221003 (2h) '''A06.01''' ==
 +
[https://recull.binefa.cat/files/20221003/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
[https://recull.binefa.cat/files/20221003/slidersDisplays_01_connectats.zip Connexió entre ginys encastats] (Evolució de l'exercici del darrer dia)
 +
 
 +
[https://recull.binefa.cat/files/20221003/20161129ex1rT.tar.gz Exercici '''A06.01'''] (Heu de desar a la carpeta '''A06''' un document '''2223-DAM-''A06.01''-1rCognom2nCognomNom.pdf''' amb les solucions explicades i un arxiu '''2223-DAM-''A06.01''-1rCognom2nCognomNom.zip''' amb els codis comprimits, sense el '''.pro.user''').
 +
 
 +
=== qtMqtt ===
 +
 
 +
[https://code.qt.io/cgit/qt/qtmqtt.git/ qtMqtt oficial]
 +
 
 +
Feu un git clone i especifiqueu la versió amb un ''git checkout 6.0''. Després:
 +
git clone https://code.qt.io/cgit/qt/qtmqtt.git
 +
cd qmqtt
 +
git checkout 6.1 ''(Canvieu 6.1 per la vostra versió de Qt)''
 +
mkdir build
 +
cd build
 +
qmake -r ..
 +
make
 +
sudo make install
 +
 
 +
'''Instal·lació a Windows'''
 +
 
 +
- Si no teniu el llenguatge ''perl'' instal·lat, [https://strawberryperl.com/ instal·leu ''perl'']
 +
 
 +
- Obriu el CMD amb les variables d'entorn de les Qt6
 +
 
 +
git clone git://code.qt.io/qt/qtmqtt.git
 +
cd qmqtt
 +
git checkout 6.1
 +
mkdir build
 +
cd build
 +
qmake -r ..
 +
mingw32-make
 +
mingw32-make install
 +
 
 +
==== Instal·lació de '''QtMqtt per Android''' ====
 +
Malgrat que ja us funcioni la biblioteca QtMqtt en programes d'escriptori, heu de fer la compilació de la biblioteca QtMqtt per a la versió de Qt/QML que feu servir per a poder executar programes que duguin aquesta biblioteca a Android.
 +
 
 +
Hi ha diversos suggeriments de com fer-ho. Després de diversos intents, aquest és el sistema que a mi m'ha funcionat:
 +
 
 +
Cerqueu el directori '''lib''' de la vostra distribució Qt per a '''Android x86''':
 +
jordi@ecat-XPS13:~$ '''/home/jordi/Qt/6.0.0/android_x86/bin/qmake -query QT_INSTALL_LIBS'''
 +
/home/jordi/Qt/6.0.0/android_x86/lib
 +
o, per al dispositiu físic Android amb tecnologia '''Android ARM''':
 +
ecat@iot-ecat:~$ '''/home/ecat/Qt/6.0.0/android_armv7/bin/qmake -query QT_INSTALL_LIBS'''
 +
/home/ecat/Qt/6.0.0/android_armv7/lib
 +
Aneu a la carpeta que ens retorna l'ordre anterior ('''Android x86'''):
 +
jordi@ecat-XPS13:~$ '''cd /home/jordi/Qt/6.0.0/android_x86/lib'''
 +
o, per al dispositiu físic Android amb tecnologia '''Android ARM''':
 +
ecat@iot-ecat:~$ cd /home/ecat/Qt/6.0.0/android_armv7/lib
 +
I feu el procés d'instal·lació ('''Android x86'''):
 +
jordi@ecat-XPS13:~/Qt/6.0.0/android_x86/lib$ '''git clone git://code.qt.io/qt/qtmqtt.git'''
 +
jordi@ecat-XPS13:~/Qt/6.0.0/android_x86/lib$ '''cd qtmqtt/'''
 +
jordi@ecat-XPS13:~/Qt/6.0.0/android_x86/lib/qtmqtt$ '''git checkout 6.0'''
 +
jordi@ecat-XPS13:~/Qt/6.0.0/android_x86/lib/qtmqtt$ '''rm -r examples/'''
 +
o, per al dispositiu físic Android amb tecnologia '''Android ARM''':
 +
ecat@iot-ecat:~/Qt/6.0.0/android_armv7/lib$ '''git clone git://code.qt.io/qt/qtmqtt.git'''
 +
ecat@iot-ecat:~/Qt/6.0.0/android_armv7/lib$ '''cd qtmqtt/'''
 +
ecat@iot-ecat:~/Qt/6.0.0/android_armv7/lib/qtmqtt$ '''git checkout 6.0'''
 +
ecat@iot-ecat:~/Qt/6.0.0/android_armv7/lib/qtmqtt$ rm -r examples/
 +
Per a '''Android x86''', mitjançant el '''Qt Creator''' obriu el projecte /home/jordi/Qt/6.0.0/android_x86/lib/qtmqtt/'''qtmqtt.pro'''. Aneu al menú i seleccioneu '''Build / Run qmake'''
 +
 
 +
Per a '''Android ARM''', mitjançant el '''Qt Creator''' obriu el projecte /home/ecat/Qt/6.0.0/android_armv7/lib/qtmqtt/'''qtmqtt.pro'''. Aneu al menú i seleccioneu '''Build / Run qmake'''
 +
 
 +
Torneu al terminal d'abans i feu ('''Android x86'''):
 +
jordi@ecat-XPS13:~/Qt/6.0.0/android_x86/lib/qtmqtt$ '''make'''
 +
jordi@ecat-XPS13:~/Qt/6.0.0/android_x86/lib/qtmqtt$ '''sudo make install'''
 +
o, per al dispositiu físic Android amb tecnologia '''Android ARM''':
 +
ecat@iot-ecat:~/Qt/6.0.0/android_armv7/lib/qtmqtt$ '''make'''
 +
ecat@iot-ecat:~/Qt/6.0.0/android_armv7/lib/qtmqtt$ '''sudo make install'''
 +
Copieu, fora de la ruta de les Qt, els projectes d'exemple [https://www.binefa.cat/dam2021/20210121_qml/quickpublication.zip '''quickpublication'''] i [https://www.binefa.cat/dam2021/20210121_qml/quicksubscription.zip '''quicksubscription''']. Obriu els dos projectes per a que puguin ser executats des de l'escriptori i des del mòbil (emulat o no). Per a verificar llur funcionament, podeu executar un projecte al dispositiu mòbil i l'altre a l'escriptori.
 +
 
 +
== 20220930 (2h) '''A00''' ==
 +
* Dubtes
 +
 
 +
* Programació orientada a objectes en C++. Integració a les Qt. ([https://recull.binefa.cat/files/20220919/Qt/ Codis al recull del 19 de setembre])
 +
 
 +
* Canvi de la forma del cursor per ''frames''
 +
 
 +
* Una calculadora que suma, emprant Qt
 +
 
 +
* '''A la segona hora''' es faran activitats relacionades amb el professor transversal del projecte global.
 +
 
 +
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
 +
 
 +
== 20220929 (1h) ==
 +
* Dubtes
 +
 
 +
* Programació orientada a objectes en C++. Integració a les Qt. ([https://recull.binefa.cat/files/20220919/Qt/ Codis al recull del 19 de setembre])
 +
 
 +
* Canvi de la forma del cursor per ''frames''
 +
 
 +
* Una aplicació, emprant Qt, amb dos botons ( '''+''' i '''-''') i una etiqueta que mostra un número. Amb el botó '''+''' s'incrementa el valor del número de l'etiqueta i amb el botó '''-''' es decrementa.
 +
 
 +
== 20220923 (2h) '''A05''' ==
 +
* Dubtes
 +
 
 +
* Verifiqueu la connectivitat amb el protocol MQTT de la [[Placa IoT-02 | placa IoT-02]] emprant Snap! i NodeRED.
 +
 
 +
* Programació orientada a objectes en C++. Integració a les Qt.
 +
 
 +
* '''A la segona hora''' es farà l'[https://recull.binefa.cat/files/doc/projecteGlobal/activitats/a05/ activitat 5] relacionada amb el professor transversal del projecte global.
 +
 
 +
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
 +
 
 +
== 20220922 (1h) ==
 +
[https://recull.binefa.cat/files/20220922/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
* Dubtes del darrer dia
 +
 
 +
* Seguim amb les Qt
 +
 
 +
== 20220919 (3h) ==
 +
[https://recull.binefa.cat/files/20220919/ Recull d'avui] usuari: dam | contrasenya: dam2223
 +
 
 +
* Dubtes de la setmana passada
 +
 
 +
* Connexió de la [[Placa IoT-02 | placa IoT-02]] a NodeRED mitjançant MQTT
 +
 
 +
[http://vps656540.ovh.net/snap/snap.html#open:../iot/2022/20220326/06_publishingOLED.xml Canvieu el broker]
 +
 
 +
formacio.things.cat:9001
 +
ecat / clotClot
 +
 
 +
* Programació orientada a objectes en C++. Integració a les Qt
 +
 
 +
== 20220916 (2h) '''A03''' ==
 +
* '''Reviseu si teniu la vostra carpeta compartida enllaçada a ''' [[Carpetes compartides de 2n de DAM. Curs_2022-2023 | carpetes compartides]] amb el número de la [[Placa IoT-02 | placa IoT-02]] cedida fins a final de curs.
 +
 
 +
* Dubtes del dia anterior
 +
 
 +
* [https://www.binefa.cat/IoT/teoria/mqtt_00.pdf Introducció al protocol MQTT]
 +
 
 +
* Programació orientada a objectes en C++. Integració a les Qt
 +
 
 +
* '''A la segona hora''' es faran activitats relacionades amb el professor transversal del projecte global.
 +
 
 +
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
 +
 
 +
== 20220915 (1h) ==
 +
* '''Reviseu si teniu la vostra carpeta compartida enllaçada a:''' [[Carpetes compartides de 2n de DAM. Curs_2022-2023]]
 +
 
 +
* '''Porteu un cable o alimentador amb [https://www.dcutec.com/ca/xipblog/post/8_connexions-usb-tipus-c.html connector microUSB] de tipus B'''. Haureu de dur-lo sempre que es facin pràctiques amb la [[Placa IoT-02 | placa IoT-02]].
 +
 
 +
* Dubtes del dia anterior
  
[[Distribució de M07UF1, M09UF2, M09UF3, M15UF1 i M13 al curs 2021-2022 de 2n de DAM]]
+
* Repartiment de la [[Placa IoT-02 | placa IoT-02]]. El número de placa queda registrat a les [[Carpetes compartides de 2n de DAM. Curs_2022-2023 | carpetes compartides]]
  
[[Distribució de M07UF1 i M13 al curs 2022-2023 de 2n de DAM]]
+
* [https://www.binefa.cat/IoT/teoria/mqtt_00.pdf Introducció al protocol MQTT]
  
 +
== 20220912 (3h) ==
 
[https://recull.binefa.cat/files/20220912/ Recull del dia 20220912] usuari: dam | contrasenya: dam2223
 
[https://recull.binefa.cat/files/20220912/ Recull del dia 20220912] usuari: dam | contrasenya: dam2223
 +
 +
=== Distribució de M07UF1 i M13 al curs 2022-2023 ===
 +
[[Distribució de M07UF1 i M13 al curs 2022-2023 de 2n de DAM]]
  
 
=== Qt ===
 
=== Qt ===
Línia 21: Línia 848:
  
 
Aneu a la pàgina [https://www.qt.io/download-open-source 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).
 
Aneu a la pàgina [https://www.qt.io/download-open-source 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).
 +
 +
[https://recull.binefa.cat/files/doc/projecteGlobal/activitats/a06/ Activitat 6]
 +
 +
Paquets que manquen per a fer funcionar les Qt a l'Ubuntu:
 +
sudo apt install libx11-xcb-dev libglu1-mesa-dev
  
 
=== IoT ===
 
=== IoT ===
[[Placa IoT-02]]
+
* [[Placa IoT-02]]
 +
 
 +
* NodeRED
 +
[https://www.binefa.com/index.php/Recull_de_pr%C3%A0ctiques_de_2n_de_DAM._Curs_2022-2023#NR01_-_Instal.C2.B7laci.C3.B3 Exercici d'instal·lació]
  
 
[https://nodejs.org/en/download/ Instal·lació de Node.js] [https://tecadmin.net/install-latest-nodejs-npm-on-debian/ Guia d'instal·lació de node i npm]
 
[https://nodejs.org/en/download/ Instal·lació de Node.js] [https://tecadmin.net/install-latest-nodejs-npm-on-debian/ Guia d'instal·lació de node i npm]
Línia 44: Línia 879:
  
 
  wget --no-check-certificate https://www.binefa.cat/IoT/nodeRed/node_red_ui.zip
 
  wget --no-check-certificate https://www.binefa.cat/IoT/nodeRed/node_red_ui.zip
 +
 +
[https://www.binefa.cat/curs2022-2023/projecteGlobal/dam2223/a07/ Activitat 7]
  
 
= Repositori de codis fet a classe durant el curs =
 
= Repositori de codis fet a classe durant el curs =
Línia 49: Línia 886:
  
 
= Documentació =
 
= Documentació =
[[Distribució de M07UF1, M09UF2, M09UF3, M15UF1 i M13 al curs 2021-2022 de 2n de DAM]]
+
[[Distribució de M07UF1 i M13 al curs 2022-2023 de 2n de DAM]]
  
[[Recull de pràctiques de 2n de DAM. Curs 2021-2022]]
+
[[Recull de pràctiques de 2n de DAM. Curs 2022-2023]]
 +
 
 +
[https://drive.google.com/drive/folders/1vorYyIsiOUU6Ia3ViqDCpfG-gFUqnroc Projecte global GP1. IoT]
 +
 
 +
[https://docs.google.com/spreadsheets/d/1jxpQM8EaMrWeWnBrbSBBbYi8lwblSla3/edit#gid=1066652034 Seguiment de tutories]
 +
 
 +
[https://docs.google.com/forms/d/1VwVSCWRftkxRUdqQKi_Uqi8LboIrHDh53ZFdei303gA/edit Enquesta del 17 de novembre de 2022]
  
 
== Qt/QML ==
 
== Qt/QML ==
 +
Paquets que manquen per a fer funcionar les Qt a l'Ubuntu:
 +
sudo apt install libx11-xcb-dev libglu1-mesa-dev
 
[https://youtu.be/b936UY3YZe4 Activació de l'editor QML al QtCreator 6]
 
[https://youtu.be/b936UY3YZe4 Activació de l'editor QML al QtCreator 6]
  
Línia 65: Línia 910:
  
 
[http://zetcode.com/gui/pyqt5/ PyQt5] de [https://twitter.com/janbodnar Jan Bodnar]
 
[http://zetcode.com/gui/pyqt5/ PyQt5] de [https://twitter.com/janbodnar Jan Bodnar]
 +
 +
=== Qt for Android ===
 +
[https://doc.qt.io/qt-6/android-getting-started.html Getting Started with Qt for Android]
  
 
=== Qt for WebAssembly ===
 
=== Qt for WebAssembly ===
Línia 76: Línia 924:
  
 
[https://www.bogotobogo.com/Qt/Qt5_QProcess_QFileDialog_QTextEdit_FFmpeg.php Qt5 tutorial FFmpeg converter using QProcess - 2020]
 
[https://www.bogotobogo.com/Qt/Qt5_QProcess_QFileDialog_QTextEdit_FFmpeg.php 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
  
 
== IoT ==
 
== IoT ==
Línia 91: Línia 945:
  
 
[http://silanus.fr/sin/?p=1194 MQTT avec Qt]
 
[http://silanus.fr/sin/?p=1194 MQTT avec Qt]
 +
 +
=== Placa IoT-02 ===
 +
[[Placa IoT-02]]
 +
 +
[https://www.binefa.cat/IoT/IoT-02/info/iot02_00_ca.pdf Introducció a la placa IoT-02]
 +
 +
Per a la programació amb l'IDE d'Arduino: https://dl.espressif.com/dl/package_esp32_index.json
 +
 +
[https://www.things.cat/index.php/P%C3%A0gina_principal#MicroPython_2 Programació en MicroPython]
  
 
=== '''LoRaWAN''' ===
 
=== '''LoRaWAN''' ===
[[LoRa 2021-2022]]
+
[[LoRa 2021-2022 | LoRa 2022-2023]]
  
 
[https://eu1.cloud.thethings.network/ Consola de The Things Stack (Community Edition)] de [https://www.thethingsnetwork.org/ The Things Network]
 
[https://eu1.cloud.thethings.network/ Consola de The Things Stack (Community Edition)] de [https://www.thethingsnetwork.org/ The Things Network]

Revisió de 13:30, 25 maig 2023

Quan tingueu les credencials d'accés a la NET heu de compartir una carpeta amb aquest nom: 2223-DAM-1rCognom2nCognomNom (Per exemple, si el vostre nom és Xavier López Pujol --> 2223-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 2022-2023

Contingut

Algunes classes

Llista de 2n de DAM

Teleconferència provisional per a compartir pantalla i confinats

Accessos ràpids

Recull de pràctiques de 2n de DAM. Curs 2022-2023

Vídeos QML

Introducció al QML. Curs 2022-2023

20230525 Lliurament de projectes

Lliurament de projectes

20230522 Darrer dia de classe

  • Seguim desenvolupant GP3

20230518

  • Seguim desenvolupant GP3

20230515

  • Seguim desenvolupant GP3

20230512

  • Seguim desenvolupant GP3

20230511

  • Seguim desenvolupant GP3

20230508

  • Seguim desenvolupant GP3

20230505

  • Seguim desenvolupant GP3

20230504

  • Seguim desenvolupant GP3

20230427

  • Seguim desenvolupant GP3

20230424

  • Seguim desenvolupant GP3

20230420

  • Seguim desenvolupant GP3

20230417

  • Seguim desenvolupant GP3

20230414

  • Seguim desenvolupant GP3

20230413

  • Seguim desenvolupant GP3

20230331

  • Seguim desenvolupant GP3

20230330

  • Seguim desenvolupant GP3

20230327

  • Seguim desenvolupant GP3
  • Seguim fent M07UF1

20230324

  • Seguim desenvolupant GP3

20230323

  • Seguim desenvolupant GP3

20230320

  • Seguim desenvolupant GP3

20230316

  • Seguim desenvolupant GP3

20230313

  • Seguim desenvolupant GP3
  • Seguim fent M07UF1

20230310

  • Seguim desenvolupant GP3

20230306 (2h) GP3

  • Dues primeres hores: GP3
  • Tercera hora: Qt/QML

20230303 (2h)

  • Darrer dia de les pràctiques del recull

20230227 (2h) Examen Projecte Global. Part Internet de les Coses

Examen Projecte Global. Part Internet de les Coses usuari: dam | contrasenya: dam2223

20230227 (1h) Examen Parcial M07UF1. Qt i QML

Examen Parcial M07UF1. Qt i QML usuari: dam | contrasenya: dam2223

20230224 (2h)

  • Seguim fent les pràctiques del recull

Material d'ajuda mqttQml

20230223 (1h)

20230217 (2h)

Recull d'avui usuari: dam | contrasenya: dam2223

Seguim fent els exercicis pendents del recull de pràctiques.

20230216 (1h + 1h)

Recull d'avui usuari: dam | contrasenya: dam2223

  • Pràctica A14.7 UserLand al recull de pràctiques. Es tracta d'instal·lar com a aplicació del vostre telèfon mòbil Android (real o simulat) un sistema Debian. A aquest sistema, dins de l'aplicació UserLand, hi instal·lareu un NodeRed que serà visible des del vostre ordinador.
  • Afegida la pràctica A17.04. Lectura de dades de la placa IoT-02, visualitzant-les a Grafana, emprant NodeRed, InfluxDB.

20230213 (3h)

Recull d'avui usuari: dam | contrasenya: dam2223

  • S'han afegit les pràctiques A14.5, A14.6 i A17.03 al recull de pràctiques. És la instal·lació de Grafana i InfluxDB al vostre sistema operatiu.

20230210 (2h)

Recull d'avui usuari: dam | contrasenya: dam2223

  • S'ha afegit la pràctica A10.3 al recull de pràctiques. És una pràctica bàsica de la biblioteca Paho emprant Python.

Paho - MQTT i Python

# pip install paho-mqtt

A una cel·la del jupyter-lab:

import random

import paho.mqtt.subscribe as subscribe
import paho.mqtt.client as mqtt
import paho.mqtt.properties as properties

mqttc = mqtt.Client('idClient-'+str(random.randrange(100000,999999)))
# mqttc.username_pw_set("usuari","contrasenya");
mqttc.connect("broker.emqx.io", 1883)

def on_message(clientId, userdata, message):
   msg = str(message.payload.decode("utf-8"))
   print('topic = ', message.topic)
   print('payload = ', msg)

mqttc.on_message = on_message
mqttc.subscribe('topicName')

A una altra cel·la del jupyter-lab:

mqttc.loop_start()

Usuari i contrasenya a MQTT emprant Paho

  • Publicació MQTT des de Paho:
mqttc.publish('topicName','Escola del clot')

20230209 (1h)

Recull d'avui usuari: dam | contrasenya: dam2223

Seguim fent els exercicis pendents del recull de pràctiques.

Alternativa a sys.argv: argparser

argparser - Parser for command-line options, arguments and sub-commands

Argparse Tutorial

20230206 (3h)

Recull d'avui usuari: dam | contrasenya: dam2223

Seguim fent els exercicis pendents del recull de pràctiques.

Mastodon

  • Mastodon, una alternativa lliure a Twitter

No totes les instàncies de Mastodon faciliten la instal·lació de bots. Per a fer els primers passos us recomano aquesta instància pensada per a hostatjar bots de Mastodon (tal i com es va demanar el dia anterior, heu d'haver demanat les credencials a la instància de Mastodon botsin.space amb molta antelació. Si ho sol·liciteu avui mateix no podreu seguir la classe).


Exemple de bot de Mastodon per a fer lectures de sensors cada hora.

Obtenció de les credencials per a l'API de Mastodon amb Mastodon.py, pas per pas

20230203 (2h)

Recull d'avui usuari: dam | contrasenya: dam2223

Seguim fent els exercicis pendents del recull de pràctiques.

Autenticació d'accés a NodeRED

Securing NodeRED

Generació de la contrasenya d'accés en mode hash des de la carpeta d'execució del NodeRED:

node node_modules/node-red/red.js admin hash-pw

En aquest exemple fem servir aquesta contrasenya en mode hash:

$2a$08$PbYFpiQSnoVaOfD1daCelU2Kvcg19KElO1DbVtE8GAJXacD6ABq

Edició de settings.js:

toni@vps-10d8edcd:~/bin/nodered$ nano ./node_modules/node-red/settings.js
   // Securing Node-RED
   // -----------------
   // To password protect the Node-RED editor and admin API, the following
   // property can be used. See http://nodered.org/docs/security.html for details.
   adminAuth: {
       type: "credentials",
       users: [{
           username: "toni",
           password: "$2a$08$PbYFpiQSnoVaOfD1daCelU2Kvcg19KElO1DbVtE8GAJXacD6ABq",
           permissions: "*"
       }]
   },

Un cop fets el canvis cal reiniciar el NodeRED.

Telegram

Bot de Telegram

  • Creació de bots amb BotFather
  • Interacció amb un usuari de Telegram
  • Interacció amb un grup de Telegram

Material per a fer el bot i flux de prova per al bot de Telegram

20230202 (1h)

Recull d'avui usuari: dam | contrasenya: dam2223

Seguim fent els exercicis pendents del recull de pràctiques.

20230130 (3h)

Recull d'avui usuari: dam | contrasenya: dam2223

No us oblideu de dur la placa!

Seguim fent els exercicis pendents del recull de pràctiques.

  • Plantejament de l'exercici A18.01 (Recepció de dades LoRa, emprant el rerefons de The Things Network i un visualitzador QML) del recull de pràctiques.
  • En cas de no tenir-ne, feu-vos un compte de Telegram.

Mastodon

  • Mastodon, una alternativa lliure a Twitter

No totes les instàncies de Mastodon faciliten la instal·lació de bots. Per a fer els primers passos us recomano aquesta instància pensada per a hostatjar bots de Mastodon (tal i com es va demanar el dia anterior, heu d'haver demanat les credencials a la instància de Mastodon botsin.space amb molta antelació. Si ho sol·liciteu avui mateix no podreu seguir la classe).


Exemple de bot de Mastodon per a fer lectures de sensors cada hora.

Obtenció de les credencials per a l'API de Mastodon amb Mastodon.py, pas per pas

20230127 (2h)

Recull d'avui usuari: dam | contrasenya: dam2223

No us oblideu de dur la placa!

Introducció a LoRa / LoRaWAN

  • Nodes a carregar al NodeRed:

node-red-contrib-float

node-red-node-base64

  • Plantejament dels exercicis A17.01 (Presa de contacta amb LoRa mitjançant The Things Network) i A17.02 (Tramesa de dades emprant LoRa, The Things Network i NodeRed) del recull de pràctiques.

20230126 (1h)

Seguim fent les activitats plantejades al Recull de pràctiques de 2n de DAM. Curs 2022-2023.

20230123 (3h) LoRa

Recull d'avui usuari: dam | contrasenya: dam2223

No us oblideu de dur la placa!

Doneu-vos d'alta a thethingsnetwork.org

Introducció a LoRa / LoRaWAN

20230120 (2h)

Recull d'avui usuari: dam | contrasenya: dam2223

Seguim fent les activitats plantejades al Recull de pràctiques de 2n de DAM. Curs 2022-2023.

20230119 (1h)

Recull d'avui usuari: dam | contrasenya: dam2223

Seguim fent les activitats plantejades al Recull de pràctiques de 2n de DAM. Curs 2022-2023.

20230116 (3h)

Recull d'avui usuari: dam | contrasenya: dam2223

Seguim fent les activitats plantejades al Recull de pràctiques de 2n de DAM. Curs 2022-2023.

20230113 (2h)

Recull d'avui usuari: dam | contrasenya: dam2223

Seguim fent les activitats plantejades al Recull de pràctiques de 2n de DAM. Curs 2022-2023.

20230112 (1h)

Recull d'avui usuari: dam | contrasenya: dam2223

Seguim fent les activitats plantejades el darrer dia. Han estat afegides, a Recull de pràctiques de 2n de DAM. Curs 2022-2023, les pràctiques A08.05, A08.06 i A07.03, que són per a controlar remotament, mitjançant MQTT, un joc de tenis taula.

20230109 (3h)

Recull d'avui usuari: dam | contrasenya: dam2223

Seguim fent les activitats plantejades el darrer dia. Han estat afegides, a Recull de pràctiques de 2n de DAM. Curs 2022-2023, les pràctiques A13.03, A13.04 i A13.05, que són la versió en QML de la darrera pràctica feta amb Qt. Les dues darreres pràctiques plantejades avui són la implementació fent servir sòcols web, que permeten l'execució sobre pàgina web (per tant, poden funcionar amb WebAssembly i PureQML).

Al recull d'avui hi ha codi per ajudar a fer la pràctica emprant sòcols web MQTT.

void IndicadorLed::vSetLabelColor(QLabel* et,QColor col, QColor rerefons){
   QPixmap *pix = new QPixmap(22,22);
   QPainter *paint = new QPainter(pix);
   paint->setBrush(rerefons);
   paint->drawRect(0, 0, 21, 21);
   paint->setBrush(col);
   paint->setPen(Qt::white);
   paint->drawEllipse(5, 5, 10, 10);
   et->setPixmap(*pix);
}

20221219 (4h)

Recull d'avui usuari: dam | contrasenya: dam2223

Seguim fent les activitats plantejades el darrer dia.

Pujat al recull d'avui l'arxiu ginyMqtt04.zip (Per a fer la connexió MQTT des de Qt)

20221216 (2h)

Seguim fent les activitats plantejades el darrer dia:

20221215 (1h)

Recull d'avui usuari: dam | contrasenya: dam2223

Seguim fent les activitats plantejades el darrer dia:

20221212 (3h)

Recull d'avui usuari: dam | contrasenya: dam2223

Repàs apuntadors

Seguim fent les activitats plantejades el darrer dia:

20221205 (3h)

Recull d'avui usuari: dam | contrasenya: dam2223

20221201 (1h + 1h tutoria accidental)

Recull d'avui usuari: dam | contrasenya: dam2223

20221128 (3h)

Recull d'avui usuari: dam | contrasenya: dam2223

WebAssembly i Emscripten a Qt/QML

import QtQuick 2.15
import QtQuick.Window 2.15

Window {
   width: 640
   height: 480
   visible: true
   title: qsTr("Títol")
   Rectangle{
       color: "lime"
       anchors.centerIn: parent
       width: parent.width - 20
       height: parent.height - 20
       Text {
           id: name
           text: qsTr("Una prova")
           color: "blue"
           anchors.centerIn: parent
           font.pixelSize: 32
           font.family: "Helvetica"
       }
   }
}

20221125 (2h)

Recull d'avui usuari: dam | contrasenya: dam2223

Avui és el darrer dia d'entrada de notes del primer trimestre. És convenient que acabeu les activitats pendents.

Al recull d'avui podeu veure les notes de les activitats fins al dia d'ahir.

20221124 (1h + 1h tutoria)

Recull d'avui usuari: dam | contrasenya: dam2223

  • Classe

Seguim fent A08.04 i A12.01

Demà, 25 de novembre, és el darrer dia d'entrada de notes del primer trimestre. És convenient que acabeu les activitats pendents.

  • Tutoria accidental del 24 de novembre de 2022

22-23 Enquesta d'inici de curs

Aclariments:

- Per poder respondre han de tenir oberta la sessió de correu fje.edu, encara que l'enquesta és anònima.

- El sistema només permet respondre una sola vegada per usuari.

- Hi ha preguntes que tenen la possibilitat de respostes múltiples i d'altres de resposta única.

- Hi ha respostes que demanen un breu raonament.

- El temps a dedicar-hi no va més enllà dels 10 minuts.

20221121 (3h)

Recull d'avui usuari: dam | contrasenya: dam2223

Recull de pràctiques de 2n de DAM. Curs 2022-2023

Vídeos QML

Introducció al QML. Curs 2022-2023

Per afegir QMLDesigner a l'entorn del QtCreator: Aneu al menú Help / About pluggins / Seleccioneu QMLDesigner

Per afegir un nou formulari: nomForm.ui.qml

20221117 (1h)

Recull d'avui usuari: dam | contrasenya: dam2223

Recull de pràctiques de 2n de DAM. Curs 2022-2023

20221114 (3h) A08 - QML, connexió a rerefons Qt i PureQML

Recull d'avui usuari: dam | contrasenya: dam2223

L'exercici A06.03 passa a ser l'A12.01

L'exercici fr-mw-2 d'A09.01 i A09.02 passa a ser A15.01 i A15.02

PureQML

Introducció al QML. Curs 2022-2023

PureQML

Pàgina oficial de PureQML

Posada en marxa del PureQML

  • Instal·lació de l'eina python-future:
pip3 install future

A Windows:

pip install future
  • Primera aplicació
mkdir prjFolder
cd prjFolder
git clone https://github.com/pureqml/qmlcore.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

20221111 (2h)

Recull d'avui usuari: dam | contrasenya: dam2223

Revisem projectes pujats a la carpeta compartida i acabem els que tenim pendents.

20221110 (1h)

Recull d'avui usuari: dam | contrasenya: dam2223

A9.01: fent servir Microworkers emprant MicroPython

A9.02: fent servir FreeRTOS emprant l'IDE d'Arduino

Més informació sobre la pràctica A09

20221107 (3h)

Recull d'avui usuari: dam | contrasenya: dam2223

20221104 (2h)

Recull d'avui usuari: dam | contrasenya: dam2223

Ens posem al dia amb les pràctiques pendents.

20221103 (1h) QDialog

Recull d'avui usuari: dam | contrasenya: dam2223

Al recull d'avui hi ha un exemple de codi emprant la classe QDialog.

Exemples de diàlegs en Qt6

20221028 (2h) A9

Recull d'avui usuari: dam | contrasenya: dam2223


A9.01: fent servir Microworkers emprant MicroPython

A9.02: fent servir FreeRTOS emprant l'IDE d'Arduino

FreeRTOS i MicroWorkers

fr-mw-1) Presa de contacte amb FreeRTOS

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.

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-).

Recull de pràctiques de 2n de DAM. Curs 2022-2023

fr-mw-2.2) Publicació

Si bSocConnectat és certa, publica el canvi d'estat del botó quan es prem I35.

fr-mw-2.3) 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.

20221027 (1h) MicroPython

Recull d'avui usuari: dam | contrasenya: dam2223

Seguim amb MicroPython

Pistes per a la instal·lació de MicroPython a les pàgines 49 a 52

MicroWorkers

20221024 (3h)

Recull d'avui usuari: dam | contrasenya: dam2223

  • Exercici A06.03 (Heu de desar a la carpeta A06 un document 2223-DAM-A06.03-1rCognom2nCognomNom.pdf amb les solucions explicades i un arxiu 2223-DAM-A06.02-1rCognom2nCognomNom.zip amb els codis comprimits, sense el .pro.user).

20221021 (2h)

Recull d'avui usuari: dam | contrasenya: dam2223

20221020 (1h) Menús a QMainWindow

Recull d'avui usuari: dam | contrasenya: dam2223

20221017 (3h)

  • Dubtes
  • Finalització de les subactivitats pendents

20221014 (2h) A06.02, A06.03, A07.01 i A07.02

Recull d'avui usuari: dam | contrasenya: dam2223

  • Dubtes
  • Acabem les subactivitats pendents (A06.02, A06.03, A07.01 i/o A07.02).

20221013 (1h) A07.02

Recull d'avui usuari: dam | contrasenya: dam2223

  • Feu-vos un usuari a Wokwi. Us podeu autenticar fent servir el vostre usuari a l'Escola o el vostre usuari personal a GMail.

Feu-vos una còpia a la vostra zona a Wokwi d'aquest bessó digital d'un ESP32, implementat en micropython, comunicant mitjançant MQTT. Canvieu la MAC del bessó digital per la MAC de la vostra placa IoT-02.

  • Exercici A07.02 (Heu de desar a la carpeta A07 un document 2223-DAM-A07.02-1rCognom2nCognomNom.pdf amb l'explicació de com heu modificat la MAC (escrivint-hi la de la vostra placa IoT-02) del bessó digital copiat a la vostra zona de Wokwi. Feu el document fent servir com a controladors l'Snap!, NodeRED, i el codi amb QtMqtt ginyMqtt04. I com a dispositius la vostra còpia modificada del bessó digital i la placa IoT-02 per a provar la bidireccionalitat de la comunicació MQTT amb el botó i el led.

20221010 (3h) A06.02, A07.01 i A06.03

Recull d'avui usuari: dam | contrasenya: dam2223

  • Exercici A06.02 (Heu de desar a la carpeta A06 un document 2223-DAM-A06.02-1rCognom2nCognomNom.pdf amb l'explicació del procés per a instal·lar QtMqtt al vostre sistema. Verifiqueu que us funciona fent servir el codi de la carpeta de l'exercici A06.02

- Si feu servir Windows i no teniu el llenguatge perl instal·lat, instal·leu perl

ecat@iot-ecat:~/Qt/6.2.4/gcc_64/lib$ git clone git://code.qt.io/qt/qtmqtt.git
ecat@iot-ecat:~/Qt/6.2.4/gcc_64/lib$ cd qtmqtt/
ecat@iot-ecat:~/Qt/6.2.4/gcc_64/lib/qtmqtt$ git checkout 6.1 (malgrat tingueu la 6.2.4)
ecat@iot-ecat:~/Qt/6.2.4/gcc_64/lib/qtmqtt$ rm -r examples/

Mitjançant el Qt Creator obriu el projecte /home/ecat/Qt/6.2.4/gcc_64/lib/qtmqtt/qtmqtt.pro. Aneu al menú i seleccioneu Build / Run qmake

ecat@iot-ecat:~/Qt/6.2.4/gcc_64/lib/qtmqtt$ make
ecat@iot-ecat:~/Qt/6.2.4/gcc_64/lib/qtmqtt$ sudo make install

Descàrrega del C++ 17 per Windows.

Compilació i instal·lació des de Windows, un cop instal·lat C++ 17 (i la ruta del PATH havent afegit C:\MinGW\bin).

mingw32-make.exe
mingw32-make.exe install
  • Exercici A07.01 (Heu de desar a la carpeta A07 un document 2223-DAM-A07.01-1rCognom2nCognomNom.pdf amb l'explicació del procés de fer servir la modificació de simpleclient, anomenant-la simpleclientUsrPwd, incorporant usuari i contrasenya. Heu de comunicar la placa IoT-02 de forma bidireccional amb simpleclientUsrPwd.
void MainWindow::on_buttonConnect_clicked()
{
   if (m_client->state() == QMqttClient::Disconnected) {
       ui->lineEditHost->setEnabled(false);
       ui->spinBoxPort->setEnabled(false);
       ui->buttonConnect->setText(tr("Disconnect"));
       ui->leUser->setEnabled(false);
       ui->lePwd->setEnabled(false);
       m_client->setUsername(ui->leUser->text());
       m_client->setPassword(ui->lePwd->text());
       m_client->connectToHost();
   } else {
       ui->lineEditHost->setEnabled(true);
       ui->spinBoxPort->setEnabled(true);
       ui->leUser->setEnabled(true);
       ui->lePwd->setEnabled(true);
       ui->buttonConnect->setText(tr("Connect"));
       m_client->disconnectFromHost();
   }
}
  • Exercici A06.03 (Heu de desar a la carpeta A06 un document 2223-DAM-A06.03-1rCognom2nCognomNom.pdf amb les solucions explicades i un arxiu 2223-DAM-A06.02-1rCognom2nCognomNom.zip amb els codis comprimits, sense el .pro.user).

20221007 (2h) A06.01

Recull d'avui usuari: dam | contrasenya: dam2223

20221006 (1h) A06.01

Recull d'avui usuari: dam | contrasenya: dam2223

Exercici A06.01 (Heu de desar a la carpeta A06 un document 2223-DAM-A06.01-1rCognom2nCognomNom.pdf amb les solucions explicades i un arxiu 2223-DAM-A06.01-1rCognom2nCognomNom.zip amb els codis comprimits, sense el .pro.user).

20221003 (2h) A06.01

Recull d'avui usuari: dam | contrasenya: dam2223

Connexió entre ginys encastats (Evolució de l'exercici del darrer dia)

Exercici A06.01 (Heu de desar a la carpeta A06 un document 2223-DAM-A06.01-1rCognom2nCognomNom.pdf amb les solucions explicades i un arxiu 2223-DAM-A06.01-1rCognom2nCognomNom.zip amb els codis comprimits, sense el .pro.user).

qtMqtt

qtMqtt oficial

Feu un git clone i especifiqueu la versió amb un git checkout 6.0. Després:

git clone https://code.qt.io/cgit/qt/qtmqtt.git
cd qmqtt
git checkout 6.1 (Canvieu 6.1 per la vostra versió de Qt)
mkdir build
cd build
qmake -r ..
make
sudo make install

Instal·lació a Windows

- Si no teniu el llenguatge perl instal·lat, instal·leu perl

- Obriu el CMD amb les variables d'entorn de les Qt6

git clone git://code.qt.io/qt/qtmqtt.git
cd qmqtt
git checkout 6.1
mkdir build
cd build
qmake -r ..
mingw32-make
mingw32-make install

Instal·lació de QtMqtt per Android

Malgrat que ja us funcioni la biblioteca QtMqtt en programes d'escriptori, heu de fer la compilació de la biblioteca QtMqtt per a la versió de Qt/QML que feu servir per a poder executar programes que duguin aquesta biblioteca a Android.

Hi ha diversos suggeriments de com fer-ho. Després de diversos intents, aquest és el sistema que a mi m'ha funcionat:

Cerqueu el directori lib de la vostra distribució Qt per a Android x86:

jordi@ecat-XPS13:~$ /home/jordi/Qt/6.0.0/android_x86/bin/qmake -query QT_INSTALL_LIBS
/home/jordi/Qt/6.0.0/android_x86/lib

o, per al dispositiu físic Android amb tecnologia Android ARM:

ecat@iot-ecat:~$ /home/ecat/Qt/6.0.0/android_armv7/bin/qmake -query QT_INSTALL_LIBS
/home/ecat/Qt/6.0.0/android_armv7/lib

Aneu a la carpeta que ens retorna l'ordre anterior (Android x86):

jordi@ecat-XPS13:~$ cd /home/jordi/Qt/6.0.0/android_x86/lib

o, per al dispositiu físic Android amb tecnologia Android ARM:

ecat@iot-ecat:~$ cd /home/ecat/Qt/6.0.0/android_armv7/lib

I feu el procés d'instal·lació (Android x86):

jordi@ecat-XPS13:~/Qt/6.0.0/android_x86/lib$ git clone git://code.qt.io/qt/qtmqtt.git
jordi@ecat-XPS13:~/Qt/6.0.0/android_x86/lib$ cd qtmqtt/
jordi@ecat-XPS13:~/Qt/6.0.0/android_x86/lib/qtmqtt$ git checkout 6.0
jordi@ecat-XPS13:~/Qt/6.0.0/android_x86/lib/qtmqtt$ rm -r examples/

o, per al dispositiu físic Android amb tecnologia Android ARM:

ecat@iot-ecat:~/Qt/6.0.0/android_armv7/lib$ git clone git://code.qt.io/qt/qtmqtt.git
ecat@iot-ecat:~/Qt/6.0.0/android_armv7/lib$ cd qtmqtt/
ecat@iot-ecat:~/Qt/6.0.0/android_armv7/lib/qtmqtt$ git checkout 6.0
ecat@iot-ecat:~/Qt/6.0.0/android_armv7/lib/qtmqtt$ rm -r examples/

Per a Android x86, mitjançant el Qt Creator obriu el projecte /home/jordi/Qt/6.0.0/android_x86/lib/qtmqtt/qtmqtt.pro. Aneu al menú i seleccioneu Build / Run qmake

Per a Android ARM, mitjançant el Qt Creator obriu el projecte /home/ecat/Qt/6.0.0/android_armv7/lib/qtmqtt/qtmqtt.pro. Aneu al menú i seleccioneu Build / Run qmake

Torneu al terminal d'abans i feu (Android x86):

jordi@ecat-XPS13:~/Qt/6.0.0/android_x86/lib/qtmqtt$ make
jordi@ecat-XPS13:~/Qt/6.0.0/android_x86/lib/qtmqtt$ sudo make install

o, per al dispositiu físic Android amb tecnologia Android ARM:

ecat@iot-ecat:~/Qt/6.0.0/android_armv7/lib/qtmqtt$ make
ecat@iot-ecat:~/Qt/6.0.0/android_armv7/lib/qtmqtt$ sudo make install

Copieu, fora de la ruta de les Qt, els projectes d'exemple quickpublication i quicksubscription. Obriu els dos projectes per a que puguin ser executats des de l'escriptori i des del mòbil (emulat o no). Per a verificar llur funcionament, podeu executar un projecte al dispositiu mòbil i l'altre a l'escriptori.

20220930 (2h) A00

  • Dubtes
  • Canvi de la forma del cursor per frames
  • Una calculadora que suma, emprant Qt
  • A la segona hora es faran activitats relacionades amb el professor transversal del projecte global.

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

20220929 (1h)

  • Dubtes
  • Canvi de la forma del cursor per frames
  • Una aplicació, emprant Qt, amb dos botons ( + i -) i una etiqueta que mostra un número. Amb el botó + s'incrementa el valor del número de l'etiqueta i amb el botó - es decrementa.

20220923 (2h) A05

  • Dubtes
  • Verifiqueu la connectivitat amb el protocol MQTT de la placa IoT-02 emprant Snap! i NodeRED.
  • Programació orientada a objectes en C++. Integració a les Qt.
  • A la segona hora es farà l'activitat 5 relacionada amb el professor transversal del projecte global.

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

20220922 (1h)

Recull d'avui usuari: dam | contrasenya: dam2223

  • Dubtes del darrer dia
  • Seguim amb les Qt

20220919 (3h)

Recull d'avui usuari: dam | contrasenya: dam2223

  • Dubtes de la setmana passada

Canvieu el broker

formacio.things.cat:9001
ecat / clotClot
  • Programació orientada a objectes en C++. Integració a les Qt

20220916 (2h) A03

  • Dubtes del dia anterior
  • Programació orientada a objectes en C++. Integració a les Qt
  • A la segona hora es faran activitats relacionades amb el professor transversal del projecte global.

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

20220915 (1h)

  • Dubtes del dia anterior

20220912 (3h)

Recull del dia 20220912 usuari: dam | contrasenya: dam2223

Distribució de M07UF1 i M13 al curs 2022-2023

Distribució de M07UF1 i M13 al curs 2022-2023 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).

Activitat 6

Paquets que manquen per a fer funcionar les Qt a l'Ubuntu:

sudo apt install libx11-xcb-dev libglu1-mesa-dev

IoT

  • NodeRED

Exercici d'instal·lació

Instal·lació de Node.js Guia d'instal·lació de node i npm

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

Activitat 7

Repositori de codis fet a classe durant el curs

Codis fets a les classes de 2n de DAM usuari: dam | contrasenya: dam2122

Documentació

Distribució de M07UF1 i M13 al curs 2022-2023 de 2n de DAM

Recull de pràctiques de 2n de DAM. Curs 2022-2023

Projecte global GP1. IoT

Seguiment de tutories

Enquesta del 17 de novembre de 2022

Qt/QML

Paquets que manquen per a fer funcionar les Qt a l'Ubuntu:

sudo apt install libx11-xcb-dev libglu1-mesa-dev

Activació de l'editor QML al QtCreator 6

Qt5 de Jan Bodnar

Vídeos QML

Qt5 Cadaques! A Book about Qt5

Qt Quick tutorial de Jan Bodnar

PyQt5 de Jan Bodnar

Qt for Android

Getting Started with Qt for Android

Qt for WebAssembly

Qt for WebAssembly

json

How To Manipulate JSON With C++ and Qt

QProcess

QProcess example

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

IoT

Introducció al Node-RED

TCP/UDP Capa de transport d'Ethernet

Introducció a MQTT

Afegint la targeta ESP8266 a l'IDE d'Arduino (NodeMCU1.0)

Micropython and the Internet of Things

SCADA fent servir Python QML i Arduino

MQTT avec Qt

Placa IoT-02

Placa IoT-02

Introducció a la placa IoT-02

Per a la programació amb l'IDE d'Arduino: https://dl.espressif.com/dl/package_esp32_index.json

Programació en MicroPython

LoRaWAN

LoRa 2022-2023

Consola de The Things Stack (Community Edition) de The Things Network

Presentació LoRaWAN (esborrany v0.4)

Ús pràctic de LoRaWAN TTNv2

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

Downlink LoRaWAN fent servir TTSv3