En aquest cas el nostre microcontrolador es connectarà a una xarxa existent i demanarà periòdicament una pàgina a un servidor connectat al web.
La pàgina sol·licitada serà https://www.google.cat/search?q=etseib.
L'exemple que consulta una pàgina web no ens serveix perquè està pensat per llegir la pàgina un sol cop. En el programa següent hem fet algunes variacions respecte al que hem commentat per aconseguir fer les lectures periòdiques.
// 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ó unsigned long darreraConnexio = 0; const unsigned long periodeConnexio = 10000UL; 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");
}
void loop() { // Programa que es repeteix indefinidament
while (client.available()) {
char c = client.read(); // Rebem caràcters del servidor
Serial.write(c);
}
if (millis() - darreraConnexio > periodeConnexio) {
client.stop();
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();
// Guardem quan hem fet la connexió
darreraConnexio = millis();
} else {
Serial.println("connection failed");
}
}
}
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)) {

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