Diferència entre revisions de la pàgina «DAM 2021-2022»
m (→Mastodon) |
|||
Línia 22: | Línia 22: | ||
[https://gist.github.com/aparrish/661fca5ce7b4882a8c6823db12d42d26 Getting credentials for the Mastodon API with Mastodon.py, step by step] | [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]] | ||
== 20220307 == | == 20220307 == |
Revisió del 14:19, 11 març 2022
Quan tingueu les credencials d'accés a la NET heu de compartir-me una carpeta amb aquest nom: 2122-DAM-1rCognom2nCognomNom (Per exemple, si el teu nom és Xavier López Pujol --> 2122-DAM-LopezPujolXavier). A aquest enllaç podreu veure si ja hi sou a la llista:
Carpetes compartides de 2n de DAM. Curs 2021-2022
Contingut
- 1 Algunes classes
- 1.1 20220311
- 1.2 20220307
- 1.3 20220304 Examen ordinària
- 1.4 20220225
- 1.5 20220221
- 1.6 20220218
- 1.7 20220214
- 1.8 20220211
- 1.9 20220207
- 1.10 20220204
- 1.11 20220131
- 1.12 20220128
- 1.13 20220124
- 1.14 20220121 (Baixa professor)
- 1.15 20220117
- 1.16 20220114 (Baixa professor)
- 1.17 20220110 (Baixa professor)
- 1.18 20211217
- 1.19 20211213
- 1.20 20211210
- 1.21 20211203
- 1.22 20211129
- 1.23 20211126
- 1.24 20211122
- 1.25 20211119
- 1.26 20211115
- 1.27 20211112
- 1.28 20211108
- 1.29 20211105
- 1.30 20211029
- 1.31 20211025
- 1.32 20211021
- 1.33 20211018
- 1.34 20211015
- 1.35 20211011
- 1.36 20211008
- 1.37 20211004
- 1.38 20211001
- 1.39 20210927
- 2 Repositori de codis fet a classe durant el curs
- 3 Documentació
Algunes classes
Teleconferència provisional per a compartir pantalla i confinats
20220311
Recull de codis comentats avui
Recull de pràctiques de 2n de DAM. Curs 2021-2022
Mastodon
- Mastodon, una alternativa lliure a Twitter
No totes les instàncies de Mastodon faciliten la instal·lació de bots. Per a fer els primers passos us recomano aquesta instància pensada per a hostatjar bots de Mastodon (tal i com es va demanar el dia anterior, heu d'haver demanat les credencials a la instància de Mastodon botsin.space amb molta antelació. Si ho sol·liciteu avui mateix no podreu seguir la classe).
Exemple de bot de Mastodon per a fer lectures de sensors cada hora.
Getting credentials for the Mastodon API with Mastodon.py, step by step
Getting credentials for the Mastodon API with Mastodon.py, step by step
20220307
Recull de codis comentats avui
Recull de pràctiques de 2n de DAM. Curs 2021-2022
Autenticació d'accés a 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
- 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 proper dia
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.
20220304 Examen ordinària
1a Part - QML
2a Part - Qt
20220225
Recull de codis comentats avui
- Seguim fent els exercicis del Recull de pràctiques de 2n de DAM. Curs 2021-2022
Codificació i descodificació en base64 a les Qt
Exemple 01_json_01.zip al recull del dia d'avui. (Primer premeu el botó Llegiu i després el botó Escriu)
Codificació en base64
qsText = "2n de DAM"; ui->lbText->setText(qsText); ui->lbNum->setText(qsText.toUtf8().toBase64()); qsText = "Escola del Clot"; ui->letext->setText(qsText); ui->leNum->setText(qsText.toUtf8().toBase64());
Descodificació des de base64
QByteArray qbaCodificat = qjoL["base64"].toString().toLatin1(); QString qsDescodificat = QByteArray::fromBase64(qbaCodificat, QByteArray::Base64Encoding); qDebug() << "qjoL[\"base64\"].toString(): " << qjoL["base64"].toString() << " --> descodificat en base64 --> " << qsDescodificat;
Lectura del valors presents a un QByteArray
QByteArray qba = "123"; for(int i = 0; i < qba.length(); i++){ char cC = qba.at(i); qDebug() << QString("0x%1").arg(uint8_t(cC), 0, 16); //qDebug() << QString("%1").arg(uint8_t(cC), 0, 10); }
Float a 4 bytes i 4 bytes a float en C
Float a 4 bytes i 4 bytes a float en Qt/C++
- A l'arxiu .h:
union uFloat{ float f; unsigned char uc[4]; };
- A l'arxiu .cpp:
union uFloat uFA,uFB; uFA.f = 3.24f; qDebug() << "*****************"; for(int i = 0; i <4; i++){ qDebug() << QString("0x%1").arg(uint8_t(uFA.uc[i]), 0, 16); } qDebug() << "*****************"; //uFB.uc[0] = 0x29; uFB.uc[0] = 41; //uFB.uc[1] = 0x5c; uFB.uc[1] = 92; //uFB.uc[2] = 0x4f; uFB.uc[2] = 79; //uFB.uc[3] = 0x40; uFB.uc[3] = 64; qDebug() << QString("%1").arg(uFB.f); uFB.uc[0] = 215; uFB.uc[1] = 215; uFB.uc[2] = 171; uFB.uc[3] = 65; qDebug() << QString("%1").arg(uFB.f);
20220221
Recull de codis comentats avui
- Seguim fent els exercicis del Recull de pràctiques de 2n de DAM. Curs 2021-2022
20220218
Recull de codis comentats avui
- Seguim fent els exercicis del Recull de pràctiques de 2n de DAM. Curs 2021-2022
- Codi IoT-02-22_ttn-otaa_dam_03_floats_BME280.zip que integra LoRaWAN i lectura del sensor BME280. (Desat al recull d'avui)
20220214
Recull de codis comentats avui
- Downlink LoRaWAN OTAA
- Seguim fent els exercicis del Recull de pràctiques de 2n de DAM. Curs 2021-2022
Exemple de gestió de dos caràcters rebuts a la placa IoT-02: gestioCadenaRebudaESP32_00.c (al recull d'avui)
20220211
Recull de codis comentats avui
- Codi d'ajuda per a fer la pràctica 5 de QML del Recull de pràctiques de 2n de DAM. Curs 2021-2022
- Downlink LoRaWAN OTAA
- Seguim fent els exercicis del Recull de pràctiques de 2n de DAM. Curs 2021-2022
20220207
Recull de codis comentats avui
Tramesa de nombres reals emprant LoRa
Ajuda a l'exercici Lora-3 del Recull de pràctiques de 2n de DAM. Curs 2021-2022:
Missatges downlink LoRaWAN
Nous exercicis del Recull de pràctiques de 2n de DAM. Curs 2021-2022: Lora-4, Qt-9 i QML-8.
LoRaWAN ABP
Per a fer les pràctiques amb LoRa ABP haurem de desactivar el comptador de trames (cada cop que es reprograma la placa IoT-02 el comptador torna a zero. TTSv3 verifica que el comptatge de trames sigui correcta. Si no es desactiva el comptador de trames semblarà que no es rep la trama). Per a fer-ho, aneu al dispositiu, seleccioneu la pestanya General Settings, premeu el botó EXPAND a la secció Network layer, desplegueu l'enllaç Advanced MAC settings i seleccioneu Enabled a Resets frame counters. Al final deseu els canvis prement el botó Save changes.
Exemple de microprogramari emprant ABP
// TTN uses SF9 for its RX2 window. LMIC.dn2Dr = DR_SF9;
// Set data rate and transmit power for uplink (note: txpow seems to be ignored by the library) LMIC_setDrTxpow(DR_SF7, 14);
Nou exercici del Recull de pràctiques de 2n de DAM. Curs 2021-2022: Lora-5.
20220204
Recull de codis comentats avui
Fem els exercicis Lora-2 i Lora-3 del Recull de pràctiques de 2n de DAM. Curs 2021-2022
20220131
Al recull del 31 de gener de 2022 teniu un exemple de conversió bidireccional de float a cadena unsigned char fent servir union.
Acabem la pràctica 1 de LoRaWAN i comencem la 2 i la 3.
20220128
LoRaWAN
LoRaWAN OTAA
1r exercici de LoRa al Recull de pràctiques de 2n de DAM. Curs 2021-2022
20220124
Recull d'avui Captura del conjunt final de control
MqttBasic::~MqttBasic(){ if (m_client->state() == QMqttClient::Connected) m_client->disconnectFromHost(); delete ui; }
void IndicadorLed::on_cbR_clicked(bool checked){ vSetLabelColor(ui->lbR,(checked)?Qt::red:Qt::darkRed,Qt::darkRed); (*qjoJson)["ledR"] = (checked)?1:0; vActualitzaJson(*qjoJson); }
void IndicadorLed::vActualitzaJson(QJsonObject qjsObj){ QString strFromObj = QJsonDocument(qjsObj).toJson(QJsonDocument::Compact).toStdString().c_str(); ui->etJson->setText(strFromObj); emit vTrametJsonLeds(strFromObj); }
20220121 (Baixa professor)
Recull de codis pujats el 17 de gener. Avui s'han afegit un parell d'exercicis.
Dades JSON
Qt
How To Manipulate JSON With C++ and Qt
Exemple d'us del format JSON a les Qt: 01_json_00.zip del recull
NodeRed
json00.nodered.txt al recull
ESP32 / placa IoT-02
Biblioteca Arduino_JSON al recull
Codi d'exemple emprant JSON a la placa IoT-02: Codi de microprogramari IoT-02_mqtt_10_dam.zip al recull
Visualització de formes i colors a etiquetes QLabel
Visualització de led de color: 00_botonsToggle05.zip (Vídeo explicatiu del codi 00_botonsToggle05) i 00_botonsToggle06.zip (Vídeo explicatiu del codi 00_botonsToggle06)
Visualització d'un botó físic: 04_indicadorBotons00.zip del recull
Exercicis
Resoldre els exercicis Qt-3, Qt-4, Qt-5, Qt-6 i Qt-7
20220117
Recull de codis comentats avui
Dades JSON
Qt
How To Manipulate JSON With C++ and Qt
Exemple d'us del format JSON a les Qt: 01_json_00.zip del recull
NodeRed
json00.nodered.txt al recull
ESP32 / placa IoT-02
Biblioteca Arduino_JSON al recull
Codi d'exemple emprant JSON a la placa IoT-02: Codi de microprogramari IoT-02_mqtt_10_dam.zip al recull
Visualització de formes i colors a etiquetes QLabel
Visualització de led de color: 00_botonsToggle05.zip (Vídeo explicatiu del codi 00_botonsToggle05) i 00_botonsToggle06.zip (Vídeo explicatiu del codi 00_botonsToggle06)
Visualització d'un botó físic: 04_indicadorBotons00.zip del recull
Exercicis
Resoldre els exercicis Qt-3, Qt-4 i Qt-5
20220114 (Baixa professor)
Al recull provisional de notes podeu consultar l'avaluació de les pràctiques que m'heu fet arribar. En cas de no estar al dia, feu l'esforç de posar-vos-hi avui (un cop finalitzeu les tasques encomanades per cada bloc de dues hores, que són prioritàries).
IoT (1r bloc)
Pugeu la pràctica a la carpeta compartida. Tant el document amb pdf com els codis comprimits en format .zip o .tar.gz (ni .rar ni .7z). Un cop ho trameteu, feu-me arribar un correu electrònic indicant que ja heu pujat la pràctica.
Per a fer aquesta pràctica, el professor posarà en marxa el punt d'accés que fem servir per a les pràctiques IoT. Altrament, podeu emprar com a punt d'accés un telèfon mòbil capaç de servir una xarxa sense fils de 2,4GHz (tot sovint, a Android es pot seleccionar la banda de punt d'accés: 2,4GHz o 5GHz). La connectivitat de l'ESP32 de la placa IoT-02 a la xarxa sense fils tan sols pot ser a 2,4GHz i no a 5GHz. Una eina Android que us pot ajudar és WiFiAnalyzer.
A la placa IoT-02 implementeu l'exercici Servint pàgina web per a canviar contrasenya (hi ha 4 apartats).
Qt / QML (2n bloc)
Pugeu la pràctica a la carpeta compartida. Tant el document amb pdf com els codis comprimits en format .zip o .tar.gz (ni .rar ni .7z). Un cop ho trameteu, feu-me arribar un correu electrònic indicant que ja heu pujat la pràctica.
A la carpeta d'exàmens antics del recull hi teniu material_20210225ex_M07UF1.zip amb material per a fer un examen del curs passat (en .pdf i en .odt per a que pugueu fer el vostre document. I arxius .zip que us ajudaran a resoldre-ho).
20220110 (Baixa professor)
IoT
Per a fer aquesta pràctica, podeu demanar al professor que posi en marxa el punt d'accés que fem servir per a les pràctiques IoT. Altrament, podeu emprar com a punt d'accés un telèfon mòbil capaç de servir una xarxa sense fils de 2,4GHz (tot sovint, a Android es pot seleccionar la banda de punt d'accés: 2,4GHz o 5GHz). La connectivitat de l'ESP32 de la placa IoT-02 a la xarxa sense fils tan sols pot ser a 2,4GHz i no a 5GHz. Una eina Android que us pot ajudar és WiFiAnalyzer.
A la placa IoT-02 implementeu l'exercici Servint pàgina web per a canviar contrasenya
20211217
Recull de codis del dia d'avui usuari: dam / contrasenya: dam2122
- 1a hora
- Hem plantejat l'exercici 5 del Recull de pràctiques de 2n de DAM. Curs 2021-2022
- Hem repassat codis introductoris de QML
- Seguim acabant el Recull de pràctiques de 2n de DAM. Curs 2021-2022
- Per a l'exercici Qt-2c del Recull de pràctiques de 2n de DAM. Curs 2021-2022 hem vist que per a maximitzar el giny en execució es pot posar al constructor:
showMaximized();
- Anul·lat l'exercici Qt-2d (degut que a les noves versions els ginys dels contenidors no són seleccionables)
- 2a hora
- Seguim acabant el Recull de pràctiques de 2n de DAM. Curs 2021-2022
20211213
Recull de codis del dia d'avui usuari: dam / contrasenya: dam2122
- Integreu les Qt amb l'SDK i l'NDK de l'Android Studio que teniu instal·lat. Feu una prova de funcionament amb el vostre mòbil, real o emulat. Exercici Qt-2 del Recull de pràctiques de 2n de DAM. Curs 2021-2022
- Fem revisió del contingut a les carpetes compartides.
- Anem acabant els exercicis pendents del Recull de pràctiques de 2n de DAM. Curs 2021-2022
20211210
Recull de codis del dia d'avui usuari: dam / contrasenya: dam2122
Fem revisió del contingut a les carpetes compartides.
Anem acabant els exercicis pendents del Recull de pràctiques de 2n de DAM. Curs 2021-2022
20211203
Recull de codis del dia d'avui usuari: dam / contrasenya: dam2122
IoT
Wokwi
Aneu a aquest projecte de wokwi i canvieu el codi sketch.ino pel que hi ha al recull de codis d'avui. Canvieu el text de ClientID per a que sigui únic.
Obriu minimMqttSnap.xml, que hi ha al recull de codis d'avui, a un Snap! sense SSL (recordeu activar les extensions per a JavaScript)
UserLAnd
Instal·leu-vos l'aplicació UserLAnd al vostre telèfon mòbil (present a Google Play i aviat a App Store). Si no teniu mòbil disponible, feu servir un emulador d'Android.
Connecteu el vostre mòbil, real o emulat, a la xarxa sense fils per a IoT i poseu en marxa l'aplicació. Un cop a dins, instal·leu-vos un Debian (80MB). Us demanarà un nom d'usuari i contrasenya. Feu una instal·lació que permeti veure al navegador del vostre ordinador un NodeRED executant-se des del mòbil.
Per a fer-ho:
sudo apt update sudo apt upgrade sudo apt install aptitude openssh-server net-tools curl software-properties-common wget unzip screen
A partir d'ara us podeu connectar remotament per SSH fent servir el port 2022 ( ssh usuari@ipMobil -p 2022 o ssh -o ServerAliveInterval=30 usuari@ipMobil -p 2022 per a que hi hagi persistència en la comunicació)
mkdir bin cd bin curl -sL https://deb.nodesource.com/setup_14.x | sudo bash - sudo apt-get install -y nodejs node -v npm -v mkdir nodered-ui cd nodered-ui wget --no-check-certificate https://www.binefa.cat/IoT/nodeRed/node_red_ui.zip unzip node_red_ui.zip screen node node_modules/node-red/red.js --userDir node_modules/node-red/data --settings node_modules/node-red/settings.js -v --port 2222 --title elmeuTitol --safe flows_meuTitol.json
Premeu Ctrl A + D. I per a tornar a screen funcionant des del rerefons:
screen -r
Qt i QML
Seguim desenvolupant la pràctica 1 de Qt i l'exercici 4 de QML del Recull de pràctiques de 2n de DAM. Curs 2021-2022.
20211129
Recull de codis del dia d'avui usuari: dam / contrasenya: dam2122
Qt
Seguim desenvolupant la pràctica 1 del Recull de pràctiques de 2n de DAM. Curs 2021-2022.
Connectant Qt i QML
Exercici 4 de QML del Recull de pràctiques de 2n de DAM. Curs 2021-2022.
A qmlLliscant_02.zip, traieu les cometes dobles de:
font.bold: "true"
per a deixar-ho així:
font.bold: true
- Modificacions (arxiu 01_qmlLliscant_10.zip actualitzat al recull d'avui):
A Lliscant01Form.ui.qml:
Item { id: element width: 400 height: 400 property alias text1: text1 property alias progressBar: progressBar ProgressBar { id: progressBar y: 189 value: 0.5 //maximumValue: 100 anchors.right: parent.right anchors.rightMargin: 20 anchors.left: parent.left anchors.leftMargin: 20 }
A main.qml:
ApplicationWindow { visible: true width: 640 height: 480 title: qsTr("Exemple Lliscant") RereFons{ id: rf onCmptChanged: { console.log(nCmpt); swipeView.actualitzaBarraDeProgres(nCmpt); } } SwipeView{ id: swipeView anchors.fill: parent currentIndex: tabBar.currentIndex function actualitzaBarraDeProgres(n){ l01.progressBar.value = n/100; l01.text1.text = n; // canvieu element1 per text1 a l'editor QML } Lliscant00Form{ botoTramet.onClicked: { console.log(textInputTE.text) rf.szCadena = textInputTE.text; } } Lliscant01Form{ id: l01 } }
20211126
Recull de codis del dia d'avui usuari: dam / contrasenya: dam2122
Qt
Seguim desenvolupant la pràctica 1 del Recull de pràctiques de 2n de DAM. Curs 2021-2022.
Connectant Qt i QML
Exercici 4 de QML del Recull de pràctiques de 2n de DAM. Curs 2021-2022.
20211122
Recull de codis del dia d'avui usuari: dam / contrasenya: dam2122
Primer exercici de Qt al Recull de pràctiques de 2n de DAM. Curs 2021-2022.
Conceptes nous:
QLabel* pLabel = new QLabel; pLabel->setStyleSheet("QLabel { background-color : red; color : blue; }");
- Radio buttons (Han de ser agrupats en contenidors. Per exemple: Group Box o Frame)
- QTimer (Temporitzador que quan es desborda emet un senyal timeout() i s'ha de connectar a una osca)
20211119
MQTTS i Qt
Evolució de la classe GinyMqtt per a gestionar més còmodament el protocol TCP/IP MQTT. Analitzem contenidor_03.zip que permet la connexió MQTTS.
Provem aquest codi que funciona amb MQTTS emprant l'exemple HelloWorld_NoSSL.xml a Snap! (Recordeu activar javaScript extensions). Paràmetres a canviar:
Servidor (Broker): iot.electronics.cat:9001 Usuari: ecat Contrasenya: clotClot Tema de subscripció: /ledW Tema de publicació: /provaDAM
Conceptes nous:
- Certificats TLS (ca.crt)
- Arxiu de recursos .qrc (ens permet introduir fitxers dins del projecte per a que hi siguin dins de l'executable, sense haver de llegir-los a una ruta externa. Molt convenient per a projectes emprant Android)
Recull de codis del dia d'avui usuari: dam / contrasenya: dam2122
QML
Introducció al QML. Curs 2021-2022
20211115
Desenvolupament de la classe GinyMqtt per a gestionar més còmodament el protocol TCP/IP MQTT
Recull de codis del dia d'avui usuari: dam / contrasenya: dam2122
Introducció al QML. Curs 2021-2022
20211112
Recull de codis del dia d'avui usuari: dam / contrasenya: dam2122
Control de la placa IoT-02 emprant QtMqtt
Amb l'exemple Simple MQTT Client Example provem la connectivitat amb el broker per defecte (amb usuari i contrasenya, que teniu a la màquina virtual) i la connectivitat amb el broker públic de test mosquitto (sense usuari mi contrasenya).
Cal modificar el codi del microprogramari de la placa IoT-02 per a que el broker de test broker.emqx.io d'EMQ X. Modifiqueu també el broker a l'exemple Simple MQTT Client Example i feu subscripcions al vostre botó i35 de la placa IoT-02.
const char* mqtt_server = "broker.emqx.io"; const int mqtt_port = 1883; const char* mqtt_user = ""; const char* mqtt_password = "";
Proveu-lo també a aquest codi amb sòcols web MQTT d'Snap!
Amb l'exemple Quick MQTT Example provem també la connectivitat amb un broker públic de test (sense usuari mi contrasenya). Teniu els codis quicksubscription i quickpublication al recull de codis del dia d'avui usuari: dam / contrasenya: dam2122
Introducció al QML
Introducció al QML. Curs 2021-2022
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
Instal·lació de la bibloteca QtMqtt a Linux
cd Qt/6.1.3/gcc_64/lib git clone git://code.qt.io/qt/qtmqtt.git cd qtmqtt/ git checkout 6.1 rm -r examples/
Mitjançant el Qt Creator obriu el projecte /home/jordi/Qt/6.1.3/gcc_64/lib/qtmqtt/qtmqtt.pro. Aneu al menú i seleccioneu Build / Run qmake
make sudo make install
20211108
Recull de codis del dia d'avui usuari: dam / contrasenya: dam2122
Barra d'estat
Al recull del dia d'avui hi ha el codi principal_03.zip que incorpora la gestió de la barra d'estat d'un QMainWindow
Ús de les màquines virtuals
Posem en marxa la màquina virtual amb Debian 11:
- Posem en marxa el projecte d'exemple MQTT simpleClient
- Executem sobre Android un projecte Qt
20211105
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_v20210304_00.zip de 23,7 GB) al directori maquinesVirtuals/Android_i_Qt
Màquina virtual amb emulador per a Android
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
É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
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
- 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.
qtMqtt
Feu un git clone i especifiqueu la versió amb un git checkout 6.0. Després:
cd qmqtt mkdir build cd build qmake -r .. make sudo make install
Instal·lació a Windows
- Si no teniu el llenguatge perl instal·lat, instal·leu perl
- Obriu el CMD amb les variables d'entorn de les Qt6
git clone git://code.qt.io/qt/qtmqtt.git cd qmqtt git checkout 6.1 mkdir build cd build qmake -r .. mingw32-make mingw32-make install
Instal·lació de QtMqtt per Android
Malgrat que ja us funcioni la biblioteca QtMqtt en programes d'escriptori, heu de fer la compilació de la biblioteca QtMqtt per a la versió de Qt/QML que feu servir per a poder executar programes que duguin aquesta biblioteca a Android.
Hi ha diversos suggeriments de com fer-ho. Després de diversos intents, aquest és el sistema que a mi m'ha funcionat:
Cerqueu el directori lib de la vostra distribució Qt per a Android x86:
jordi@ecat-XPS13:~$ /home/jordi/Qt/6.0.0/android_x86/bin/qmake -query QT_INSTALL_LIBS /home/jordi/Qt/6.0.0/android_x86/lib
o, per al dispositiu físic Android amb tecnologia Android ARM:
ecat@iot-ecat:~$ /home/ecat/Qt/6.0.0/android_armv7/bin/qmake -query QT_INSTALL_LIBS /home/ecat/Qt/6.0.0/android_armv7/lib
Aneu a la carpeta que ens retorna l'ordre anterior (Android x86):
jordi@ecat-XPS13:~$ cd /home/jordi/Qt/6.0.0/android_x86/lib
o, per al dispositiu físic Android amb tecnologia Android ARM:
ecat@iot-ecat:~$ cd /home/ecat/Qt/6.0.0/android_armv7/lib
I feu el procés d'instal·lació (Android x86):
jordi@ecat-XPS13:~/Qt/6.0.0/android_x86/lib$ git clone git://code.qt.io/qt/qtmqtt.git jordi@ecat-XPS13:~/Qt/6.0.0/android_x86/lib$ cd qtmqtt/ jordi@ecat-XPS13:~/Qt/6.0.0/android_x86/lib/qtmqtt$ git checkout 6.0 jordi@ecat-XPS13:~/Qt/6.0.0/android_x86/lib/qtmqtt$ rm -r examples/
o, per al dispositiu físic Android amb tecnologia Android ARM:
ecat@iot-ecat:~/Qt/6.0.0/android_armv7/lib$ git clone git://code.qt.io/qt/qtmqtt.git ecat@iot-ecat:~/Qt/6.0.0/android_armv7/lib$ cd qtmqtt/ ecat@iot-ecat:~/Qt/6.0.0/android_armv7/lib/qtmqtt$ git checkout 6.0 ecat@iot-ecat:~/Qt/6.0.0/android_armv7/lib/qtmqtt$ rm -r examples/
Per a Android x86, mitjançant el Qt Creator obriu el projecte /home/jordi/Qt/6.0.0/android_x86/lib/qtmqtt/qtmqtt.pro. Aneu al menú i seleccioneu Build / Run qmake
Per a Android ARM, mitjançant el Qt Creator obriu el projecte /home/ecat/Qt/6.0.0/android_armv7/lib/qtmqtt/qtmqtt.pro. Aneu al menú i seleccioneu Build / Run qmake
Torneu al terminal d'abans i feu (Android x86):
jordi@ecat-XPS13:~/Qt/6.0.0/android_x86/lib/qtmqtt$ make jordi@ecat-XPS13:~/Qt/6.0.0/android_x86/lib/qtmqtt$ sudo make install
o, per al dispositiu físic Android amb tecnologia Android ARM:
ecat@iot-ecat:~/Qt/6.0.0/android_armv7/lib/qtmqtt$ make ecat@iot-ecat:~/Qt/6.0.0/android_armv7/lib/qtmqtt$ sudo make install
Copieu, fora de la ruta de les Qt, els projectes d'exemple quickpublication i quicksubscription. Obriu els dos projectes per a que puguin ser executats des de l'escriptori i des del mòbil (emulat o no). Per a verificar llur funcionament, podeu executar un projecte al dispositiu mòbil i l'altre a l'escriptori.
20211029
Recull de pràctiques de 2n de DAM. Curs 2021-2022
1a) Feu un nou programa anomenat ginyCompost02, a partir de l'anterior codi. Heu de posar un nou giny de botons a la dreta del giny de text. Quedaran tres ginys: Botons - Text - Botons.
1b) Feu que ginyCompost02 tingui també connectades els senyals i les osques del nou giny.
20211025
Recull de pràctiques de 2n de DAM. Curs 2021-2022
Pràctica amb MQTT (sense la S d'MQTTS). Heu de fer servir el port TCP 1883 i amb sócols web el port 9001 ( formacio.things.cat ) amb usuari ecat i contrasenya clotClot.
Codi en python per a truaduir el text d'un certificat a codi encastable a l'IDE d'Arduino
MQTT-Dash. Control del relé de enclavamiento y lectura de la LDR
- Pràctica amb MQTTS:
- Microprogramari amb MQTTS a la placa IoT-02
- Connexió mitjançant sòcols web (9001) a un Snap! sense SSL. I vam provar mqttSnap.xml.
- Connexió mitjançant NodeRED. Encenem i apaguem un led. Grafiquem el nivell de llum mitjançant el sensor LDR.
- Aplicació d'Android MQTT Dash
- Pràctica amb MQTT:
Ha de ser el mateix que la pràctica anterior fent servir MQTT en comptes d'MQTTS.
20211021
Recull de pràctiques de 2n de DAM. Curs 2021-2022
Al codi mqttSnap.xml heu d'afegir una cancel·lació de subscripció un cop rebeu la vostra MAC.
Recull de codis del dia d'avui usuari: dam / contrasenya: dam2122
IoT
Introducció als protocols TCP MQTT i MQTTS.
¿Qué es MQTT? Su importancia como protocolo IoT
Més informació sobre MQTT i MQTTS
Adreces comentades a classe
mqtt4snap Fet per en Xavier Pi
Broker MQTT que permet fer balanceig de servei de franc
Exemple Hola món amb Snap! amb SSL Cal activar a la rodeta d'engranatge l'opció JavaScript extensions
Snap! sense certificat SSL Cal activar a la rodeta d'engranatge l'opció JavaScript extensions
20211018
Recull de pràctiques de 2n de DAM. Curs 2021-2022
Pseudoservidor UDP
Pseudoservidor UDP emprant Qt5 (1/2)
Pseudoservidor UDP emprant Qt5 (2/2)
20211015
- UDP
- Al NodeRED
- NodeRED + Placa IoT-02
Avui hem aconseguit controlar des del mòbil (tauler de control del NodeRED amb dos botons) l'estat del led blanc de la placa IoT-02.
IoT
Introducció al protocol UDP.
Microprogramari que implementa el protocol UDP per a la placa IoT-02.
unsigned int udpPortRx = 3334; unsigned int udpPortTx = 3333;
Codi per a importar al NodeRED fent servir el protocolo UDP. El port de recepció de l'ordinador (3333) ha de ser el de transmissió a la placa, i el de recepció a la placa (3334) ha de ser el de transmissió de l'ordinador.
Port Rx = 3333 Port Tx = 3334
Qt
- Concepte senyal / osca (signal / slot)
Recull de codis del dia d'avui usuari: dam / contrasenya: dam2122
20211011
Recull de codis del dia d'avui usuari: dam / contrasenya: dam2122
Qt
Seguim amb la introducció a les Qt.
Exercici 02_mesMenys
Desenvolupeu una aplicació gràfica d'usuari, anomenada 02_mesMenys amb la classe GinyMesMenys filla de QWidget, amb tres ginys encastats:
- Botó botoMes amb el signe +. Incrementa el valor de l'atribut privat nN
- Botó botoMenys amb el signe -. Decrementa el valor de l'atribut privat nN
- Etiqueta etNum que presenta el valor de l'atribut privat nN
20211008
Recull de codis del dia d'avui usuari: dam / contrasenya: dam2122
Introducció a les Qt
20211004
Prova amb les plaques IoT-02
JESUITES_FP - educanet01
20211001
Teleconferència pel dia d'avui
Biblioteques Arduino per a la placa IoT-02 (493M)
Codis i disseny electrònic de la placa IoT-02 a Github o git clone https://github.com/jordibinefa/IoT-02.git
Repartiment de Placa IoT-02. De moment, i fins que no es digui el contari, les tornareu el mateix dia.
Heu de dur a classe una font d'alimentació microUSB, o un cable de connexió microUSB per connectar a l'ordinador. Tingueu en compte que us caldrà una altra boca per a connectar el cable miniUSB que us serà subministrat per a programar la placa IoT-02.
20210927
Teleconferència pel dia d'avui
Distribució de M07UF1, M09UF2, M09UF3, M15UF1 i M13 al curs 2021-2022 de 2n de DAM
Recull del dia 20210927 usuari: dam | contrasenya: dam2122
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).
IoT
Instal·lació de Node.js Guia d'instal·lació de node i npm
Verificació:
node --version npm --version
Instal·lació i funcionament del NodeRed autònom
ecat@iot-ecat:~$ mkdir bin ecat@iot-ecat:~$ cd bin ecat@iot-ecat:~/bin$ sudo apt install unzip ecat@iot-ecat:~/bin$ mkdir nodered-ui ecat@iot-ecat:~/bin$ cd nodered-ui ecat@iot-ecat:~/bin/nodered-ui$ wget https://www.binefa.cat/IoT/nodeRed/node_red_ui.zip ecat@iot-ecat:~/bin/nodered-ui$ unzip node_red_ui.zip ecat@iot-ecat:~/bin/nodered-ui$ node node_modules/node-red/red.js --userDir node_modules/node-red/data --settings node_modules/node-red/settings.js -v --port 2222 --title elmeuTitol --safe flows_meuTitol.json
Si hi ha problemes de confiança amb el certificat al descarrega l'arxiu .zip, hi podeu afegir l'opció --no-check-certificate:
wget --no-check-certificate https://www.binefa.cat/IoT/nodeRed/node_red_ui.zip
Repositori de codis fet a classe durant el curs
Codis fets a les classes de 2n de DAM usuari: dam | contrasenya: dam2122
Documentació
Distribució de M07UF1, M09UF2, M09UF3, M15UF1 i M13 al curs 2021-2022 de 2n de DAM
Recull de pràctiques de 2n de DAM. Curs 2021-2022
Qt/QML
Activació de l'editor QML al QtCreator 6
Qt5 de Jan Bodnar
Qt5 Cadaques! A Book about Qt5
Qt Quick tutorial de Jan Bodnar
PyQt5 de Jan Bodnar
Qt for WebAssembly
json
How To Manipulate JSON With C++ and Qt
QProcess
Qt5 tutorial FFmpeg converter using QProcess - 2020
IoT
TCP/UDP Capa de transport d'Ethernet
Afegint la targeta ESP8266 a l'IDE d'Arduino (NodeMCU1.0)
Micropython and the Internet of Things
SCADA fent servir Python QML i Arduino
LoRaWAN
Consola de The Things Stack (Community Edition) de The Things Network
Presentació LoRaWAN (esborrany v0.4)
Recull introductori per a treballar amb LoRa ( usuari: dam / contrasenya: dam2122)
Recull de pràctiques de 2n de DAM. Curs 2021-2022
Transmissió d'un número real de tipus IEEE-754 (4 bytes) i llur recuperació a NodeRED