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

De binefa.com
Salta a la navegació Salta a la cerca
 
(Hi ha 255 revisions intermèdies del mateix usuari que no es mostren)
Línia 7: Línia 7:
  
 
[[Recull de pràctiques de 2n de DAM. Curs 2023-2024]]
 
[[Recull de pràctiques de 2n de DAM. Curs 2023-2024]]
 +
 +
[https://recull.binefa.cat/ Recull de codis fets a classe. Curs 2023-2024]
  
 
[https://docs.google.com/spreadsheets/d/1m7RJ7jsQvkfQROlvj_rruT2C51vtx2RCUnBqNkDumXE/ Llista de 2n de DAM]
 
[https://docs.google.com/spreadsheets/d/1m7RJ7jsQvkfQROlvj_rruT2C51vtx2RCUnBqNkDumXE/ Llista de 2n de DAM]
Línia 13: Línia 15:
  
 
= Algunes classes =
 
= Algunes classes =
 +
'''Examen del M07UF1: 13 de maig de 2024'''. El 21 de maig a les dues darreres hores també és reservat.
 +
== 20240513 (1h + 2h) Examen M07UF1 ==
 +
[https://recull.binefa.cat/files/20240513ex/ Recull del dia d'avui]
 +
 +
* 1a hora: GP3
 +
 +
* 2a i 3a hora: '''Examen final de 2/3 parts''' del M07UF1
 +
 +
== 20240510 (2h) ==
 +
Seguim amb el GP3.
 +
== 20240506 (1h + 2h) ==
 +
[https://recull.binefa.cat/files/20240506/ Recull del dia d'avui] <-- '''Conversió de 2 bytes (''unsigned char'') a ''short int'''''
 +
 +
* 1a hora: GP3
 +
 +
* 2a i 3a hora: M07UF1 (Heu d'acabar les pràctiques pendents)
 +
== 20240503 (2h) ==
 +
Seguim amb el GP3.
 +
== 20240430 (1h) ==
 +
Seguim amb el GP3.
 +
 +
== 20240429 (1h + 2h) ==
 +
[https://recull.binefa.cat/files/20240415/ Recull del dia d'avui]
 +
 +
* 1a hora: GP3
 +
 +
* 2a i 3a hora: M07UF1
 +
 +
S'ha afegit '''M05'''. Seguim resolent els exercicis del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]. ('''Fins ara s'ha demanat fer M00, M01, M02, M03, M04 i M05''').
 +
== 20240426 (2h) ==
 +
Seguim amb el GP3.
 +
== 20240423 (1h) ==
 +
Seguim amb el GP3.
 +
 +
== 20240422 (1h + 2h) ==
 +
[https://recull.binefa.cat/files/20240415/ Recull del dia d'avui]
 +
 +
* 1a hora: GP3
 +
 +
* 2a i 3a hora: M07UF1
 +
 +
S'ha afegit '''M03'''. Seguim resolent l'exercici de l'enunciat M04 del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]. ('''Fins ara s'ha demanat fer M00, M01, M02, M03 i M04'''. No s'ha demanat fer M05).
 +
 +
== 20240419 (2h) ==
 +
Seguim amb el GP3.
 +
== 20240416 (1h) ==
 +
Seguim amb el GP3.
 +
== 20240415 (1h + 2h) ==
 +
[https://recull.binefa.cat/files/20240415/ Recull del dia d'avui]
 +
 +
* 1a hora: GP3
 +
 +
* 2a i 3a hora: M07UF1
 +
 +
Seguim resolent l'exercici de l'enunciat M04 del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]. ('''Fins ara s'ha demanat fer M00, M01, M02 i M04'''. No s'ha demanat fer ni M03 ni M05).
 +
 +
== 20240412 (2h) ==
 +
Seguim amb el GP3.
 +
 +
== 20240409 (1h) ==
 +
Seguim amb el GP3.
 +
 +
== 20240408 (1h + 2h) ==
 +
[https://recull.binefa.cat/files/20240408/ Recull del dia d'avui]
 +
 +
Pujats els enunciats M04 i M05 al [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]. '''Fins ara s'ha demanat fer M00, M01, M02 i M04'''. No s'ha demanat fer ni M03 ni M05.
 +
 +
== 20240405 (2h) ==
 +
[https://recull.binefa.cat/files/20240405/ Recull del dia d'avui] <-- Proposta de '''m01_3_00'''
 +
 +
Seguim amb el M07UF1 tot fent els exercicis pendents del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
== 20240402 (1h) ==
 +
Seguim amb el GP3.
 +
 +
== 20240318 (1h + 2h) ==
 +
1h de GP3 i 2h de M07UF1
 +
 +
Acabem les pràctiques M00 al [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
 +
 +
== 20240315 (2h) ==
 +
GP3
 +
== 20240311 (1h + 2h) ==
 +
1h de GP3 i 2h de M07UF1
 +
 +
Acabem les pràctiques M00 al [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
[https://ca.wikipedia.org/wiki/SCADA Sistemes SCADA]
 +
 +
[[Modbus RTU]]
 +
 +
== 20240308 (1h) ==
 +
Fem les pràctiques M00 al [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
== 20240304 (1h + 2h) '''GP3''' ==
 +
'''Comença GP3'''
 +
 +
'''Comença el tercer trimestre del M07UF1'''
 +
 +
Afegides les pràctiques M00 al [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
<!-- '''Prova de la part IoT: 20240219'''
 +
 +
'''Prova de la part Qt i QML (amb IoT): 20240226''' -->
 +
 +
== 20240301 (2h) ==
 +
Seguim fent les pràctiques del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
== 20240226 (3h) '''A11''' i prova trimestral '''M07UF1''' ==
 +
[https://recull.binefa.cat/files/20240226_QtQml_ex/ Enunciat de la metacognició de síntesi del M07UF1 i part puntuable del projecte global]
 +
 +
== 20240223 (2h) ==
 +
Seguim fent les pràctiques del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
== 20240220 (1h) ==
 +
Seguim fent les pràctiques del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
== 20240219 (3h) '''A11''' (Prova final part IoT -'''GP1'''-)==
 +
[https://recull.binefa.cat/files/20240219_IoT_ex/20240219_A11.pdf Enunciat de la metacognició de síntesi en pdf]
 +
 +
[https://recull.binefa.cat/files/20240219_IoT_ex/20240219_A11.pdf Enunciat de la metacognició de síntesi en format editable]
 +
 +
== 20240216 (2h) ==
 +
Seguim fent les pràctiques del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
== 20240213 (1h) ==
 +
Afegits '''A13.01''' (''QML a Android'') i '''A13.02''' (''QML a WebAssembly'') al [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
Seguim fent les pràctiques del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
== 20240209 (2h) ==
 +
* HTTP assíncron esperant resposta MQTT:
 +
 +
[[Image:HttpMqttAssincron.png|center|HTTP a MQTT assíncron]]
 +
 +
Funció '''tramet = OFF''':
 +
flow.set("tramet","OFF");
 +
return msg;
 +
Funció '''tramet = ON , missatge''':
 +
flow.set("missatge",msg.payload);
 +
flow.set("tramet","ON");
 +
return msg;
 +
Funció '''LDR req''':
 +
if(msg.req.query['topic'] == "LDR"){
 +
    msg.payload = "El valor de 0 a 4095 de l'LDR demanada";
 +
}else{
 +
    msg.payload = "No entenc el tema";
 +
}
 +
return msg;
 +
Funció '''wait MQTT message with timeout''':
 +
var timeoutWait = 2; // 2 second timeout wait
 +
var now = new Date();
 +
var timeoutTime = new Date().setSeconds(now.getSeconds() + timeoutWait);
 +
var timeOuted = true;
 +
var tramet;
 +
 +
while (now < timeoutTime) {
 +
    now = new Date(); // update the current time
 +
    tramet = flow.get("tramet");
 +
    if(tramet == "ON"){
 +
        flow.set("tramet","OFF");
 +
        timeOuted = false;
 +
        msg.payload = flow.get("missatge");
 +
        break;
 +
    }
 +
}
 +
if(timeOuted){
 +
    msg.payload = "MQTT answer has been timed out!"
 +
}
 +
return msg;
 +
* Seguim fent les pràctiques del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
== 20240206 (1h) ==
 +
Seguim fent les pràctiques del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
== 20240205 (3h) ==
 +
Afegits '''A10.3''', '''A17.07''' i '''A17.08''' al [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
=== Desenvolupament d'una API en NodeRed. Pasarel·la '''HTTP a MQTT''' ===
 +
[[Image:Nodered20220402e00.png|center|Flux HTTP a MQTT]]
 +
 +
[https://www.binefa.cat/training/upcSchool/2022/20220402/httpMqtt.nodered.json Flux httpMqtt.nodered.json]
 +
 +
[http://vps656540.ovh.net:2222/mqtt?topic=/7C9EBDEA5BA0/ledW&&payload=0 Apagant] led blanc:
 +
[[Image:Nodered20220402e01.png|center|Apagant led blancto. HTTP a MQTT]]
 +
 +
[http://vps656540.ovh.net:2222/mqtt?topic=/7C9EBDEA5BA0/ledW&&payload=1 Encenent] led blanc:
 +
[[Image:Nodered20220402e02.png|center|Encenent led blanc. HTTP a MQTT]]
 +
 +
* Funció '''bridge''':
 +
msg.topic = msg.req.query['topic'];
 +
msg.payload = msg.req.query['payload'];
 +
return msg;
 +
 +
* Funció '''response''':
 +
msg.payload = "Tema: "+msg.req.query['topic']+", missatge: "+msg.req.query['payload'];
 +
return msg;
 +
=== Captura de la resposta web ===
 +
'''curl "http://iot.electronics.cat:2222/mqtt2?topic=/7C9EBDEA5BA0/ledW&&payload=0"'''
 +
Tema: /7C9EBDEA5BA0/ledW, missatge: 0
 +
Es pot redireccionar la resposta a un arxiu:
 +
'''curl "http://iot.electronics.cat:2222/mqtt2?topic=/7C9EBDEA5BA0/ledW&&payload=0" > resposta.txt'''
 +
[https://curl.se/windows/ '''curl''' per Windows]
 +
=== '''paho-mqtt''' i Python ===
 +
# pip install paho-mqtt
 +
 +
A una cel·la del jupyter-lab (si no el teniu, el podeu instal·lar seguint [https://jupyter.org/install aquestes instruccions]):
 +
 +
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')
 +
 +
== 20240202 (2h) ==
 +
[https://recull.binefa.cat/files/20240202/union02.c union02.c] al recull de codis.
 +
 +
Seguim fent les pràctiques pendents al [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
== 20240130 (1h) ==
 +
Seguim fent les pràctiques pendents al [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
* Per a qui us faci falta un emulador d'Android:
 +
 +
[[Màquina virtual Android per a fer-la servir per a executar codis QML des de QtCreator]]
 +
 +
== 20240129 (3h) ==
 +
[http://www.xtec.cat/formaciotic/ateneu_historic/materials/td97/d97m7/d97m7te.htm  Repàs de les unions] i comparació amb les estructures. [https://recull.binefa.cat/files/doc/iot02/loraWan/lora/codis/unions_01.c Exemple de codi emprant unions]
 +
 +
[https://eu1.cloud.thethings.network/ TTN] (The Things Network, Community Edition)
 +
 +
Baixeu-vos els dos pdf del [https://recull.binefa.cat/files/doc/iot02/loraWan/ recull introductori per a treballar amb LoRa] ( usuari: ''dam'' / contrasenya: ''dam2324'')
 +
 +
[[LoRa 2023-2024]]
 +
 +
Exemple de tramesa de variables de tipus ''float'' mitjançant TTN (The Things Network)
 +
 +
* '''A17.01 - Presa de contacte amb LoRa mitjançant The Things Network''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
* '''A17.02 - Tramesa de dades emprant LoRa, The Things Network i NodeRed''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
== 20240126 (2h) ==
 +
Seguim desenvolupant les pràctiques pendents.
 +
 +
* Exercici'''A14.7 - UserLand''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
== 20240123 (1h) ==
 +
L'exercici '''A14.4''' deixa d'estar en suspens i torna a estar en actiu. Tots els alumnes que venen a classe han rebut un correu amb les credencials d'accés a [https://mastodon.binefa.cat/ la instància provisional de Mastodon creada expressament] per a poder desenvolupar la pràctica.
 +
 +
Seguim desenvolupant les pràctiques pendents.
 +
 +
== 20240122 (3h) ==
 +
* L'exercici '''A14.5''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] és la documentació de la instal·lació del Grafana al vostre sistema operatiu.
 +
 +
[https://grafana.com/docs/grafana/latest/setup-grafana/installation/debian/ Instal·lació de Grafana a Debian o Ubuntu]
 +
 +
[https://grafana.com/docs/grafana/latest/setup-grafana/installation/windows/ Instal·lació de Grafana a Windows]
 +
 +
* [[Ús de Grafana llegint dades de MariaDB]]
 +
 +
* Si no l'heu finalitzat, acabeu l'exercici '''A14.8''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
* Feu els exercicis '''A17.05''' i '''A17.06''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] que us fan visualitzar a Grafana les dades emmagatzemades a MariaDB.
 +
 +
== 20240119 (2h) ==
 +
[[Ús de MariaDB per emmagatzemar dades de la Internet de les Coses]]
 +
 +
[[Ús de la base de dades MariaDB des de NodeRED]]
 +
 +
* Feu l'exercici '''A14.8''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
* Una altra [https://mastodon.bot/ instància de Mastodon per a fer bots]. L'exercici '''A14.4''' queda en suspens fins a que no es rebin les credencials de Mastodon (de qualsevol de les dues instàncies de Mastodon que s'han proposat per a fer bots).
 +
 +
== 20240116 (1h) ==
 +
Continuem desenvolupant la pràctica A13.00
 +
== 20240115 (3h) ==
 +
=== '''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]]
 +
 +
* Feu els exercicis '''A10.2''' i '''A14.4''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
== 20240112 (1h) ==
 +
Continuem desenvolupant la pràctica A13.00 del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
== 20240109 (1h) ==
 +
Continuem desenvolupant la pràctica '''A13.00''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
=== '''Deures pel 15 de gener''' ===
 +
 +
Feu-vos membres d'aquesta instància de Mastodon: [https://botsin.space/ botsin.space]
 +
 +
'''Feu-ho amb prou antelació''', és possible que trigui més de tres hores a donar-vos accés.
 +
 +
== 20240108 (3h) ==
 +
[https://recull.binefa.cat/files/20240108/ Recull de codis comentats avui]
 +
 +
=== Autenticació d'accés a NodeRED ===
 +
[https://nodered.org/docs/getting-started/local Darrera versió de 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'''.
 +
 +
* Feu l'exercici '''A14.1''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
=== '''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 '''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]
 +
 +
* Feu els exercicis '''A14.2''' i '''A14.3''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]
 +
 +
=== '''Deures pel 15 de gener''' ===
 +
 +
Feu-vos membres d'aquesta instància de Mastodon: [https://botsin.space/ botsin.space]
 +
 +
'''Feu-ho amb prou antelació''', és possible que trigui més de tres hores a donar-vos accés.
 +
 +
== 20231219 (1h) ==
 +
Continuem desenvolupant la pràctica A13.00
 +
== 20231218 (3h) ==
 +
[https://recull.binefa.cat/files/20231211/ Recull del dia d'avui]
 +
 +
Activitat '''A13.00''' [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A13.00 ginyMqtt en QML i qmake | ginyMqtt en QML i qmake]]
 +
 +
Al recull del dia d'avui hi ha una introducció a la pràctica A13.00
 +
 +
== 20231215 (1h + 1h) ==
 +
[https://recull.binefa.cat/files/20231215/ Recull del dia d'avui]
 +
 +
* [https://www.binefa.cat/training/qml/clot/pl01.zip Exemple de pàgina lliscant]. Ús de ''SwipeView''. Funciona per ''qmake'' (no per ''cmake'')
 +
 +
 +
'''Comunicació bidireccional del ''frontal'' en QML amb el ''rerefons'' en C++'''
 +
 +
'''Frontal''': En anglès ''front-end''. '''Rerefons''': En anglès ''back-end''
 +
 +
* [https://www.binefa.cat/training/qml/clot/pl02.zip Exemple d'un rerefons en C]. Ús de ''SwipeView'' i una classe de rerefons feta en C++. Funciona per ''qmake'' (no per ''cmake'')
 +
 +
 +
Procés de creació de codi per a comunicar un frontal QML amb un rerefons C++: [[Vídeos QML]]
 +
 +
* Activitat '''A08.04''' del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]]
 +
 +
== 20231211 (3h) ==
 +
[https://recull.binefa.cat/files/20231211/ Recull del dia d'avui]
 +
 +
[[Introducció al QML. Curs 2023-2024]]
 +
 +
Activitats '''A08.01''', '''A08.02''' i '''A08.03''' del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]]
 +
 +
=== 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
 +
 +
Activitats '''A08.00''' del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]]
 +
 +
== 20231205 (1h) ==
 +
[https://recull.binefa.cat/files/20231205/ Recull del dia d'avui]
 +
 +
[[Introducció al QML. Curs 2023-2024]]
 +
 +
== 20231204 (3h) ==
 +
[https://recull.binefa.cat/files/20231204/ Recull del dia d'avui]
 +
 +
Seguim fent les activitats pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]]
 +
 +
Comencem la pràctica '''A12.02'''
 +
 +
Al dia d'avui hi ha penjat:
 +
 +
* Exemple d'etiqueta dibuixada a partir d'un QPixMap: '''00_botonsToggle05.zip'''
 +
 +
* Exemple de '''QTimer''': '''00_botonsToggle06.zip'''
 +
 +
* Exemple dels senyals '''pressed()''' i '''released()''': '''04_indicadorBotons00.zip'''
 +
 +
* Exemple d'ús de '''QJsonObject''': '''01_json_00.zip'''
 +
 +
* Biblioteca '''JSON''' per l'IDE d'Arduino: '''Arduino_JSON.zip''' (exemple d'ús: '''IoT-02_mqtt_10_dam.zip''')
 +
 +
* Exemple de conversió de JSON a text i de text a JSON amb NodeRED (els temes MQTT han de ser de tipus text): '''json00.nodered.txt'''
 +
 +
== 20231201 (2h) ==
 +
Seguim fent les activitats pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]]
 +
 +
[[Instal·lació de les eines mínimes (SDK, NDK i eines de terminal) per a fer aplicacions en Qt per a Android]]
 +
 +
== 20231128 (1h) ==
 +
Seguim fent les activitats pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]]
 +
 +
== 20231127 (3h) ==
 +
Seguim fent les activitats pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]]
 +
 +
== 20231124 (1h + 1h) ==
 +
* [https://zetcode.com/gui/qt5/strings/ Exemples emprant QString]
 +
 +
* [https://zetcode.com/gui/qt5/containers/ Exemples emprant QStringList]
 +
 +
* Diferències entre el mètode ''setEnabled(bool)'' i ''setVisible(bool)''
 +
 +
* [https://zetcode.com/gui/qt5/eventsandsignals/ Qt's keyPressEvent] ( ''#include <QKeyEvent>'' )
 +
 +
* [https://doc.qt.io/qt-6/resources.html The Qt Resource System (.qrc)]
 +
 +
* [https://doc.qt.io/qt-6/qdialog.html QDialog]. Senyals ''accepted()'' i ''rejected()''. Mètodes de resposta ''accept()'' i ''reject()''. Respostes a ''dlg.exec()'': ''QDialog::Accepted'' i ''QDialog::Rejected''.
 +
 +
* [https://doc.qt.io/qt-6/qmainwindow.html QMainWindow]. [https://zetcode.com/gui/qt5/menusandtoolbars/ Menús i barres d'eines]. [https://doc.qt.io/qt-6/qaction.html QAction]
 +
 +
* Seguim fent l'activitat [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A06.04 - Interfícies gràfiques | A06.04 - Interfícies gràfiques]]
 +
 +
* Seguim fent les activitats pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]]
 +
 +
* Documentació sobre Qt/C++:
 +
- [https://recull.binefa.cat/files/doc/Foundations%20of%20Qt%20Development.pdf Llibre de Qt]
 +
 +
- [https://zetcode.com/gui/qt5/ Tutorial breu sobre Qt]
 +
 +
== 20231121 (1h) ==
 +
* Explicació de l'activitat [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A06.04 - Interfícies gràfiques | A06.04 - Interfícies gràfiques]]
 +
 +
* Seguim fent les activitats pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]]
 +
 +
== 20231120 (3h) ==
 +
Seguim fent les activitats pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]]
 +
 +
== 20231117 (1h + 1h) ==
 +
Seguim fent les activitats pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]]
 +
 +
== 20231114 (1h) ==
 +
[https://recull.binefa.cat/files/programes_i_apps/qt/CMakeLists.txt Exemple d'arxiu de projecte emprant CMake]
 +
 +
* CMake
 +
[https://cmake.org/features/ CMake: The Standard Build System]
 +
 +
[https://doc.qt.io/qt-6/cmake-get-started.html Getting started with CMake in Qt6]
 +
 +
Vídeo [https://www.youtube.com/watch?v=952DsSbAHHg CMake and Qt (Part 1) - CMake Introduction]
 +
 +
[https://www.qt.io/blog/qt-and-cmake-the-past-the-present-and-the-future Qt and CMake: The Past, the Present and the Future]
 +
 +
Vídeo [https://www.youtube.com/watch?v=RVfRnuP2MME Migrating from QMake to CMake | #QtWS22]
 +
 +
* Seguim fent l'activitat [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A12.01.1 - ginyMqtt amb QMake | A12.01.1 - ginyMqtt amb QMake]]
 +
 +
* Activitat [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A12.01.2 - ginyMqtt amb CMake | A12.01.2 - ginyMqtt amb CMake]]
 +
 +
== 20231013 (3h) ==
 +
* Document actualitzat de la [[Instal·lació de QtMQtt a les Qt]]
 +
 +
* Activitat A06.05 i A07.08 (prova de QtMQtt a la placa IoT-02) publicada a [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A06 - POO en C++ i Qt | A06 - POO en C++ i Qt]] i [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A07 - Introducció a la placa IoT-02, Wokwi i protocols de comunicació | A07 - Introducció a la placa IoT-02, Wokwi i protocols de comunicació]]. A06.05 i A07.08 són la mateixa pràctica (pengeu dos documents pdf idèntics amb els noms corresponents a les dues pràctiques a les carpetes A06 i A07 del [[Carpetes compartides de 2n de DAM. Curs 2023-2024 | Drive]]).
 +
 +
* A partir de [https://recull.binefa.cat/files/20231107/ ''simplecient'' amb usuari i contrasenya] s'ha generat la classe [https://recull.binefa.cat/files/programes_i_apps/qt/mqttBasic.zip mqttBasic].
 +
 +
* Activitat [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A12.01.1 - ginyMqtt amb QMake | A12.01 - ginyMqtt]]
 +
 +
== 20231110 (1h + 1h) ==
 +
Seguim fent els exercicis pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024]]
 +
 +
== 20231107 (1h) ==
 +
Feu-li una ullada a [https://recull.binefa.cat/files/20231107/ ''simplecient'' amb usuari i contrasenya]. Provem llur funcionament interactuant bidireccionalment amb la [[Placa IoT-02 | placa IoT-02]]
 +
 +
Seguim fent els exercicis pendents de l'activitat [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A06 - POO en C++ i Qt | A06 - POO en C++ i Qt]]
 +
 +
== 20231106 (3h) ==
 +
[https://github.com/jczic/MicroWorkers MicroWorkers] Tasques en MicroPython
 +
 +
[https://github.com/jordibinefa/IoT-02/tree/master/codes/freeRTOS FreeRTOS] Tasques en C a sistemes encastats. ([https://freertos.org/ Pàgina oficial de FreeRTOS])
 +
 +
[[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A09 - FreeRTOS i MicroWorkers | A09 - FreeRTOS i MicroWorkers]]
 +
 +
Seguim fent els exercicis pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024]]
 +
 +
== 20231103 (1h + 1h) ==
 +
Seguim fent els exercicis pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024]]
 +
 +
== 20231031 (1h) ==
 +
[[Instal·lació de QtMQtt a les Qt]]
 +
 +
Seguim fent els exercicis pendents de l'activitat [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A06 - POO en C++ i Qt | A06 - POO en C++ i Qt]]
 +
 +
== 20231030 (3h) ==
 +
Seguim fent els exercicis pendents de l'activitat [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A07 - Introducció a la placa IoT-02, Wokwi i protocols de comunicació | A07 - Introducció a la placa IoT-02, Wokwi i protocols de comunicació]]
 +
 +
[https://github.com/jczic/MicroWorkers MicroWorkers] Tasques en MicroPython
 +
 +
[https://github.com/jordibinefa/IoT-02/tree/master/codes/freeRTOS FreeRTOS] Tasques en C a sistemes encastats. ([https://freertos.org/ Pàgina oficial de FreeRTOS])
 +
 +
[[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A09 - FreeRTOS i MicroWorkers | A09 - FreeRTOS i MicroWorkers]]
 +
 +
== 20231027 (1h + 1h) ==
 +
1a hora: Seguim fent exercicis IoT
 +
 +
2a hora: Seguim fent exercicis Qt
 +
 +
== 20231024 (1h) ==
 +
[https://provisional.binefa.com/index.php/Recull_de_pr%C3%A0ctiques_de_2n_de_DAM._Curs_2023-2024#A06.02_-_Interf.C3.ADcies_gr.C3.A0fiques '''A06.02''']
 +
 +
== 20231020 (2h) ==
 +
[https://provisional.binefa.com/index.php/Placa_IoT-02#Instal.C2.B7laci.C3.B3_de_MicroPython Micropython a la placa IoT-02]
 +
 +
[https://docs.micropython.org/en/latest/esp32/quickref.html#pins-and-gpio Referència ràpida sobre MicroPython a l'ESP32]
 +
 +
'''Pràctica A07.08''' - [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A07.08 - Introducció al micropython | Introducció al micropython]]
 +
 +
Exercicis de MicroPython (agafant com a referència codis en C al GitHub).
 +
 +
== 20231020 (2h) ==
 +
Explicació de com encastar ginys i connectar-los mitjançant senyals (''signals'') i osques (''slots'') en C++/Qt.
 +
 +
'''Pràctica A06.01''' - [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A06.01 - Ginys encastats | Ginys encastats]]
 +
== 20231017 (1h) ==
 +
[https://recull.binefa.cat/files/20231017/ Recull del dia d'avui]
 +
 +
Explicació de com encastar ginys i connectar-los mitjançant senyals (''signals'') i osques (''slots'') en C++/Qt.
 +
 +
'''Pràctica A06.01''' - [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A06.01 - Ginys encastats | Ginys encastats]]
 +
 +
== 20231016 (3h) ==
 +
=== Nodes de '''text''', '''botó''' i '''variables de flux'''. Canvi de color d'un punt (representació d'un led) ===
 +
El node botó tramet un ''payload'' personalitzat quan es prem.
 +
 +
[[Image:Nodered20220402c01.png|center|Flujx canvi de color d'un punt]]
 +
 +
 +
[[Image:Nodered20220402c00.png|center|Visualització canvi de color d'un punt]]
 +
 +
En el ''Value format'' del node de text:
 +
<nowiki><font color={{msg.color}} ><i class="fa fa-circle" style="font-size:24px;"></i></font></nowiki>
 +
 +
Funció '''FF3399''':
 +
msg.color = "#FF3399"
 +
return msg;
 +
 +
Funció '''{R,G,B} -> {0,0,0}''':
 +
flow.set("R","00");
 +
flow.set("G","00");
 +
flow.set("B","00");
 +
flow.set("RGB","#"+flow.get("R")+flow.get("G")+flow.get("B"));
 +
msg.color = flow.get("RGB");
 +
return msg;
 +
 +
Funció '''R -> FF''':
 +
flow.set("R","FF");
 +
flow.set("RGB","#"+flow.get("R")+flow.get("G")+flow.get("B"));
 +
msg.color = flow.get("RGB");
 +
return msg;
 +
 +
Funció '''R -> 00''':
 +
flow.set("R","00");
 +
flow.set("RGB","#"+flow.get("R")+flow.get("G")+flow.get("B"));
 +
msg.color = flow.get("RGB");
 +
return msg;
 +
 +
[https://www.binefa.cat/training/upcSchool/2022/20220402/ledMulticolor.nodered.json Flux ledMulticolor.nodered.json]
 +
 +
'''Pràctica A07.02''' - [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A07.02 - Punt multicolor al NodeRED i variables de flux | Punt multicolor al NodeRED i variables de flux]]
 +
 +
'''Pràctica A07.03''' - [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A07.03 - Visualització amb un giny rellotge del nivell de llum | Visualització amb un giny rellotge del nivell de llum]]
 +
 +
'''Pràctica A07.04''' - [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A07.04 - Ús d'MQTT (no MQTTS) | Ús d'MQTT (no MQTTS)]] (''broker'': formacio.things.cat, ''usuari'': ecat, ''contrasenya'': clotClot) [https://recull.binefa.cat/files/programes_i_apps/codisArduinoIDE/IoT-02_mqtt_freeRTOS_json_12_escolaDelClot_broker2.zip Codi per a la placa IoT-02 emprant MQTT]
 +
 +
'''Pràctica A07.05''' - [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A07.05 - Instal·lació del servei mosquitto | Instal·lació del servei mosquitto]]
 +
 +
'''Pràctica A07.06''' - [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A07.06 - Ús del servei mosquitto | Ús del servei mosquitto]]
 +
 +
== 20231010 (1h) ==
 +
[https://www.binefa.cat/IoT/teoria/mqtt_00.pdf Introducció a l'MQTT]
 +
 +
[[El protocol MQTT]]
 +
 
== 20231009 (3h) ==
 
== 20231009 (3h) ==
Pràctica - [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A07.01 - Introducció al control de la placa Iot-02 mitjançant NodeRed | Introducció al control de la placa Iot-02 mitjançant NodeRed]]
+
'''Pràctica A07.01''' - [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A07.01 - Introducció al control de la placa Iot-02 mitjançant NodeRed | Introducció al control de la placa Iot-02 mitjançant NodeRed]]
 +
 
 +
[https://www.binefa.cat/IoT/teoria/mqtt_00.pdf Introducció a l'MQTT]
 +
 
 +
[[MQTT-Dash. Control del relé de enclavamiento y lectura de la LDR | Configuració de l'MQTT-Dash]] ([https://recull.binefa.cat/files/programes_i_apps/mqtt-dash-iot-smart-home.apk mqtt-dash-iot-smart-home.apk])
  
 
== 20231006 (1h + 1h) ==
 
== 20231006 (1h + 1h) ==
Línia 73: Línia 743:
  
 
Paquets que manquen per a fer funcionar les Qt a l'Ubuntu:  
 
Paquets que manquen per a fer funcionar les Qt a l'Ubuntu:  
  sudo apt install libx11-xcb-dev libglu1-mesa-dev
+
  sudo apt install libx11-xcb-dev libglu1-mesa-dev libxcb-xinerama0
  
 
=== IoT ===
 
=== IoT ===
Línia 108: Línia 778:
  
 
= Documentació =
 
= Documentació =
 +
[https://drive.google.com/drive/folders/1P4FlwnGsX4qXIXBJJL9vS8KK1R-OUeZM Drive curs 2023-2024] ([https://web2.alexiaedu.com/ACWeb/paginas/Home/HomeMetro.aspx Alèxia], [https://sac.net.fje.edu/v1.0/#/home/ SAC]). [https://drive.google.com/drive/folders/1dcGDwZBWcG3utW6OxXBkQey7oHa_3ZNx Eina d'avaluació GP1]
 +
 +
[https://drive.google.com/drive/folders/0AG8LE_yosU7JUk9PVA novaFP ASIX/DAW/DAM]
 +
 +
[https://drive.google.com/drive/folders/1plnk2yt-SlPEwJDE7ILUkrGRsm2hf1fw Totes les llistes]
 +
 
[[Distribució de M07UF1 i M13 al curs 2022-2023 de 2n de DAM]]
 
[[Distribució de M07UF1 i M13 al curs 2022-2023 de 2n de DAM]]
  
Línia 114: Línia 790:
 
[https://drive.google.com/drive/folders/1vorYyIsiOUU6Ia3ViqDCpfG-gFUqnroc Projecte global GP1. IoT]
 
[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]
+
[http://192.168.10.17:9191/app?service=page/UserWebPrint Impressió]
  
[https://docs.google.com/forms/d/1VwVSCWRftkxRUdqQKi_Uqi8LboIrHDh53ZFdei303gA/edit Enquesta del 17 de novembre de 2022]
+
<!-- [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:  
 
Paquets que manquen per a fer funcionar les Qt a l'Ubuntu:  
  sudo apt install libx11-xcb-dev libglu1-mesa-dev
+
  sudo apt install libx11-xcb-dev libglu1-mesa-dev libxcb-xinerama0
 
[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 132: Línia 809:
  
 
[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]
 +
 +
[[Instal·lació de QtMQtt a les Qt]]
  
 
=== Qt for Android ===
 
=== Qt for Android ===
 
[https://doc.qt.io/qt-6/android-getting-started.html Getting Started with Qt for Android]
 
[https://doc.qt.io/qt-6/android-getting-started.html Getting Started with Qt for Android]
 +
 +
[https://doc.qt.io/qt-6.5/android-getting-started.html Getting Started with Qt6.5 for Android]
 +
 +
[[Instal·lació de les eines mínimes (SDK, NDK i eines de terminal) per a fer aplicacions en Qt per a Android]]
  
 
=== Qt for WebAssembly ===
 
=== Qt for WebAssembly ===

Revisió de 15:09, 20 juny 2024

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

Contingut

Enllaços ràpids

Compartició de pantalla

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

Recull de codis fets a classe. Curs 2023-2024

Llista de 2n de DAM

Totes les llistes

Algunes classes

Examen del M07UF1: 13 de maig de 2024. El 21 de maig a les dues darreres hores també és reservat.

20240513 (1h + 2h) Examen M07UF1

Recull del dia d'avui

  • 1a hora: GP3
  • 2a i 3a hora: Examen final de 2/3 parts del M07UF1

20240510 (2h)

Seguim amb el GP3.

20240506 (1h + 2h)

Recull del dia d'avui <-- Conversió de 2 bytes (unsigned char) a short int

  • 1a hora: GP3
  • 2a i 3a hora: M07UF1 (Heu d'acabar les pràctiques pendents)

20240503 (2h)

Seguim amb el GP3.

20240430 (1h)

Seguim amb el GP3.

20240429 (1h + 2h)

Recull del dia d'avui

  • 1a hora: GP3
  • 2a i 3a hora: M07UF1

S'ha afegit M05. Seguim resolent els exercicis del recull de pràctiques. (Fins ara s'ha demanat fer M00, M01, M02, M03, M04 i M05).

20240426 (2h)

Seguim amb el GP3.

20240423 (1h)

Seguim amb el GP3.

20240422 (1h + 2h)

Recull del dia d'avui

  • 1a hora: GP3
  • 2a i 3a hora: M07UF1

S'ha afegit M03. Seguim resolent l'exercici de l'enunciat M04 del recull de pràctiques. (Fins ara s'ha demanat fer M00, M01, M02, M03 i M04. No s'ha demanat fer M05).

20240419 (2h)

Seguim amb el GP3.

20240416 (1h)

Seguim amb el GP3.

20240415 (1h + 2h)

Recull del dia d'avui

  • 1a hora: GP3
  • 2a i 3a hora: M07UF1

Seguim resolent l'exercici de l'enunciat M04 del recull de pràctiques. (Fins ara s'ha demanat fer M00, M01, M02 i M04. No s'ha demanat fer ni M03 ni M05).

20240412 (2h)

Seguim amb el GP3.

20240409 (1h)

Seguim amb el GP3.

20240408 (1h + 2h)

Recull del dia d'avui

Pujats els enunciats M04 i M05 al recull de pràctiques. Fins ara s'ha demanat fer M00, M01, M02 i M04. No s'ha demanat fer ni M03 ni M05.

20240405 (2h)

Recull del dia d'avui <-- Proposta de m01_3_00

Seguim amb el M07UF1 tot fent els exercicis pendents del recull de pràctiques

20240402 (1h)

Seguim amb el GP3.

20240318 (1h + 2h)

1h de GP3 i 2h de M07UF1

Acabem les pràctiques M00 al recull de pràctiques

python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"

20240315 (2h)

GP3

20240311 (1h + 2h)

1h de GP3 i 2h de M07UF1

Acabem les pràctiques M00 al recull de pràctiques

Sistemes SCADA

Modbus RTU

20240308 (1h)

Fem les pràctiques M00 al recull de pràctiques

20240304 (1h + 2h) GP3

Comença GP3

Comença el tercer trimestre del M07UF1

Afegides les pràctiques M00 al recull de pràctiques

20240301 (2h)

Seguim fent les pràctiques del recull de pràctiques

20240226 (3h) A11 i prova trimestral M07UF1

Enunciat de la metacognició de síntesi del M07UF1 i part puntuable del projecte global

20240223 (2h)

Seguim fent les pràctiques del recull de pràctiques

20240220 (1h)

Seguim fent les pràctiques del recull de pràctiques

20240219 (3h) A11 (Prova final part IoT -GP1-)

Enunciat de la metacognició de síntesi en pdf

Enunciat de la metacognició de síntesi en format editable

20240216 (2h)

Seguim fent les pràctiques del recull de pràctiques

20240213 (1h)

Afegits A13.01 (QML a Android) i A13.02 (QML a WebAssembly) al recull de pràctiques

Seguim fent les pràctiques del recull de pràctiques

20240209 (2h)

  • HTTP assíncron esperant resposta MQTT:
HTTP a MQTT assíncron

Funció tramet = OFF:

flow.set("tramet","OFF");
return msg;

Funció tramet = ON , missatge:

flow.set("missatge",msg.payload);
flow.set("tramet","ON");
return msg;

Funció LDR req:

if(msg.req.query['topic'] == "LDR"){
   msg.payload = "El valor de 0 a 4095 de l'LDR demanada";
}else{
   msg.payload = "No entenc el tema";
}
return msg;

Funció wait MQTT message with timeout:

var timeoutWait = 2; // 2 second timeout wait
var now = new Date();
var timeoutTime = new Date().setSeconds(now.getSeconds() + timeoutWait);
var timeOuted = true;
var tramet;

while (now < timeoutTime) {
   now = new Date(); // update the current time
   tramet = flow.get("tramet");
   if(tramet == "ON"){
       flow.set("tramet","OFF");
       timeOuted = false;
       msg.payload = flow.get("missatge");
       break;
   }
}
if(timeOuted){
   msg.payload = "MQTT answer has been timed out!"
}
return msg;

20240206 (1h)

Seguim fent les pràctiques del recull de pràctiques

20240205 (3h)

Afegits A10.3, A17.07 i A17.08 al recull de pràctiques

Desenvolupament d'una API en NodeRed. Pasarel·la HTTP a MQTT

Flux HTTP a MQTT

Flux httpMqtt.nodered.json

Apagant led blanc:

Apagant led blancto. HTTP a MQTT

Encenent led blanc:

Encenent led blanc. HTTP a MQTT
  • Funció bridge:
msg.topic = msg.req.query['topic'];
msg.payload = msg.req.query['payload'];
return msg;
  • Funció response:
msg.payload = "Tema: "+msg.req.query['topic']+", missatge: "+msg.req.query['payload'];
return msg;

Captura de la resposta web

curl "http://iot.electronics.cat:2222/mqtt2?topic=/7C9EBDEA5BA0/ledW&&payload=0"
Tema: /7C9EBDEA5BA0/ledW, missatge: 0

Es pot redireccionar la resposta a un arxiu:

curl "http://iot.electronics.cat:2222/mqtt2?topic=/7C9EBDEA5BA0/ledW&&payload=0" > resposta.txt

curl per Windows

paho-mqtt i Python

# pip install paho-mqtt

A una cel·la del jupyter-lab (si no el teniu, el podeu instal·lar seguint aquestes instruccions):

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

20240202 (2h)

union02.c al recull de codis.

Seguim fent les pràctiques pendents al recull de pràctiques

20240130 (1h)

Seguim fent les pràctiques pendents al recull de pràctiques

  • Per a qui us faci falta un emulador d'Android:

Màquina virtual Android per a fer-la servir per a executar codis QML des de QtCreator

20240129 (3h)

Repàs de les unions i comparació amb les estructures. Exemple de codi emprant unions

TTN (The Things Network, Community Edition)

Baixeu-vos els dos pdf del recull introductori per a treballar amb LoRa ( usuari: dam / contrasenya: dam2324)

LoRa 2023-2024

Exemple de tramesa de variables de tipus float mitjançant TTN (The Things Network)

20240126 (2h)

Seguim desenvolupant les pràctiques pendents.

20240123 (1h)

L'exercici A14.4 deixa d'estar en suspens i torna a estar en actiu. Tots els alumnes que venen a classe han rebut un correu amb les credencials d'accés a la instància provisional de Mastodon creada expressament per a poder desenvolupar la pràctica.

Seguim desenvolupant les pràctiques pendents.

20240122 (3h)

  • L'exercici A14.5 del recull de pràctiques és la documentació de la instal·lació del Grafana al vostre sistema operatiu.

Instal·lació de Grafana a Debian o Ubuntu

Instal·lació de Grafana a Windows

  • Feu els exercicis A17.05 i A17.06 del recull de pràctiques que us fan visualitzar a Grafana les dades emmagatzemades a MariaDB.

20240119 (2h)

Ús de MariaDB per emmagatzemar dades de la Internet de les Coses

Ús de la base de dades MariaDB des de NodeRED

  • Una altra instància de Mastodon per a fer bots. L'exercici A14.4 queda en suspens fins a que no es rebin les credencials de Mastodon (de qualsevol de les dues instàncies de Mastodon que s'han proposat per a fer bots).

20240116 (1h)

Continuem desenvolupant la pràctica A13.00

20240115 (3h)

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


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

20240112 (1h)

Continuem desenvolupant la pràctica A13.00 del recull de pràctiques

20240109 (1h)

Continuem desenvolupant la pràctica A13.00 del recull de pràctiques

Deures pel 15 de gener

Feu-vos membres d'aquesta instància de Mastodon: botsin.space

Feu-ho amb prou antelació, és possible que trigui més de tres hores a donar-vos accés.

20240108 (3h)

Recull de codis comentats avui

Autenticació d'accés a NodeRED

Darrera versió de 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
  • Instal·lació de nodes de Telegram a NodeRED (afegiu els nodes node-red-contrib-telegrambot)
  • 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

Deures pel 15 de gener

Feu-vos membres d'aquesta instància de Mastodon: botsin.space

Feu-ho amb prou antelació, és possible que trigui més de tres hores a donar-vos accés.

20231219 (1h)

Continuem desenvolupant la pràctica A13.00

20231218 (3h)

Recull del dia d'avui

Activitat A13.00 ginyMqtt en QML i qmake

Al recull del dia d'avui hi ha una introducció a la pràctica A13.00

20231215 (1h + 1h)

Recull del dia d'avui


Comunicació bidireccional del frontal en QML amb el rerefons en C++

Frontal: En anglès front-end. Rerefons: En anglès back-end


Procés de creació de codi per a comunicar un frontal QML amb un rerefons C++: Vídeos QML

20231211 (3h)

Recull del dia d'avui

Introducció al QML. Curs 2023-2024

Activitats A08.01, A08.02 i A08.03 del recull de pràctiques de 2n de DAM._Curs_2023-2024

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

Activitats A08.00 del recull de pràctiques de 2n de DAM._Curs_2023-2024

20231205 (1h)

Recull del dia d'avui

Introducció al QML. Curs 2023-2024

20231204 (3h)

Recull del dia d'avui

Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024

Comencem la pràctica A12.02

Al dia d'avui hi ha penjat:

  • Exemple d'etiqueta dibuixada a partir d'un QPixMap: 00_botonsToggle05.zip
  • Exemple de QTimer: 00_botonsToggle06.zip
  • Exemple dels senyals pressed() i released(): 04_indicadorBotons00.zip
  • Exemple d'ús de QJsonObject: 01_json_00.zip
  • Biblioteca JSON per l'IDE d'Arduino: Arduino_JSON.zip (exemple d'ús: IoT-02_mqtt_10_dam.zip)
  • Exemple de conversió de JSON a text i de text a JSON amb NodeRED (els temes MQTT han de ser de tipus text): json00.nodered.txt

20231201 (2h)

Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024

Instal·lació de les eines mínimes (SDK, NDK i eines de terminal) per a fer aplicacions en Qt per a Android

20231128 (1h)

Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024

20231127 (3h)

Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024

20231124 (1h + 1h)

  • Diferències entre el mètode setEnabled(bool) i setVisible(bool)
  • QDialog. Senyals accepted() i rejected(). Mètodes de resposta accept() i reject(). Respostes a dlg.exec(): QDialog::Accepted i QDialog::Rejected.
  • Documentació sobre Qt/C++:

- Llibre de Qt

- Tutorial breu sobre Qt

20231121 (1h)

20231120 (3h)

Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024

20231117 (1h + 1h)

Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024

20231114 (1h)

Exemple d'arxiu de projecte emprant CMake

  • CMake

CMake: The Standard Build System

Getting started with CMake in Qt6

Vídeo CMake and Qt (Part 1) - CMake Introduction

Qt and CMake: The Past, the Present and the Future

Vídeo Migrating from QMake to CMake | #QtWS22

20231013 (3h)

20231110 (1h + 1h)

Seguim fent els exercicis pendents del Recull de pràctiques de 2n de DAM._Curs_2023-2024

20231107 (1h)

Feu-li una ullada a simplecient amb usuari i contrasenya. Provem llur funcionament interactuant bidireccionalment amb la placa IoT-02

Seguim fent els exercicis pendents de l'activitat A06 - POO en C++ i Qt

20231106 (3h)

MicroWorkers Tasques en MicroPython

FreeRTOS Tasques en C a sistemes encastats. (Pàgina oficial de FreeRTOS)

A09 - FreeRTOS i MicroWorkers

Seguim fent els exercicis pendents del Recull de pràctiques de 2n de DAM._Curs_2023-2024

20231103 (1h + 1h)

Seguim fent els exercicis pendents del Recull de pràctiques de 2n de DAM._Curs_2023-2024

20231031 (1h)

Instal·lació de QtMQtt a les Qt

Seguim fent els exercicis pendents de l'activitat A06 - POO en C++ i Qt

20231030 (3h)

Seguim fent els exercicis pendents de l'activitat A07 - Introducció a la placa IoT-02, Wokwi i protocols de comunicació

MicroWorkers Tasques en MicroPython

FreeRTOS Tasques en C a sistemes encastats. (Pàgina oficial de FreeRTOS)

A09 - FreeRTOS i MicroWorkers

20231027 (1h + 1h)

1a hora: Seguim fent exercicis IoT

2a hora: Seguim fent exercicis Qt

20231024 (1h)

A06.02

20231020 (2h)

Micropython a la placa IoT-02

Referència ràpida sobre MicroPython a l'ESP32

Pràctica A07.08 - Introducció al micropython

Exercicis de MicroPython (agafant com a referència codis en C al GitHub).

20231020 (2h)

Explicació de com encastar ginys i connectar-los mitjançant senyals (signals) i osques (slots) en C++/Qt.

Pràctica A06.01 - Ginys encastats

20231017 (1h)

Recull del dia d'avui

Explicació de com encastar ginys i connectar-los mitjançant senyals (signals) i osques (slots) en C++/Qt.

Pràctica A06.01 - Ginys encastats

20231016 (3h)

Nodes de text, botó i variables de flux. Canvi de color d'un punt (representació d'un led)

El node botó tramet un payload personalitzat quan es prem.

Flujx canvi de color d'un punt


Visualització canvi de color d'un punt

En el Value format del node de text:

<font color={{msg.color}} ><i class="fa fa-circle" style="font-size:24px;"></i></font>

Funció FF3399:

msg.color = "#FF3399"
return msg;

Funció {R,G,B} -> {0,0,0}:

flow.set("R","00");
flow.set("G","00");
flow.set("B","00");
flow.set("RGB","#"+flow.get("R")+flow.get("G")+flow.get("B"));
msg.color = flow.get("RGB");
return msg;

Funció R -> FF:

flow.set("R","FF");
flow.set("RGB","#"+flow.get("R")+flow.get("G")+flow.get("B"));
msg.color = flow.get("RGB");
return msg;

Funció R -> 00:

flow.set("R","00");
flow.set("RGB","#"+flow.get("R")+flow.get("G")+flow.get("B"));
msg.color = flow.get("RGB");
return msg;

Flux ledMulticolor.nodered.json

Pràctica A07.02 - Punt multicolor al NodeRED i variables de flux

Pràctica A07.03 - Visualització amb un giny rellotge del nivell de llum

Pràctica A07.04 - Ús d'MQTT (no MQTTS) (broker: formacio.things.cat, usuari: ecat, contrasenya: clotClot) Codi per a la placa IoT-02 emprant MQTT

Pràctica A07.05 - Instal·lació del servei mosquitto

Pràctica A07.06 - Ús del servei mosquitto

20231010 (1h)

Introducció a l'MQTT

El protocol MQTT

20231009 (3h)

Pràctica A07.01 - Introducció al control de la placa Iot-02 mitjançant NodeRed

Introducció a l'MQTT

Configuració de l'MQTT-Dash (mqtt-dash-iot-smart-home.apk)

20231006 (1h + 1h)

Recull del dia d'avui

20231003 (1h)

Recull del dia d'avui

  • Giny botó --> qDebug()
  • Giny lliscant + visualitzador LCD
  • Cursors
  • Matrioxca
  • Interfície gràfica que incrementa i decrementa

20231002 (3h)

Recull del dia d'avui

Codi Snap!

20230929 (1h + 1h)

Recull del dia d'avui

20230926 (1h)

Recull del dia d'avui

20230922 (1h + 1h)

Recull del dia d'avui

20230919 (1h)

  • Dubtes del dia anterior

20230918 (3h)

Recull del dia 20230918 usuari: dam | contrasenya: dam2324

Distribució de M07UF1 i M13 al curs 2023-2024

Distribució de M07UF1 i M13 al curs 2023-2024 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 libxcb-xinerama0

IoT

  • NodeRED

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

Activitat 7

Repositori de codis fet a classe durant el curs

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

Documentació

Drive curs 2023-2024 (Alèxia, SAC). Eina d'avaluació GP1

novaFP ASIX/DAW/DAM

Totes les llistes

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

Impressió

Qt/QML

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

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

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

Instal·lació de QtMQtt a les Qt

Qt for Android

Getting Started with Qt for Android

Getting Started with Qt6.5 for Android

Instal·lació de les eines mínimes (SDK, NDK i eines de terminal) per a fer aplicacions en Qt per a 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