Internet de les coses amb ESP32 i ESP8266

Exemples Referència Plaques   Recursos CITCEA
Projectes Programació Perifèrics   Inici

Consultem una pàgina web

En aquest cas el nostre microcontrolador es connectarà a una xarxa existent i demanarà una pàgina a un servidor connectat al web.

La pàgina sol·licitada serà https://www.google.cat/search?q=etseib.

// Aquest programa està parcialment basat en els exemples de la pàgina
// https://www.arduino.cc/en/Tutorial/LibraryExamples#wifi1010
#include <SPI.h>    // Carreguem la biblioteca SPI
#include <WiFiNINA.h>    // Carreguem la biblioteca WiFiNINA
const char idXarxa[] = "xarxa-wifi";    // Nom del punt d'accés 
const char contrasenya[] = "contrasenya-wifi";    // Contrasenya de connexió 
int status = WL_IDLE_STATUS;
char server[] = "www.google.cat";    // Servidor al que ens connectarem
char pagina[] = "/search?q=etseib";    // Pàgina que volem demanar
WiFiClient client;
void setup() {    // Inicialització
    Serial.begin(9600);    // Monitor sèrie
    while (!Serial) {
        ;    // Esperem que l'usuari obri el monitor sèrie
    }
    if (WiFi.status() == WL_NO_MODULE) {
        Serial.println("No s'ha trobat el dispositiu Wi-Fi");
        while (true);    // Bloquegem el programa
    }
    String versio = WiFi.firmwareVersion();
    if (versio < "1.0.0") {
        Serial.println("Convindria actualitzar el firmware");
    }
    while (status != WL_CONNECTED) {
        Serial.print("Connectant a la xarxa ");
        Serial.println(idXarxa);
        status = WiFi.begin(idXarxa, contrasenya);
        delay(10000);    // Ho tornarem a intentar passats 10 s
    }
    Serial.print("Connectat a "); 
    Serial.println(WiFi.SSID());
    Serial.print("Estat de la connexió: ");
    Serial.println(WiFi.status()); 
    Serial.print("Adreça IP del dispositiu: ");
    Serial.println(WiFi.localIP()); 
    Serial.print("Intensitat del senyal: ");
    Serial.print(WiFi.RSSI()); 
    Serial.println(" dBm");
    Serial.println(); 
    Serial.println("Anem a connectar al servidor");
    if (client.connect(server, 80)) {    // Si ho hem aconseguit
        Serial.println("S'ha fet la connexió al servidor");
        client.print("GET ");
        client.print(pagina);
        client.println(" HTTP/1.1");
        client.print("Host: ");
        client.println(server);
        client.println("Connection: close");
        client.println();
    }
}
void loop() {    // Programa que es repeteix indefinidament
    while (client.available()) {
        char c = client.read();    // Rebem caràcters del servidor
        Serial.write(c);
    }
    if (!client.connected()) {    // Si es talla la connexió
        Serial.println();
        Serial.println("Ens hem desconnectat del servidor");
        client.stop();
        while (true);    // Es bloqueja aquí
    }
}

En aquest programa hi ha la condició que el monitor sèrie estigui obert per a que el programa comenci a funcionar. Això ens permet seguir tot el procés encara que triguem a obrir el monitor sèrie. Quan el microcontrolador hagi de funcionar de manera independent de l'ordinador caldrà eliminar les línies següents per evitar aquest bloqueig.

    while (!Serial) {
        ;    // Esperem que l'usuari obri el monitor sèrie
    }

La petició que hem fet ha estat fent servir el protocol http (sense encriptació). La majoria de servidors ja no admeten el protocol http i demanen que sempre es faci servir un protocol segur (https), en aquest cas obtindríem una resposta en la que se'ns indicaria que aquesta pàgina s'ha mogut a un servidor https (encriptat) i no ens tornarà la informació.

Llavors hauríem de fer la petició fent servir un protocol segur SSL. En aquest cas caldria modificar les línies marcades en groc tal com es mostra a continuació (cada una al seu lloc).

WiFiSSLClient client;

    if (client.connect(server, 443)) {

 

 

 

 

 

 

 

 

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.