Diferència entre revisions de la pàgina «DAM 2020-2021»
(68 revisions intermèdies per 2 usuaris que no es mostren) | |||
Línia 6: | Línia 6: | ||
[https://docs.google.com/spreadsheets/d/1kvyONuw9stK7VuuQS8i45lzwkhquwA_9jmXnNemjZNk/edit#gid=306804274 Llista 2n de DAM 2020-2021] | [https://docs.google.com/spreadsheets/d/1kvyONuw9stK7VuuQS8i45lzwkhquwA_9jmXnNemjZNk/edit#gid=306804274 Llista 2n de DAM 2020-2021] | ||
+ | |||
+ | [[Carpetes compartides 2n de DAM. Curs 2020-2021]] | ||
= Alguns vídeos d'ajuda = | = Alguns vídeos d'ajuda = | ||
Línia 21: | Línia 23: | ||
= Algunes classes = | = Algunes classes = | ||
− | == 20210304 (3h | + | == 20210609 (3h presencial) '''Avaluació extraordinària''' == |
+ | [https://binefa.cat/dam2021/20210610_xtra/ Enunciats de l'avaluació extraordinària] | ||
+ | |||
+ | == 20210528 (2h en línia) '''Presentació de projectes de 2n de DAM''' == | ||
+ | [https://meet.google.com/vkc-uupk-kai Sala Meet de la presentació de projectes] | ||
+ | |||
+ | == 20210527 (3h en línia) '''Presentació de projectes de 2n de DAM''' == | ||
+ | [https://meet.google.com/vkc-uupk-kai Sala Meet de la presentació de projectes] | ||
+ | |||
+ | == 20210520 (1h presencial) == | ||
+ | Seguim amb el [[Projecte de final de CFGS DAM (2020-2021)]] | ||
+ | |||
+ | == 20210517 (1h presencial) == | ||
+ | Seguim amb el [[Projecte de final de CFGS DAM (2020-2021)]] | ||
+ | |||
+ | == 20210514 (2h presencial) == | ||
+ | Seguim amb el [[Projecte de final de CFGS DAM (2020-2021)]] | ||
+ | |||
+ | == 20210513 (3h presencial) == | ||
+ | Seguim amb el [[Projecte de final de CFGS DAM (2020-2021)]] | ||
+ | |||
+ | == 20210510 (1h presencial) == | ||
+ | Seguim amb el [[Projecte de final de CFGS DAM (2020-2021)]] | ||
+ | |||
+ | == 20210507 (2h presencial) == | ||
+ | Seguim amb el [[Projecte de final de CFGS DAM (2020-2021)]] | ||
+ | |||
+ | == 20210506 (3h presencial) == | ||
+ | Seguim amb el [[Projecte de final de CFGS DAM (2020-2021)]] | ||
+ | |||
+ | == 20210503 (1h presencial) == | ||
+ | Seguim amb el [[Projecte de final de CFGS DAM (2020-2021)]] | ||
+ | |||
+ | == 20210430 (2h presencial) == | ||
+ | Seguim amb el [[Projecte de final de CFGS DAM (2020-2021)]] | ||
+ | |||
+ | == 20210429 (3h presencial) == | ||
+ | Seguim amb el [[Projecte de final de CFGS DAM (2020-2021)]] | ||
+ | |||
+ | == 20210426 '''Comença el projecte''' (1h presencial) == | ||
+ | Comentem les notes provisionals i comença el temps de projecte. | ||
+ | |||
+ | == 20210423 '''Darrer dia''' (2h síncrona) == | ||
+ | Feu alguns exercicis que no vau fer ahir de l'[https://binefa.cat/dam2021/20210423_darrerDia/ examen d'ordinària del curs 2020-2021] amb l'objectiu de pujar nota. He afegit l'arxiu de NodeRED de control de l'ascensor i he corregit alguna errata que vau detectar ahir. | ||
+ | |||
+ | == 20210422 '''Examen''' (3h presencial) == | ||
+ | [https://binefa.cat/dam2021/20210422_ex/ Examen d'ordinària del curs 2020-2021] | ||
+ | |||
+ | [http://extensions.snap.berkeley.edu/ Snap! per HTTP] per a fer servir sòcols web no segurs. | ||
+ | |||
+ | He afegit [https://binefa.cat/dam2021/20210422_ex/ascensor.nodered.txt flux de NodeRED per a l'ascensor]. Recordeu-vos de canviar la MAC a tot arreu i d'afegir-hi usuari i contrasenya al ''broker''. | ||
+ | |||
+ | ''Errata'': | ||
+ | |||
+ | M09UF3.6) Feu un control del led blanc mitjançant el NodeRED emprant el protocol UDP | ||
+ | |||
+ | == 20210419 (1h presencial) == | ||
+ | Per a canviar l'Spread Factor ([https://github.com/jordibinefa/arduino-IDE-codes/blob/master/esp32_lorawan_ttnEsp32_ttgo_multichannel_02b/esp32_lorawan_ttnEsp32_ttgo_multichannel_02b.ino línia 497 d'aquest codi d'exemple]): | ||
+ | |||
+ | // Set data rate and transmit power for uplink (note: txpow seems to be ignored by the library) | ||
+ | LMIC_setDrTxpow('''DR_SF7''', 14); | ||
+ | |||
+ | |||
+ | == 20210416 (2h presencial) == | ||
+ | Anem acabant els [[Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)]] i comentem algunes propostes de projectes relacionats amb M03UF1, M15UF1, M09UF2 i M09UF3 | ||
+ | |||
+ | [https://binefa.cat/dam2021/20210416/ Alguns codis comentats avui] | ||
+ | |||
+ | Instal·lació de l'OpenMPI a la màquina (per a molts, virtual) de Linux. | ||
+ | |||
+ | == 20210415 (3h presencial) == | ||
+ | [https://binefa.cat/dam2021/20210415/funcio4sortides.nodered.txt Exemple de funció amb 4 sortides] (Cal que canvieu a la funció la única sortida per defecte a quatre) | ||
+ | |||
+ | var amunt = {payload: "amunt"}; | ||
+ | var mig = {payload: "mig"}; | ||
+ | var avall = {payload: "avall"}; | ||
+ | |||
+ | return [amunt,mig,avall,msg]; | ||
+ | |||
+ | [https://binefa.cat/dam2021/20210415/ Alguns codis comentats avui] | ||
+ | |||
+ | Instal·lació de l'OpenMPI a la màquina (per a molts, virtual) de Linux. | ||
+ | |||
+ | Anem acabant els [[Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)]] i comentem algunes propostes de projectes relacionats amb M03UF1, M15UF1, M09UF2 i M09UF3 | ||
+ | |||
+ | == 20210412 (1h presencial) == | ||
+ | Anem acabant els [[Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)]] i comentem algunes propostes de projectes relacionats amb M03UF1, M15UF1, M09UF2 i M09UF3 | ||
+ | |||
+ | == 20210409 (2h síncrona) == | ||
+ | [[Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)]] | ||
+ | |||
+ | == 20210408 (3h presencial) == | ||
+ | [https://www.things.cat/index.php?title=P%C3%A0gina_principal#Programaci.C3.B3_remota_.28OTA.29 Programació remota (OTA)] (JESUITESFP / IOTcl1220_) | ||
+ | |||
+ | [[Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)]] | ||
+ | |||
+ | [https://binefa.cat/dam2021/20210408/ Alguns codis comentats avui] | ||
+ | |||
+ | == 20210326 (2h presencial) == | ||
+ | [[Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)]] | ||
+ | |||
+ | [https://binefa.cat/dam2021/20210326/ Alguns codis comentats avui] | ||
+ | |||
+ | [https://binefa.cat/dam2021/20210326/cadena4bytes_a_float.nodered.txt Flux de NodeRED que agafa una cadena de text de 4 bytes i ho converteix a un número real (''float'')] | ||
+ | |||
+ | == 20210325 (3h presencial) == | ||
+ | [[Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)]] | ||
+ | |||
+ | [https://binefa.cat/dam2021/20210325/ Alguns codis comentats avui] per a passar vectors de bytes (''unsigned char'') a nombres enters o reals fent servir les funcions de Javascript per a NodeRED. | ||
+ | |||
+ | == 20210322 (1h presencial) == | ||
+ | [[Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)]] | ||
+ | |||
+ | Comentem l'exercici 3.7 | ||
+ | |||
+ | == 20210319 (2h síncrona) == | ||
+ | [[Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)]] | ||
+ | |||
+ | [https://binefa.cat/dam2021/20210319/ Alguns codis explicats avui] | ||
+ | |||
+ | === '''FreeRTOS''' === | ||
+ | [https://github.com/jordibinefa/IoT-02/tree/master/codes/freeRTOS Alguns codis funcionant amb FreeRTOS per a la placa IoT-02 basada en ESP32] | ||
+ | |||
+ | [https://techtutorialsx.com/2017/05/06/esp32-arduino-creating-a-task/ Explicació d'un codi bàsic en FreeRTOS] | ||
+ | |||
+ | [https://www.freertos.org/Documentation/RTOS_book.html '''Manual de referència per al FreeRTOS'''] | ||
+ | |||
+ | == 20210318 (3h presencial) == | ||
+ | [[Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)]] | ||
+ | |||
+ | sudo cat '''/etc/mosquitto/mosquitto.conf''': | ||
+ | pid_file /var/run/mosquitto.pid | ||
+ | |||
+ | persistence true | ||
+ | persistence_location /var/lib/mosquitto/ | ||
+ | |||
+ | log_dest file /var/log/mosquitto/mosquitto.log | ||
+ | |||
+ | include_dir /etc/mosquitto/conf.d | ||
+ | |||
+ | '''allow_anonymous false''' | ||
+ | '''password_file /etc/mosquitto/certs/contrasenyes.txt''' | ||
+ | |||
+ | '''listener 1883''' | ||
+ | |||
+ | listener 9001 | ||
+ | protocol websockets | ||
+ | |||
+ | cat '''/etc/mosquitto/certs/contrasenyes.txt''' (usuaris ''ecat'' i ''ad''): | ||
+ | '''ecat''':$6$SdtdpCPcQ4wonN7Y$Dgix123455BRyzvUQxMKX2lmr/4r/K3b9/su9KzMdMZhLxS3cm6a+nCrRahz+r9DFOh0ecsoZVwlG+G9tnA== | ||
+ | '''ad''':$6$Nu8O3BxNBORplkSW$LZAqGNiPnX1HnC0ZbI789787867677565eJZAQnWWrWDaFjJz5OIZ8ljJRBbL6GFCKlgoaUFllFGvBhMtnfJQ== | ||
+ | |||
+ | == 20210315 (1h presencial) == | ||
+ | Conceptes de [[LoRa 2020-2021]] | ||
+ | |||
+ | == 20210312 (2h presencial) == | ||
+ | [[Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)]] | ||
+ | |||
+ | [https://binefa.cat/dam2021/20210312_iot/missatgeAscendentTTN.nodered.txt Codi de desxifratge d'un missatge ascendent de The Things Network] | ||
+ | |||
+ | Codi basat en [https://binefa.cat/IoT/nodeRed/nodeRed01.pdf la pàgina 42 d'aquest pdf]: | ||
+ | var b = new Buffer(msg.payload.payload_raw,'base64') | ||
+ | msg.payload = b.toString() | ||
+ | return msg; | ||
+ | |||
+ | == 20210311 (3h presencial) == | ||
+ | Avui assistiré les dues primeres hores. La tercera he de ser a una sessió d'avaluació, aneu fent els [[Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)]]. | ||
+ | |||
+ | La pràctica de LoRaWAN requereix que hi sigueu a un lloc amb cobertura. Per tant, feu tot el possible per a ser-hi presencialment. | ||
+ | |||
+ | === '''LoRaWAN''' === | ||
+ | Doneu-vos d'alta com a usuaris de [https://www.thethingsnetwork.org/ The Things Network] | ||
+ | |||
+ | [[LoRa 2020-2021]] | ||
+ | |||
+ | == 20210308 (1h presencial) == | ||
+ | Repassem el funcionament de la vostra placa IoT-02 al vostre ''broker'' MQTT, el vostre NodeRED, el vostre InfluxDB i el vostre Grafana. | ||
+ | |||
+ | === '''FreeRTOS''' === | ||
+ | [https://github.com/jordibinefa/IoT-02/tree/master/codes/freeRTOS Alguns codis funcionant amb FreeRTOS per a la placa IoT-02 basada en ESP32] | ||
+ | |||
+ | [https://techtutorialsx.com/2017/05/06/esp32-arduino-creating-a-task/ Explicació d'un codi bàsic en FreeRTOS] | ||
+ | |||
+ | [https://www.freertos.org/Documentation/RTOS_book.html '''Manual de referència per al FreeRTOS'''] | ||
+ | |||
+ | == 20210305 (2h síncrona) == | ||
+ | Continuem amb el temes d'ahir. | ||
+ | |||
+ | === HTTP a MQTT === | ||
+ | [https://binefa.cat/dam2021/20210304_iot/http_a_mqtt/http_mqtt.nodered.txt Flux de NodeRED per a convertir crides HTTP a MQTT] | ||
+ | |||
+ | ==== Exercici d'HTTP a MQTT ==== | ||
+ | Mitjançant ''curl'' o navegador web encén i/o apaga qualsevol led de la placa IoT-02 connectada a un ''broker'' MQTT. | ||
+ | |||
+ | == 20210304 (3h presencial) == | ||
[https://binefa.cat/dam2021/20210304_iot/ Alguns codis comentats avui] | [https://binefa.cat/dam2021/20210304_iot/ Alguns codis comentats avui] | ||
Línia 45: | Línia 241: | ||
=== InfluxDB v2.0 === | === InfluxDB v2.0 === | ||
− | * Instal·lació de la base de dades temporal a la [http://binefa.com/index.php?title=DAM_2020-2021#Actualitzaci.C3.B3_de_la_m.C3.A0quina_virtual màquina virtual Linux] | + | * Instal·lació de la base de dades temporal a la [http://www.binefa.com/index.php?title=DAM_2020-2021#Actualitzaci.C3.B3_de_la_m.C3.A0quina_virtual màquina virtual Linux] |
[https://docs.influxdata.com/influxdb/v2.0/get-started/ Instal·lació d'InfluxDB 2.0] i [https://portal.influxdata.com/downloads/ lloc de descàrregues] | [https://docs.influxdata.com/influxdb/v2.0/get-started/ Instal·lació d'InfluxDB 2.0] i [https://portal.influxdata.com/downloads/ lloc de descàrregues] | ||
curl -s https://repos.influxdata.com/influxdb2.key | gpg --import - | curl -s https://repos.influxdata.com/influxdb2.key | gpg --import - | ||
+ | wget -qO- https://repos.influxdata.com/influxdb2.key | sudo apt-key add - | ||
wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.0.4-linux-amd64.tar.gz.asc | wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.0.4-linux-amd64.tar.gz.asc | ||
wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.0.4-amd64.deb | wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.0.4-amd64.deb | ||
Línia 66: | Línia 263: | ||
* Escriptura i lectura de dades des del NodeRed a Influx DB v2.0 | * Escriptura i lectura de dades des del NodeRed a Influx DB v2.0 | ||
− | [https://binefa.cat/training/nodered/influxDB_2.0/escripturaInfluxDB.nodered.txt Escriptura de dades múltiple des del NodeRed] | + | [https://www.binefa.cat/training/nodered/influxDB_2.0/escripturaInfluxDB.nodered.txt Escriptura de dades múltiple des del NodeRed] |
− | [https://binefa.cat/training/nodered/influxDB_2.0/lecturaInfluxDB.nodered.txt Lectura de dades múltiple des del NodeRed] | + | [https://www.binefa.cat/training/nodered/influxDB_2.0/lecturaInfluxDB.nodered.txt Lectura de dades múltiple des del NodeRed] |
=== Grafana === | === Grafana === | ||
Línia 104: | Línia 301: | ||
=== Exercici de prova === | === Exercici de prova === | ||
− | [https://binefa.cat/training/nodered/influxDB_2.0/escripturaUnaDadaAleatoriaInfluxDB.nodered.txt Flux NodeRED d'escriptura d'una dada aleatòria a InfluxDB] a l'organització '''Clot''' al ''bucket'' '''aleatori/v1''' | + | [https://www.binefa.cat/training/nodered/influxDB_2.0/escripturaUnaDadaAleatoriaInfluxDB.nodered.txt Flux NodeRED d'escriptura d'una dada aleatòria a InfluxDB] a l'organització '''Clot''' al ''bucket'' '''aleatori/v1''' |
Codi Flux per a la graficació a Grafana: | Codi Flux per a la graficació a Grafana: | ||
Línia 703: | Línia 900: | ||
Modifiqueu el codi de [https://binefa.cat/dam2021/20201116_qt_iot/simpleclient.zip MQTT's simpleclient] per a admetre usuari i contrasenya (podeu fer servir el ''broker'' '''formacio.things.cat''' amb usuari '''ecat''' i contrasenya '''clotClot'''). | Modifiqueu el codi de [https://binefa.cat/dam2021/20201116_qt_iot/simpleclient.zip MQTT's simpleclient] per a admetre usuari i contrasenya (podeu fer servir el ''broker'' '''formacio.things.cat''' amb usuari '''ecat''' i contrasenya '''clotClot'''). | ||
− | [https://binefa.cat/dam2021/20201116_qt_iot/simpleClient_usrPwd.png Captura | + | [https://www.binefa.cat/dam2021/20201116_qt_iot/simpleClient_usrPwd.png Captura de l'exercici a fer] |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
= Documentació = | = Documentació = |
Revisió de 17:45, 26 feb 2022
Contingut
- 1 Horari a partir del 18 de gener
- 2 Teleconferència del curs 2020-2021
- 3 Alguns vídeos d'ajuda
- 4 Algunes classes
- 4.1 20210609 (3h presencial) Avaluació extraordinària
- 4.2 20210528 (2h en línia) Presentació de projectes de 2n de DAM
- 4.3 20210527 (3h en línia) Presentació de projectes de 2n de DAM
- 4.4 20210520 (1h presencial)
- 4.5 20210517 (1h presencial)
- 4.6 20210514 (2h presencial)
- 4.7 20210513 (3h presencial)
- 4.8 20210510 (1h presencial)
- 4.9 20210507 (2h presencial)
- 4.10 20210506 (3h presencial)
- 4.11 20210503 (1h presencial)
- 4.12 20210430 (2h presencial)
- 4.13 20210429 (3h presencial)
- 4.14 20210426 Comença el projecte (1h presencial)
- 4.15 20210423 Darrer dia (2h síncrona)
- 4.16 20210422 Examen (3h presencial)
- 4.17 20210419 (1h presencial)
- 4.18 20210416 (2h presencial)
- 4.19 20210415 (3h presencial)
- 4.20 20210412 (1h presencial)
- 4.21 20210409 (2h síncrona)
- 4.22 20210408 (3h presencial)
- 4.23 20210326 (2h presencial)
- 4.24 20210325 (3h presencial)
- 4.25 20210322 (1h presencial)
- 4.26 20210319 (2h síncrona)
- 4.27 20210318 (3h presencial)
- 4.28 20210315 (1h presencial)
- 4.29 20210312 (2h presencial)
- 4.30 20210311 (3h presencial)
- 4.31 20210308 (1h presencial)
- 4.32 20210305 (2h síncrona)
- 4.33 20210304 (3h presencial)
- 4.34 20210301 (1h presencial)
- 4.35 20210226 (IoT: InfluxDB i Grafana, 2h presencial)
- 4.36 20210225 (Examen final del M07UF1. Part de QML amb IoT, 3h presencial)
- 4.37 20210222 (QML / IoT, 2h síncrona)
- 4.38 20210219 (QML / IoT, 2h síncrona)
- 4.39 20210218 (QML / IoT, 3h presencial)
- 4.40 20210212 (QML, 2h presencial)
- 4.41 20210211 (QML, 3h síncrona)
- 4.42 20210208 (QML, 1h presencial)
- 4.43 20210205 (QML, 2h síncrona)
- 4.44 20210204 (QML, 3h presencial)
- 4.45 20210201 (QML, 1h presencial)
- 4.46 20210129 (QML, 2h presencial)
- 4.47 20210128 (QML, 3h síncrona)
- 4.48 20210125 (QML, 1h presencial)
- 4.49 20210122 (QML, 2h síncrona)
- 4.50 20210121 (QML, 3h presencial)
- 4.51 20210118 (QML, 1h presencial)
- 4.52 20210115 (QML, 1h síncrona)
- 4.53 20210112 (QML, 3h presencial)
- 4.54 20210111 (QML, 1h síncrona)
- 4.55 20201221 (IoT, 1h síncrona)
- 4.56 20201218 (IoT, 1h síncrona)
- 4.57 20201215 (IoT, 3h presencial)
- 4.58 20201211 (Qt i IoT, 1h síncrona)
- 4.59 20201204 (Qt i IoT, 1h síncrona)
- 4.60 20201201 Examen 1r trimestre
- 4.61 20201130 (dubtes i Qt, 1h síncrona)
- 4.62 20201127 (Qt i IoT, 1h síncrona)
- 4.63 20201124 (IoT i Qt) (3h, presencial)
- 4.64 20201123 (Qt i IoT, 1h síncrona)
- 4.65 20201120 (Qt i IoT, 1h síncrona)
- 4.66 20201117 (Qt i IoT, 3h presencial)
- 4.67 20201116 (Qt, 1h síncrona)
- 5 Documentació
- 6 Planificació
Horari a partir del 18 de gener[modifica]
Teleconferència del curs 2020-2021[modifica]
Carpetes compartides 2n de DAM. Curs 2020-2021
Alguns vídeos d'ajuda[modifica]
QML[modifica]
Introduction to Qt / QML - all videos so far by KDAB (Codis QML de la sèrie de vídeos)
Vídeos QML de connexió entre el rerefons en C++ i el frontal en QML.
Pseudoservidor UDP[modifica]
Pseudoservidor UDP emprant Qt5 (1/2)
Pseudoservidor UDP emprant Qt5 (2/2)
Algunes classes[modifica]
20210609 (3h presencial) Avaluació extraordinària[modifica]
Enunciats de l'avaluació extraordinària
20210528 (2h en línia) Presentació de projectes de 2n de DAM[modifica]
Sala Meet de la presentació de projectes
20210527 (3h en línia) Presentació de projectes de 2n de DAM[modifica]
Sala Meet de la presentació de projectes
20210520 (1h presencial)[modifica]
Seguim amb el Projecte de final de CFGS DAM (2020-2021)
20210517 (1h presencial)[modifica]
Seguim amb el Projecte de final de CFGS DAM (2020-2021)
20210514 (2h presencial)[modifica]
Seguim amb el Projecte de final de CFGS DAM (2020-2021)
20210513 (3h presencial)[modifica]
Seguim amb el Projecte de final de CFGS DAM (2020-2021)
20210510 (1h presencial)[modifica]
Seguim amb el Projecte de final de CFGS DAM (2020-2021)
20210507 (2h presencial)[modifica]
Seguim amb el Projecte de final de CFGS DAM (2020-2021)
20210506 (3h presencial)[modifica]
Seguim amb el Projecte de final de CFGS DAM (2020-2021)
20210503 (1h presencial)[modifica]
Seguim amb el Projecte de final de CFGS DAM (2020-2021)
20210430 (2h presencial)[modifica]
Seguim amb el Projecte de final de CFGS DAM (2020-2021)
20210429 (3h presencial)[modifica]
Seguim amb el Projecte de final de CFGS DAM (2020-2021)
20210426 Comença el projecte (1h presencial)[modifica]
Comentem les notes provisionals i comença el temps de projecte.
20210423 Darrer dia (2h síncrona)[modifica]
Feu alguns exercicis que no vau fer ahir de l'examen d'ordinària del curs 2020-2021 amb l'objectiu de pujar nota. He afegit l'arxiu de NodeRED de control de l'ascensor i he corregit alguna errata que vau detectar ahir.
20210422 Examen (3h presencial)[modifica]
Examen d'ordinària del curs 2020-2021
Snap! per HTTP per a fer servir sòcols web no segurs.
He afegit flux de NodeRED per a l'ascensor. Recordeu-vos de canviar la MAC a tot arreu i d'afegir-hi usuari i contrasenya al broker.
Errata:
M09UF3.6) Feu un control del led blanc mitjançant el NodeRED emprant el protocol UDP
20210419 (1h presencial)[modifica]
Per a canviar l'Spread Factor (línia 497 d'aquest codi d'exemple):
// Set data rate and transmit power for uplink (note: txpow seems to be ignored by the library) LMIC_setDrTxpow(DR_SF7, 14);
20210416 (2h presencial)[modifica]
Anem acabant els Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021) i comentem algunes propostes de projectes relacionats amb M03UF1, M15UF1, M09UF2 i M09UF3
Instal·lació de l'OpenMPI a la màquina (per a molts, virtual) de Linux.
20210415 (3h presencial)[modifica]
Exemple de funció amb 4 sortides (Cal que canvieu a la funció la única sortida per defecte a quatre)
var amunt = {payload: "amunt"}; var mig = {payload: "mig"}; var avall = {payload: "avall"}; return [amunt,mig,avall,msg];
Instal·lació de l'OpenMPI a la màquina (per a molts, virtual) de Linux.
Anem acabant els Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021) i comentem algunes propostes de projectes relacionats amb M03UF1, M15UF1, M09UF2 i M09UF3
20210412 (1h presencial)[modifica]
Anem acabant els Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021) i comentem algunes propostes de projectes relacionats amb M03UF1, M15UF1, M09UF2 i M09UF3
20210409 (2h síncrona)[modifica]
Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)
20210408 (3h presencial)[modifica]
Programació remota (OTA) (JESUITESFP / IOTcl1220_)
Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)
20210326 (2h presencial)[modifica]
Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)
Flux de NodeRED que agafa una cadena de text de 4 bytes i ho converteix a un número real (float)
20210325 (3h presencial)[modifica]
Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)
Alguns codis comentats avui per a passar vectors de bytes (unsigned char) a nombres enters o reals fent servir les funcions de Javascript per a NodeRED.
20210322 (1h presencial)[modifica]
Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)
Comentem l'exercici 3.7
20210319 (2h síncrona)[modifica]
Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)
FreeRTOS[modifica]
Alguns codis funcionant amb FreeRTOS per a la placa IoT-02 basada en ESP32
Explicació d'un codi bàsic en FreeRTOS
Manual de referència per al FreeRTOS
20210318 (3h presencial)[modifica]
Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)
sudo cat /etc/mosquitto/mosquitto.conf:
pid_file /var/run/mosquitto.pid persistence true persistence_location /var/lib/mosquitto/ log_dest file /var/log/mosquitto/mosquitto.log include_dir /etc/mosquitto/conf.d allow_anonymous false password_file /etc/mosquitto/certs/contrasenyes.txt listener 1883 listener 9001 protocol websockets
cat /etc/mosquitto/certs/contrasenyes.txt (usuaris ecat i ad):
ecat:$6$SdtdpCPcQ4wonN7Y$Dgix123455BRyzvUQxMKX2lmr/4r/K3b9/su9KzMdMZhLxS3cm6a+nCrRahz+r9DFOh0ecsoZVwlG+G9tnA== ad:$6$Nu8O3BxNBORplkSW$LZAqGNiPnX1HnC0ZbI789787867677565eJZAQnWWrWDaFjJz5OIZ8ljJRBbL6GFCKlgoaUFllFGvBhMtnfJQ==
20210315 (1h presencial)[modifica]
Conceptes de LoRa 2020-2021
20210312 (2h presencial)[modifica]
Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021)
Codi de desxifratge d'un missatge ascendent de The Things Network
Codi basat en la pàgina 42 d'aquest pdf:
var b = new Buffer(msg.payload.payload_raw,'base64') msg.payload = b.toString() return msg;
20210311 (3h presencial)[modifica]
Avui assistiré les dues primeres hores. La tercera he de ser a una sessió d'avaluació, aneu fent els Exercicis d'Internet de les Coses (M15UF1, M09UF2 i M09UF3 del curs 2020-2021).
La pràctica de LoRaWAN requereix que hi sigueu a un lloc amb cobertura. Per tant, feu tot el possible per a ser-hi presencialment.
LoRaWAN[modifica]
Doneu-vos d'alta com a usuaris de The Things Network
20210308 (1h presencial)[modifica]
Repassem el funcionament de la vostra placa IoT-02 al vostre broker MQTT, el vostre NodeRED, el vostre InfluxDB i el vostre Grafana.
FreeRTOS[modifica]
Alguns codis funcionant amb FreeRTOS per a la placa IoT-02 basada en ESP32
Explicació d'un codi bàsic en FreeRTOS
Manual de referència per al FreeRTOS
20210305 (2h síncrona)[modifica]
Continuem amb el temes d'ahir.
HTTP a MQTT[modifica]
Flux de NodeRED per a convertir crides HTTP a MQTT
Exercici d'HTTP a MQTT[modifica]
Mitjançant curl o navegador web encén i/o apaga qualsevol led de la placa IoT-02 connectada a un broker MQTT.
20210304 (3h presencial)[modifica]
Bases de dades temporals i visualització[modifica]
Seguim amb la instal·lació d'InfluxDB i Grafana.
Exercici de bases de dades temporals i visualització[modifica]
- Visualitzeu a Grafana les dades de temperatura, humitat relativa, pressió atmosfèrica i de nivell de llum.
HTTP a MQTT[modifica]
Flux de NodeRED per a convertir crides HTTP a MQTT
FreeRTOS[modifica]
Alguns codis funcionant amb FreeRTOS per a la placa IoT-02 basada en ESP32
20210301 (1h presencial)[modifica]
Seguim amb la instal·lació d'InfluxDB i Grafana.
Notes provisionals d'avaluació ordinària del M07UF1
20210226 (IoT: InfluxDB i Grafana, 2h presencial)[modifica]
Part pròpia del M15UF1 (Internet de les Coses) i M09UF2 (Processos i fils).
InfluxDB v2.0[modifica]
- Instal·lació de la base de dades temporal a la màquina virtual Linux
Instal·lació d'InfluxDB 2.0 i lloc de descàrregues
curl -s https://repos.influxdata.com/influxdb2.key | gpg --import - wget -qO- https://repos.influxdata.com/influxdb2.key | sudo apt-key add - wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.0.4-linux-amd64.tar.gz.asc wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.0.4-amd64.deb sudo dpkg -i influxdb2-2.0.4-amd64.deb
Un cop instal·lat ha de sortir:
... Setting up influxdb2 (2.0.4) ... Created symlink /etc/systemd/system/influxd.service → /lib/systemd/system/influxdb.service. Created symlink /etc/systemd/system/multi-user.target.wants/influxdb.service → /lib/systemd/system/influxdb.service.
- Configuració a la nova màquina virtual:
InfluxDB : ecat / clotfje1234 Organization Name: Clot Bucket Name: api/v2/query
- Escriptura i lectura de dades des del NodeRed a Influx DB v2.0
Escriptura de dades múltiple des del NodeRed
Lectura de dades múltiple des del NodeRed
Grafana[modifica]
- Instal·lació de l'aplicació web de visualització de dades a la màquina virtual Linux
- Posada en marxa
Recàrrega dels serveis dimoni:
sudo systemctl daemon-reload
Feu que arrenqui el servei quan poseu en marxa la màquina virtual:
sudo systemctl enable grafana-server
Poseu el servei en marxa:
sudo systemctl start grafana-server
Verifiqueu l'estat del servei:
systemctl status grafana-server
- Primer accés
admin / admin
Us demanarà un canvi de la contrasenya d'administració. A la nova màquina virtual és:
admin / clotfje1234
- Configuració de Grafana per rebre dades d'InfluxDB mitjançant Flux
- Ús de les dades d'InfluxDB a Grafana
from(bucket: "api/v2/query") |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
Exercici de prova[modifica]
Flux NodeRED d'escriptura d'una dada aleatòria a InfluxDB a l'organització Clot al bucket aleatori/v1
Codi Flux per a la graficació a Grafana:
from(bucket: "aleatori/v1") |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
Serveis (Processos)[modifica]
- Per saber si el servei està en marxa:
systemctl status influxd
- Per a engegar un servei
sudo systemctl start influxd
- Per a aturar un servei
sudo systemctl stop influxd
- Per a fer que el servei s'engegui a l'iniciar el sistema:
sudo systemctl enable influxd
- Per a fer que el servei deixi d'engeggar-se a l'iniciar el sistema:
sudo systemctl disable influxd
- Llista els serveis que arrenquen (enable) a l'iniciar el sistema:
systemctl list-unit-files --type=service | grep influx
- Per a veure els ports TCP / UDP dels serveis:
sudo netstat -aputn
Sense sudo no es veu el nom del procés.
Més teoria[modifica]
Grafana & Flux. New Flux support in Grafana by Jacob Lisi @JacobLisi
20210225 (Examen final del M07UF1. Part de QML amb IoT, 3h presencial)[modifica]
Accés a l'examen en format pdf, odt i el material comprimit necessari per a desenvolupar-lo
20210222 (QML / IoT, 2h síncrona)[modifica]
Darrer dia abans de l'examen de final de la UF1 del M07.
Resolució de dubtes.
20210219 (QML / IoT, 2h síncrona)[modifica]
Alguns codis comentats avui fent servir comportaments elàstics (easing).
Comentem la importància del centratge de les imatges. Al codi comentat avui es fan servir dissenys vectorials lliures i oberts aconseguits a https://freesvg.org
Seguim amb els Exercicis de QML
20210218 (QML / IoT, 3h presencial)[modifica]
Alguns codis comentats avui fent servir comportaments elàstics (easing).
Seguim amb els Exercicis de QML
20210212 (QML, 2h presencial)[modifica]
20210211 (QML, 3h síncrona)[modifica]
Recordeu-vos de canviar l'SSID i contrasenya de la connexió sense fils, per adaptar-la a casa vostra.
Recordeu-vos de personalitzar #define MAC_PLACA "xxxxxxxxxxx"
20210208 (QML, 1h presencial)[modifica]
Microprogramari IoT-02_mqtts_10_dam.zip per a la placa IoT-02 per a provar els exercicis 7 i 8 dels Exercicis de QML.
Guia per a desenvolupar l'ex07 dels exercicis de QML fent servir senyals. Us pot ajudar per a la vostra implementació fent servir propietats.
20210205 (QML, 2h síncrona)[modifica]
Actualització de la màquina virtual[modifica]
ecat@iot-ecat:~$ sudo bash root@iot-ecat:/home/ecat# curl -sL https://deb.nodesource.com/setup_14.x | bash - root@iot-ecat:/home/ecat# apt install -y nodejs root@iot-ecat:/home/ecat# exit ecat@iot-ecat:~$ node --version v14.15.4 ecat@iot-ecat:~$ npm -- version 6.14.10
- 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://binefa.cat/dam2021/20200928/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
20210204 (QML, 3h presencial)[modifica]
Al disc dur que us passaré hi ha dues màquines virtuals (andro_8.1-r4-VM-32bit.7z de 543,8 MB i IoT - eCat - Debian 11.x 64-bit _v20210202_00.zip de 19,0 GB) al directori maquinesVirtuals/Android_i_Qt
Màquina virtual amb emulador per a Android[modifica]
El darrer dia va haver dos talls de llum. Van assistir a classe 6 alumnes. Els hi vaig passar una màquina virtual amb un emulador d'Android (Android-x86 8.1-R4 Oreo). Els que no vau assistir el darrer dia, porteu instal·lada la màquina virtual de l'emulador d'Android.
És important que aquesta màquina virtual estigui configurada amb:
- Connexió pont (bridge i no NAT)
- Memòria mínima de 2GB
Màquina virtual amb Debian 11, Android Studio i Qt6 per a escriptori i Android[modifica]
Avui us passaré, comprimida a 19GB, una màquina virtual basada en Debian 11 (a hores d'ara, Debian 11 és en fase de testing) amb els següents programes ja instal·lats i preparats per a funcionar:
- Android Studio
- QtCreator amb la darrera Qt5 LTS i les Qt6
- Biblioteca qtMqtt preparada per a funcionar a l'escriptori i a Android amb les Qt6
Configuració de la màquina virtual:
- L'usuari per defecte és ecat (eCat)
- La contrasenya de l'usuari ecat és clotfje (ecat és membre del grup d'usuaris sudo i dialout). Almenys a l'hora de passar-vos la màquina virtual. És aconsellable que canvieu la vostra contrasenya d'accés.
- És aconsellable tenir la connexió de xarxa en connexió pont (bridge). Però no cal per a connectar-ho amb l'emulador d'Android amb màquina virtual. Sí que caldria per a tenir accés extern al broker MQTT i al NodeRED (no instal·lats en aquesta primera versió).
- Memòria mínima de 4GB
Connectant les dues màquines virtuals[modifica]
- Trobeu quina IP té la màquina virtual amb l'emulador d'Android (a l'explicació faré servir com a IP de l'emulador 172.20.xy.xyz).
- Obriu un terminal a la màquina virtual amb Debian 11:
ecat@iot-ecat:~$ cd Android/Sdk/platform-tools/ ecat@iot-ecat:~/Android/Sdk/platform-tools$ ./adb connect 172.20.xy.xyz:5555 * daemon not running; starting now at tcp:5037 * daemon started successfully connected to 172.20.25.152:5555 ecat@iot-ecat:~/Android/Sdk/platform-tools$ ./adb shell x86:/ $
- Obriu el Qt Creator (premeu la supertecla -aquella amb el símbol d'una finestra propietària- i escriviu-hi Qt). Feu un exemple simple de QML (per exemple el del swipe). Seleccioneu les Qt6 per a escriptori i Android x86 (amb l'opció Release i sense Debug ni Profile). Aneu a Tools / Options / Devices i verifiqueu que no hi dóna cap error de configuració (és possible que al principi surtin marques vermelles, però al cap de pocs segons se'n van). Assegureu-vos que compilareu per Android i feu Play al projecte de les Qt. Seleccioneu el dispositiu compatible VMware Virtual Platform. I premeu al botó OK.
- Al cap de pocs segons hi apareix el programa bàsic swipe a l'emulador sobre màquina virtual. El podeu aturar prement el botó quadrat vermell d'Application Output.
MQTT i MQTTS[modifica]
20210201 (QML, 1h presencial)[modifica]
Emulador d'Android a una màquina virtual
Aneu amb cura, malgrat és obsolet quelcom es pot fer servir en part: Using VMWare to replace the slow Android Emulator
- Poseu en marxa la màquina virtual (connexió pont -bridge i no NAT-) i cerqueu la IP del dispositiu Android virtualitzat. Connecteu-vos-hi:
jordi@ecat-XPS13:~$ cd Android/Sdk/platform-tools/ jordi@ecat-XPS13:~/Android/Sdk/platform-tools$ ./adb connect 172.20.xy.xyz:5555 * daemon not running; starting now at tcp:5037 * daemon started successfully connected to 172.20.xy.xyz:5555 jordi@ecat-XPS13:~/Android/Sdk/platform-tools$ ./adb shell x86:/ $
- Aneu al QtCreator, compileu i executeu una aplicació per a Android. Us sortirà a la llista de dispositius compatibles la màquina virtual emulant Android.
20210129 (QML, 2h presencial)[modifica]
Comencem per l'exercici ex06_07 dels Exercicis de QML (Vídeo 7/10 a Vídeos QML)
20210128 (QML, 3h síncrona)[modifica]
Avui, abans de començar la classe, s'han d'haver tramès per correu electrònic els exercicis ex01, ex02, ex03, ex04 i ex05 dels Exercicis de QML, seguint les indicacions a la capçalera de la pàgina.
Acabem l'exercici 6 de la col·lecció dels Exercicis de QML
Millores de codi[modifica]
Aquest codi:
Connections { target: appCore // Specify the target to connect onSendToQml: { p1.etiqueta.text = count // Set the counter to the text label // count <-- Mateix nom que al senyal void sendToQml(int count); } }
Provoca aquest avís (warning):
qrc:/main.qml:13:5: QML Connections: Implicitly defined onFoo properties in Connections are deprecated. Use this syntax instead: function onFoo(<arguments>) { ... }
I aquesta és la solució que s'aconsella actualment:
Connections { target: appCore // Specify the target to connect function onSendToQml(count){ p1.etiqueta.text = count // Set the counter to the text label // count <-- Mateix nom que al senyal void sendToQml(int count); } }
ProgressBar a QML per a Qt6[modifica]
La propietat de valor màxim ha desaparegut a les Qt6
ProgressBar { id: progressBar y: 189 value: 50 //maximumValue: 100 anchors.right: parent.right anchors.rightMargin: 20 anchors.left: parent.left anchors.leftMargin: 20 }
A Qt 6 el valor màxim està a 1.0, per tant:
ProgressBar { id: progressBar y: 189 value: 0.5 anchors.right: parent.right anchors.rightMargin: 20 anchors.left: parent.left anchors.leftMargin: 20 }
i al main.qml de 01_qmlLliscant_10:
function actualitzaBarraDeProgres(n){ l01.progressBar.value = n/100; // Originàriament hi havia n l01.text1.text = n; // canvieu element1 per text1 a l'editor QML }
Codi actualitzat per a Qt6: 01_qmlLliscant_10_qt6
A l'arxiu main.cpp també he afegit un #if / #endif per a verificar si el codi és previ a les Qt6.0.0:
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); #endif
20210125 (QML, 1h presencial)[modifica]
Connexió entre el frontal QML i el rerefons en C++[modifica]
Exemple de connexió entre el frontal QML i el rerefons en C++ (El codi de connexió és basat en QML - Tutorial 036. Working with Signals and Slots in QML).
Aquí teniu alguns Vídeos QML que guien pas a pas la connexió entre el frontal i el rerefons.
Comenceu l'exercici 6 de la col·lecció Exercicis de QML
20210122 (QML, 2h síncrona)[modifica]
- Ajuda per a fer els ex04 i ex05 dels Exercicis de QML:
MqttClient { id: client hostname: hostnameField.text port: portField.text username: userField.text password: pwdField.text }
Modifiqueu el broker per un que faci servir usuari i contrasenya:
TextField { id: hostnameField Layout.fillWidth: true text: "rubi.xoic.coop" placeholderText: "<Enter host running MQTT broker>" enabled: client.state === MqttClient.Disconnected }
Afegiu l'etiqueta d'usuari:
Label { text: "Usuari:" enabled: client.state === MqttClient.Disconnected }
Al camp de text d'usuari, poseu el nom d'usuari per defecte:
TextField { id: userField Layout.fillWidth: true text: "rubi" placeholderText: "<Usuari>" enabled: client.state === MqttClient.Disconnected }
Afegiu l'etiqueta de contrasenya:
Label { text: "Contrasenya:" enabled: client.state === MqttClient.Disconnected }
Al camp de text de la contrasenya, poseu la contrasenya per defecte:
TextField { id: pwdField echoMode: TextInput.Password Layout.fillWidth: true text: "iotRubi" placeholderText: "<Contrasenya>" passwordCharacter: "x" enabled: client.state === MqttClient.Disconnected }
Proveu les dues aplicacions a l'escriptori i al dispositiu Android.
Proveu un altre broker que també faci servir usuari i contrasenya.
Proveu si funciona a un broker que no faci servir usuari i contrasenya
20210121 (QML, 3h presencial)[modifica]
Un tutorial curt de QML[modifica]
Un tutorial amb tres exemples de codi QML (Els tres codis del tutorial curt).
Seguint amb el tema dels estats, baixeu-vos i executeu l'exemple qmlState01 d'estats en QML i l'exemple qmlState02 d'estats en QML (Basats en la documentació sobre estats de les Qt).
Bucles de vinculació[modifica]
Què són els bucles de vinculació (binding loops)?
Connexió entre el frontal QML i el rerefons en C++[modifica]
Exemple de connexió entre el frontal QML i el rerefons en C++ (El codi de connexió és basat en QML - Tutorial 036. Working with Signals and Slots in QML).
Aquí teniu alguns Vídeos QML que guien pas a pas la connexió entre el frontal i el rerefons.
Comenceu l'exercici 6 de la col·lecció Exercicis de QML
Instal·lació de QtMqtt per Android[modifica]
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.
En cas de no poder actualitzar l'editor de QML[modifica]
Si us surt el missatge Qt Quick emulator layer crash i no s'actualitza el visor QML, però podeu editar l'arxiu en mode text, haureu d'anar al menú:
Tools / Options... / Qt Quick / Qt Quick Designer
i canvieu la selecció Use fallback QML emulation layer per Use QML emulation layer that is built with the selected Qt, deixant buit el Top level build path:. Quan torneu a editar des de l'editor QML es farà una recompilació del visor (sigueu pacients i deixeu acabar tot el procés).
20210118 (QML, 1h presencial)[modifica]
Seguim amb QML[modifica]
El darrer dia es va recomanar veure els tres primers capítols dels vídeos de KDAB sobre QML.
Codis QML dels vídeos de KDAB
qml_02_kdab[modifica]
Ancoratge[modifica]
anchors-centerin-parent-keyword.qml:
Bucles de vinculació[modifica]
Bucles de vinculació (binding loop)
Exemple de bucle de vinculació:
import QtQuick 2.0 Rectangle { color: "black" width: child.width height: child.width Image { id: child source : "../images/vertical-gradient.png" anchors.fill: parent anchors.margins: 5 } }
Una solució per a evitar bucles de vinculació:
import QtQuick 2.0 Rectangle { color: "black" implicitWidth: child.implicitWidth implicitHeight: child.implicitWidth Image { id: child source : "../images/vertical-gradient.png" anchors.fill: parent anchors.margins: 5 } }
20210115 (QML, 1h síncrona)[modifica]
Connectem Qt/QML a Android[modifica]
- Obriu l'Android Studio i virtualitzeu un telèfon mòbil d'arquitectura x86 (molt més ràpid que virtualitzar un ARM):
jordi@ecat-XPS13:/opt/android-studio/bin$ ./studio.sh
- Feu un nou projecte Application (Qt Quick) / Qt Quick Application - Swipe.
- Anomeneu i deseu el projecte. Per exemple amb el nom prMobil00
- Seleccioneu els kits d'Android i d'escriptori, seleccionant l'opció release. Per exemple: Android Qt 6.0.0 Clang x86 i Desktop Qt 6.0.0 GCC 64bit
- Proveu que us funciona amb la versió d'escriptori
- Proveu que us funciona amb la versió d'Android virtualitzat. Quan ho executeu heu de seleccionar a quin dispositiu virtual ho voleu fer córrer.
Seguim amb QML[modifica]
Es recomana veure els tres primers capítols dels vídeos de KDAB sobre QML.
Codis QML dels vídeos de KDAB
20210112 (QML, 3h presencial)[modifica]
Accés al llibre de Qt/QML en línia
Execució de codis QML des del terminal:
/home/jordi/Qt/5.15.2/gcc_64/bin/qmlscene showcase.qml
Exercicis QML:
- ex1) Feu un programa en QML que al principi hi surti un quadrat vermell centrat. Al prémer la tecla B hi sortirà de color blau, al prémer la tecla G hi sortirà de color verd i al prémer la tecla R torna a ser vermell.
- ex2) Feu un programa en QML a on hi aparegui centrat, horitzontalment i vertical, ben gros i en negreta el nom Escola del Clot. Al prémer la tecla + la lletra es farà més grossa. I al prémer la tecla - la lletra es farà més petita.
- ex3) Feu un programa que hi surti el text, centrat a la finestra, "Comptador: 0" de color vermell. Al prémer el botó + incrementarà el valor del comptador, i al prémer el botó '-' es decrementarà. Al prémer la tecla N el text serà de color negre i al prémer V tornarà a ser de color vermell.
20210111 (QML, 1h síncrona)[modifica]
A partir dels exemples en QML d'en Jan Bodnar fem servir el Qt Creator per a executar-los.
20201221 (IoT, 1h síncrona)[modifica]
S'acaba el termini de lliurament de pràctiques desenvolupades fins les festes de Nadal.
Les dues darreres:
- Control de la placa IoT-02 mitjançant Telegram
- Publicació de dades del sensor BM280 de la placa IoT-02 a Mastodon
20201218 (IoT, 1h síncrona)[modifica]
Codis d'avui i material d'ajuda per a fer l'exercici
- 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.
Getting credentials for the Mastodon API with Mastodon.py, step by step
- Exercici:
Publiqueu la temperatura, humitat relativa i pressió atmosfèrica llegides per la vostra placa IoT-02 i les publiqueu a Mastodon mitjançant NodeRED.
Feu un informe de com ho heu programat i captures de llur funcionament.
20201215 (IoT, 3h presencial)[modifica]
Autenticació d'accés a NodeRED[modifica]
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[modifica]
- 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
Flux de prova per al bot de Telegram
Deures pel proper dia[modifica]
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.
20201211 (Qt i IoT, 1h síncrona)[modifica]
Comentarem dubtes de la darrera pràctica.
Es demana de dur instal·lat Telegram al telèfon mòbil per a la propera classe del 14 de desembre de 2020.
20201204 (Qt i IoT, 1h síncrona)[modifica]
Notes provisionals del 1r trimestre
Desenvolupem com a pràctica puntuable la resolució dels exercicis 5, 6 i 7 (Trameteu per separat P5, P6 i P7)
20201201 Examen 1r trimestre[modifica]
Enunciat de l'examen del 1r trimestre
Notes provisionals de les pràctiques a 1 de desembre de 2020
20201130 (dubtes i Qt, 1h síncrona)[modifica]
Codis d'avui (Senyals, osques, agrupacions i connexions)
20201127 (Qt i IoT, 1h síncrona)[modifica]
Revisem l'exercici proposat el darrer dia.
20201124 (IoT i Qt) (3h, presencial)[modifica]
Control de la placa IoT-02 mitjançant MQTT emprant Qt i missatges JSON
Codis d'interacció amb la placa IoT-02 emprant C++ per a Qt, fent servir JSON i MQTT.
Codi de flux de NodeRED per a controlar els leds de la placa IoT-02 mitjançant un JSON
Flux de NodeRED emprant MQTT i JSON bidireccional
Exercici amb la placa IoT-02 emprant C++ per a Qt, fent servir JSON i MQTT[modifica]
Desenvolupeu el projecte 15_mqtt_IoT02_03, basant-vos en el darrer codi de control de la placa IoT-02 en C++ per a Qt, que visualitzi en una barra de progrés el nivell de llum rebut per la LDR.
20201123 (Qt i IoT, 1h síncrona)[modifica]
Control de la placa IoT-02 mitjançant MQTT emprant Qt i missatges JSON
Codis d'interacció amb la placa IoT-02 emprant C++ per a Qt, fent servir JSON i MQTT.
20201120 (Qt i IoT, 1h síncrona)[modifica]
Al dia d'avui us he posat el codi per a poder visualitzar el color dels leds.
Fent servir MQTT, feu una aplicació emprant Qt que ensenyi l'estat dels botons i dels leds de la placa IoT-02
20201117 (Qt i IoT, 3h presencial)[modifica]
Biblioteca Arduino_JSON per l'IDE d'Arduino
Dades encapsulades en JSON al NodeRED i a la placa IoT-02.
Exercici[modifica]
Desenvolupeu una aplicació GUI feta amb Qt que mitjançant el protocol MQTT:
- Controli els quatre leds mitjançant botons seleccionadors (check box)
- Indiqui l'estat dels tres botons mitjançant etiqueta (premut / no premut)
- Indiqui l'estat dels tres botons mitjançant etiqueta gràfica (color viu / color fosc)
- Una barra de progrés indiqui el nivell de llum
- Trameti missatges a la pantalla OLED (tres botons seleccionadors de mida del text)
20201116 (Qt, 1h síncrona)[modifica]
Exercici[modifica]
Modifiqueu el codi de MQTT's simpleclient per a admetre usuari i contrasenya (podeu fer servir el broker formacio.things.cat amb usuari ecat i contrasenya clotClot).
Documentació[modifica]
Qt/QML[modifica]
Qt5 de Jan Bodnar
Qt5 Cadaques! A Book about Qt5
Qt Quick tutorial de Jan Bodnar
PyQt5 de Jan Bodnar
Qt for WebAssembly[modifica]
json[modifica]
How To Manipulate JSON With C++ and Qt
QProcess[modifica]
Qt5 tutorial FFmpeg converter using QProcess - 2020
IoT[modifica]
TCP/UDP Capa de transport d'Ethernet
Afegint la targeta ESP8266 a l'IDE d'Arduino (NodeMCU1.0)
Micropython and the Internet of Things
SCADA fent servir Python QML i Arduino
Planificació[modifica]
Distribució de M07UF1, M09UF2, M09UF3, M15UF1 i M13 al curs 2020-2021 de 2n de DAM