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

De binefa.com
Salta a la navegació Salta a la cerca

UDP

UDP-1

Mireu-vos l'ajuda al QtCreator per a saber com funciona la classe QUdpSocket. Podeu anar a la casella inferior i escriure-hi "'? QUdpSocket".

1) Feu un programa amb les Qt a on apareguin dos botons. El botó superior ha de tenir el text W i el nom de l'objecte del botó btEncenBlanc. El botó inferior ha de tenir el text w i el nom de l'objecte del botó btApagaBlanc.

El mètode que tramet el sòcol té aquest prototipus:

void GinyUdp::vTrametSocolUdp(QByteArray qbaCos,QHostAddress qhaAdd,int nPort)

Quan premeu qualsevol dels dos botons s'ha de trametre el text (W o w) al localhost (QHostAddress::LocalHost) al port 7755.

2) Executeu localment el vostre NodeRED i feu que un node UDP pseudoservidor rebi datagrames pel port 7755. (Feu una captura de pantalla, incloent-hi el NodeRED i el vostre programa en Qt, demostrant llur funcionament)

3) Modifiqueu el microprogramari (firmware) per rebre els sòcols tramesos pel programa en Qt. Indiqueu que heu canviat al microprogramri per a que funcioni. També heu de canviar l'adreça de destí del datagrama (la IP de la placa IoT-02).

UDP-2

L'exercici Qt anterior és la base per a fer aquest.

1) Afegiu ginys de tipus QLineEdit per a recollir el valor de la IP i el port de destí. Feu servir els ginys amics (buddies) per a relacionar etiquetes (QLabel) i línies d'edició (QLineEdit). Canvieu l'ordre de la tabulació per defecte.

2) Feu que al prémer un botó es trameti el contingut W o w del datagrama a la IP i port correctes.

TCP

MQTTS-01

- 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. Enceneu i apagueu un led. Grafiqueu el nivell de llum mitjançant el sensor LDR. Deseu el flux de nodes en format JSON.

- Aplicació d'Android MQTT Dash (MQTTool a IOS)

MQTT-02

- Microprogramari amb MQTT a la placa IoT-02

- Connexió mitjançant sòcols web (9001) a un Snap! sense SSL. Modifiqueu mqttSnap.xml anomenant-lo mqttNoSegurSnap.xml .

- Connexió mitjançant NodeRED. Afegiu un nou broker MQTT per a comunicar-vos amb la placa. Enceneu i apagueu un led. Grafiqueu el nivell de llum mitjançant el sensor LDR. Deseu el flux de nodes en format JSON.

- Aplicació d'Android MQTT Dash. Teniu cura de no seleccionar que hi ha certificats SSL. (MQTTool a IOS)

QML

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

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

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

4) Feu pel vostre compte els codis comentats als 10 vídeos de Connexió entre el frontal QML (frontend) i el rerefons en C++ (backend) presents a Vídeos QML

5) Feu un programa en QML que contingui una casella de selecció (checkbox) i dues etiquetes. L'objectiu és encendre i apagar el led blanc des de l'aplicació QML, una etiqueta dirà l'estat de connexió al broker (vermell: desconnectat, carabassa: connectant i verd: connectat) i l'altra etiqueta mostrarà si el botó i35 és premut o no. El rerefons fet amb C++ ha de fer la comunicació amb el broker MQTTS. Feu l'execució des de l'escriptori i des d'Android (mòbil real o virtual).

Qt

Qt-1)

Desenvolupeu una aplicació de Qt que interactuï amb la placa.

Ha de tenir:

Selecció de connectivitat mitjançant MQTT o MQTTS, amb botó de connexió / desconnexió. En funció de l'estat de connexió, amb una etiqueta hi sortirà en vermell desconnectat, en blau connectant i en verd connectat.

Mitjançant radio buttons es pot seleccionar les tres mides de text de la pantalla. A un line edit s'escriu el missatge i un botó de tramesa (activat si hi ha connexió).

Quatre caselles de selecció (check button) per a controlar la il·luminació dels quatre leds.

Tres etiquetes que mostren si els botons estan premuts o no.

Botó de petició del valor de l'LDR. Una casella de selecció, amb un line edit per a introduir el nombre de segons que permeti la repetició de la petició de valor.

Botó de petició del valor de la temperatura, humitat relativa i pressió atmosfèrica. Una casella de selecció, amb un line edit per a introduir el nombre de segons que permeti la repetició de la petició de valor.

Qt-2)

2a) 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. JDK 1.8

2b) Compileu la biblioteca qtmqtt per a que funcioni amb Android.

2c) Feu que el primer exercici, Qt-1, s'executi maximitzant el giny principal.

IoT

Wokwi

1) Aneu a aquest projecte de wokwi i canvieu el codi sketch.ino pel que hi ha al recull de codis d'arxius que emulen un ESP32 a wotwi. Canvieu el text de ClientID per a que sigui únic.

Obriu minimMqttSnap.xml, que hi ha al recull de codi Snap, a un Snap! sense SSL (recordeu activar les extensions per a JavaScript)

Per als reculls de codis d'aquest exercici us caldran aquestes credencials:

usuari: dam
contrasenya: dam2122

Feu les captures necessàries per a demostrar el funcionament de la pràctica (encendre i apagar el led a l'emulador de wokwi).

UserLAnd

1) 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, des de l'aplicació de mòbil UserLAnd:

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

Servint pàgina web per a canviar contrasenya

GitHub del wifi-manager

IoT-02_webCred-01) Afegiu a sota dels include de WiFiManager-example.ino:

#define LED_BLANC 19
#define RST_WIFI_CRED 35


IoT-02_webCred-02)

Canvieu 2 per LED_BLANC i 15 per RST_WIFI_CRED. Això farà que al bucle principal s'encengui i s'apagui el led blanc i que quan es premi el botó I35 s'esborrin les credencials.

void setup() {
 pinMode(2, OUTPUT);
 pinMode(15,INPUT); //for resetting WiFi creds
 ...
 
void loop() {
 if(digitalRead(15) == HIGH){
   Serial.println("Wiping WiFi credentials from memory...");
   wipeEEPROM();
   while(loadWIFICredsForm());
 }
 digitalWrite(2,HIGH);
 delay(1000);
 digitalWrite(2,LOW);
 delay(1000);
}

El codi haurà de quedar:


void setup() {
 pinMode(LED_BLANC, OUTPUT);
 pinMode(15,INPUT); //for resetting WiFi creds
 ...
 
void loop() {
 if(digitalRead(RST_WIFI_CRED) == HIGH){
   Serial.println("Wiping WiFi credentials from memory...");
   wipeEEPROM();
   while(loadWIFICredsForm());
 }
 digitalWrite(LED_BLANC,HIGH);
 delay(1000);
 digitalWrite(LED_BLANC,LOW);
 delay(1000);
}

IoT-02_webCred-03)

Personalitzeu el vostre punt d'accés canviant l'SSID (per defecte ESP32 WiFi Manager) per un de vostre. També personalitzeu la contrasenya d'accés al punt d'accés (per defecte 12345678).

bool loadWIFICredsForm(){
 String s = EEPROM.readString(100);
 String p = EEPROM.readString(200);
 
 const char* ssid     = "ESP32 WiFi Manager";
 const char* password = "12345678";
 Serial.println("Setting Access Point...");
 
 WiFi.softAP(ssid, password);
 
 IPAddress IP = WiFi.softAPIP();
 
 Serial.print("AP IP address: ");
 Serial.println(IP);
 
 server.on("/", handleRoot);


IoT-02_webCred-04)

Connecteu-vos al punt d'accés generat per la vostra placa IoT-02 (per exemple, amb el mòbil). Un cop connectats, el telèfon us pot avisar que no teniu connexió a Internet i us pot suggerir canviar de xarxa (digueu-li explícitament que no). Des del dispositiu connectat al punt d'accés entreu al navegador i escriviu com a URL: 192.168.4.1

Un cop us aparegui el formulari web demanant SSID i contrasenya, feu una captura de pantalla. Quan deseu les credencials, la placa IoT-02 tornarà a reiniciar-se en tres segons. Verifiqueu que s'aconsegueix la connexió a la xarxa sense fils de la vostra placa IoT-02.