Managementul conexiunii WiFi la ESP8266
Circuitul WiFi Espressif ESP8266 a reprezentat o evoluție importantă în universul plăcilor de dezvoltare în general dar și a comunității Arduino. Permițând conectivitate WiFi la un preț derizoriu și ușurință de programare și utilizare în cadrul sistemelor DIY, ESP8266 are o popularitate și o răspândire din ce în ce mai mare echipând plăci de dezvoltare diverse.
Facilitățile oferite de extensia ESP8266 pentru Arduino IDE includ conectarea la Internet prin intermediul unui AP, activarea ca un AP, funcționarea duală client WiFi și AP, utilizarea protocoalelor http și https, funcționarea ca server web sau server DNS ș.a.m.d. Toate aceste facilități oferite de circuitul ESP8266 fac din acesta un instrument extrem de util în cadrul proiectelor proprii. Una dintre problemele care apare totuși la construirea unui dispozitiv bazat pe circuitul ESP8266 este managementul datelor de conectarea la rețea. Dacă se dorește schimbarea datelor de acces la rețeaua WiFi (mutăm dispozitivul în altă locație sau modificăm infrastructura de acces la Internet) dispozitivul trebuie reprogramat. Chiar dacă luăm în calcul programarea OTA tot este necesară utilizarea unui sistem de calcul (PC sau laptop cu Arduino IDE instalat) pentru a modifica datele de acces (SSID și parolă).
Bineînțeles, este posibilă programarea unei interfețe web care să permită modificarea variabilelor corespunzătoare datelor de acces dar acest lucru este destul de consumator de timp și adaptarea codului pentru proiecte diverse este o sarcină repetitivă destul de anevoioasă. Din fericire există o bibliotecă software ce permite automatizarea acestui proces și ușurează foarte mult dezvoltarea noilor proiecte în care avem nevoie de modificarea parametrilor de funcționare fără a reprograma dispozitivul.
Această bibliotecă se numește WiFiManager și permite configurarea, prin intermediul unei interfețe web, a conexiunii WiFi în cazul în care configurarea implicită nu funcționează (interfața web de configurare se activează doar în cazul în care conectarea la rețea nu este posibilă cu datele de autentificare curente). Instalarea bibliotecii se face din Library Manager a mediului Arduino IDE. Testele au fost realizate pe o placă NodeMCU utilizând Arduino IDE 1.8.5 și extensia ESP8266 Community 2.4.1.
După instalarea bibliotecii facilitățile de configurare se includ în program inserând în cod secvențele următoare. La începutul programului se include biblioteca WiFiManager și dependințele acesteia:
#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
WiFiManager wifiManager;
În cadrul secțiunii setup() se înlocuiește codul obișnuit de conectare cu instrucțiunea:
wifiManager.autoConnect();
Execuția acesteia va conduce la conectarea la rețea dacă procesul de configurare a fost deja parcurs sau la blocarea programului și la pornirea interfeței de configurare web. Aceasta va fi accesibilă prin intermediul unui AP propriu sistemului, AP denumit ESPXXXXXX, la adresa IP 192.168.4.1 .
Interfața web permite configurarea și salvarea rețelei în care va funcționa dispozitivul, vizualizarea informațiilor hardware specifice plăcii de dezvoltare și resetarea acesteia.
Dacă conectivitatea de rețea nu este esențială în funcționarea dispozitivului – dispozitivul trebuie să funcționeze și fără conexiunea de rețea – putem adăuga următoarea instrucțiune pentru a defini un timp în care se așteaptă configurarea după care se trece mai departe la execuția normală a programului.
wifiManager.setConfigPortalTimeout(180);
În cazul în care dorim totuși să reluăm periodic tentativa de conectare la rețea, utilă de exemplu în cazul în care repornirea sistemului coincide cu indisponibilitatea AP-ului – datele de conectare sunt corecte dar în momentul în care se încearcă conectarea nu este disponibilă infrastructura, se poate insera o secvență de instrucțiuni, ca în exemplul de mai jos, în secțiunea loop():
if (WiFi.status() != WL_CONNECTED) wifiManager.autoConnect();
Pagina web de configurare poate fi pornită și în mod voit (la apăsarea unui buton de exemplu) prin intermediul instrucțiunii:
wifiManager.startConfigPortal();
O altă facilitate interesantă oferită de bibliotecă este posibilitatea de a adăuga în cadrul paginii de configurare a unor parametrii proprii ce vor fi salvați în memoria nevolatilă a circuitului ESP8266. Instrucțiunile de mai jos definesc o variabilă server ce permite memorarea adresei de rețea a unui server MQTT. Datele de configurat vor apărea în interfața web alături de configurația de acces în rețeaua WiFi.
WiFiManagerParameter custom_mqtt_server(„server”, „mqtt server”, mqtt_server, 40);
wifiManager.addParameter(&custom_mqtt_server);
mqtt_server = custom_mqtt_server.getValue();