La biblioteca ESP8266WiFi té moltes funcions i possibilitats, aquí només comentarem les que fem servir en aquest web. Podeu trobar la descripció completa a la pàgina ESP8266WiFi library.
Per crear un servidor Wi-Fi fem servir el constructor WiFiServer:
WiFiServer server(80); // Creem un objecte de comunicació amb el port 80
Per posar en marxa el servidor fem servir la funció begin.
server.begin();
La funció mode ens permet especificar el mode desitjat.
WiFi.mode(WIFI_AP); // El Wi-Fi funcionarà com a punt d'accés
La funció available ens indica si el servidor està preparat. En el cas següent, reiniciem si no és així:
WiFiClient client = server.available(); // Obrim un client per al servidor
if (!client) { // Mirem si està disponible
return; // Si no ho està, torna a començar
}
Cal tenir en compte que l'ESP8266 tindrà, en principi, dues adreces MAC, una per quan funciona com a punt d'accés i una altra per quan funciona com a estació.
La informació completa la podeu trobar a la pàgina Soft Access Point Class.
La funció softAP ens crea un punt d'accés amb l'identificador que indiquem. A més, podem posar-li una contrasenya (entre 8 i 63 caràcters), indicar el canal (1 a 13, 1 si no ho posem) i fer que sigui invisible per als que no saben que existeix. Finalment, podem indicar el màxim nombre de connexions.
const char idXarxa[] = "acces-ESP8266"; // Nom del punt d'accés const char contrasenya[] = "etseib00"; // Contrasenya de connexió
WiFi.softAP(idXarxa); // Configura el punt d'accés (obert)
WiFi.softAP(idXarxa, contrasenya); // Protegit amb contrasenya
WiFi.softAP(idXarxa, contrasenya, 2); // En el canal 2
WiFi.softAP(idXarxa, contrasenya, 1, 1); // Invisible en el canal 1
WiFi.softAP(idXarxa, contrasenya, 1, 0, 4); // Visible amb quatre connexions com a màxim
Aquesta funció retorna true si s'ha establert el punt d'accés i false en cas que no. Podem, doncs, fer-la servir en un while que esperi fins que el punt d'accés estigui llest.
El punt d'accés es configurarà amb l'adreça 192.168.4.1 i donarà les adreces consecutives a aquesta als elements que s'hi connectin. La funció softAPConfig ens permet configurar unes adreces IP diferents així mom la màscara i la porta d'enllaç. Cal fer servir valors coherents en la configuració. Els paràmetres són del tipus IPAddress que també està definit a la biblioteca.
IPAddress ip_PA(192, 168, 1, 1); IPAddress porta(192, 168, 1, 1); IPAddress subxarxa(255, 255, 255, 0);
WiFi.softAPConfig(ip_PA, porta, subxarxa);
La funció softAPmacAddress ens retorna l'adreça MAC corresponent al nostre sistema en mode punt accés i la funció softAPIP l'adreça IP que s'ha configurat.
Serial.println(WiFi.softAPmacAddress());
Serial.println(WiFi.softAPIP());
Si volem desconnectar el servei de punt d'accés podem fer servir la funció softAPdisconnect.
WiFi.softAPdisconnect();
La informació completa la podeu trobar a la pàgina Station Class.
La funció begin ens permet connectar a un punt d'accés existent si en sabem l'identificador i la contrasenya.
const char idXarxa[] = "xarxa-wifi"; // Nom del punt d'accés const char contrasenya[] = "contrasenya-wifi"; // Contrasenya de connexió
WiFi.begin(idXarxa, contrasenya); // Connexió a la xarxa Wi-Fi existent
La funció status ens indica l'estat de la connexió. Les respostes possibles són:
| Resposta | Significat |
| WL_CONNECTED | Connexió correcta al punt d'accés |
| WL_NO_SSID_AVAIL | No s'ha trobat el punt d'accés desitjat |
| WL_CONNECT_FAILED | S'ha trobat el punt d'accés però no s'ha pogut connectar Correspon normalment a una contrasenya incorrecta |
| WL_IDLE_STATUS | En aquest moment hi ha un canvi d'estat del Wi-Fi Convé esperar una mica i tornar-ho a mirar |
| WL_DISCONNECTED | Està desconnectat Típicament quan el dispositiu no està en mode estació |
while (WiFi.status() != WL_CONNECTED) { // Mira si s'ha connectat cada 0,5 s
delay(500);
Serial.print("."); // Cada 0,5 s posa un puntet
}
La funció SSID ens retorna l'identificador de la xarxa i la funció psk la contrasenya. En principi, aquests valors ja els sabem. La funció macAddress ens retorna l'adreça MAC del dispositiu en mode estació i la funció localIP la seva adreça IP. Aquesta adreça és important perquè és la que hem de posar al navegador quan ens connectem. Tenim funcions per connèixer altres paràmetres de la connexió que ha facilitat el punt d'accés, com la màscara de subxarxa (subnetMask), el nom del dispositiu a la xarxa (hostname), la porta d'enllaç (gatewayIP), els servidors de DNS (dnsIP), l'adreça MAC del punt d'accés (BSSIDstr) o la intensitat del senyal Wi-Fi (RSSI).
Serial.println(WiFi.SSID());
Serial.println(WiFi.psk());
Serial.println(WiFi.macAddress());
Serial.println(WiFi.localIP());
Serial.println(WiFi.subnetMask());
Serial.println(WiFi.hostname());
Serial.println(WiFi.gatewayIP());
Serial.println(WiFi.dnsIP());
Serial.println(WiFi.dnsIP(1));
Serial.println(WiFi.BSSIDstr());
Serial.println(WiFi.RSSI());
La informació completa la podeu trobar a la pàgina Client Class.
Per crear un receptor de clients fem servir el constructor WiFiClient:
WiFiClient client;
El nom de l'objecte és una variable que val true quan ja està disponible. Podem, doncs, fer-la servir en un while que esperi fins que el receptor estigui llest.
La funció available ens indica que hi ha algun client connectat. En el cas següent, esperem a que així sigui:
while(!client.available()){
delay(1); // Esperem tenir client
}
La funció flush envia les dades al client.
client.flush();
També ens pot ser útil la funció softAPgetStationNum ens diu el nombre de clients que hi ha connectats en aquell moment.
Serial.println(WiFi.softAPgetStationNum());
SI la petició get conté paràmetres o la petició d'una pàgina concreta (vegeu les comandes http) podem fer servir la funció readString per llegir-ho.
String peticio = client.readString();
Si els paràmetres són fàcils d'avaluar, en tindrem prou amb la funció indexOf que ens torna la posició on comença el text que li hem passat com a paràmetre o -1 si no hi és. Per exemple:
String peticio = client.readString();
client.flush();
if (peticio.indexOf("LED=1") != -1) {
estat = HIGH;
}
Per enviar una pàgina html al client fem servir les funcions client.print i client.println tants cops com calgui.
client.print("<h1>El LED està ");
client.print("encès");
client.println("</h1>");
A l'inici de la transmissió (abans d'enviar la pàgina html) cal enviar les dades següents:
client.println("HTTP/1.1 200 OK");
client.println(); // Imprescindible línia en blanc
client.println("<!DOCTYPE HTML>");
client.println("<meta charset='UTF-8'>");

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