Sunteți pe pagina 1din 6

Internet of Things

Laborator 7
Provisioning
Partea a II-a
(anul universitar 2021-2022)

Universitatea Tehnică ”Gheorghe Asachi” din Iaşi


Facultatea de Automatică şi Calculatoare
Departamentul de Calculatoare
Cuprins
1 Scopul laboratorului 1
2 Soluţie parţială pentru laboratorul 6 1
3 Sarcină de lucru 2
Materiale de studiu 4

Listă tabele

Listă figuri

1
1. Scopul laboratorului

• Familiarizarea cu conceptul de provisioning

• Implementarea unei soluţii complete de instalare pentru un dispozitiv IoT cu conec-


tivitate Wi-Fi

2. Soluţie parţială pentru laboratorul 6

Scanarea reţelelor Wi-Fi disponibile este posibilă doar când perifericul Wi-Fi este configu-
rat fie ı̂n mod STA, fie ı̂n mod STA+AP (sunt expuse două interfeţe distincte, iar scanarea
este realizată prin intermediul interfeţei STA). Astfel, pentru a obţine funcţionalitatea indi-
cată ı̂n laboratorul trecut (afişarea listei de reţele ı̂n formularul din pagina index.html) puteţi
alege una dintre următoarele soluţii:

• Scanarea se realizează o singură data, la pornirea aplicaţiei. Perifericul Wi-Fi va fi


pornit ı̂n mod STA, se va realiza scanarea şi la final, driver-ul va fi deiniţializat şi
perifericul oprit. Rezultatele vor fi stocate ı̂ntr-o structură şi vor fi servite ori de câte
ori este accesată pagina index.html ı̂n modul AP. Listing-ul 1 prezintă succesiunea de
paşi.

esp_netif_init();
esp_event_loop_create_default();
esp_netif_t *wifi_netif = esp_netif_create_default_wifi_sta();

wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();


esp_wifi_init(&cfg);
esp_wifi_set_mode(WIFI_MODE_STA);
esp_wifi_start();

esp_wifi_scan_start(...);
esp_wifi_scan_get_ap_records(...);

esp_wifi_stop();
esp_wifi_deinit();
esp_wifi_clear_default_wifi_driver_and_handlers(wifi_netif);
esp_netif_destroy(wifi_netif);

Listing 1. Scanarea reţelelor - soluţia 1

• Scanarea se realizează la fiecare apel al funcţiei de callback (handle) a resursei in-


dex.html. La nivelul codului folosit pentru configurarea modului AP se modifică
parametrul funcţiei esp wifi set mode din WIFI MODE AP ı̂n WIFI MODE APSTA.
În funcţia de callback se apelează funcţiile esp wifi scan start şi
esp wifi scan get ap records.

1
3. Sarcină de lucru

Partea a II-a

Se va completa cu următoarele funcţionalităţi aplicaţia ı̂ncepută ı̂n laboratorul anterior:

• Biblioteca Non-volatile storage (NVS) va fi folosită pentru stocarea SSID-ului şi a


parolei.

– Prin intermediul acestei biblioteci pot fi stocate ı̂n memoria flash date de tip
ı̂ntreg (cu sau fără semn, pe 8, 16 sau 32 de biţi), şiruri de caractere (maxim
4000 de octeţi) sau blob-uri (date binare, maxim 508000 de octeţi). Aceste date
sunt accesate prin intermediul unor chei unice reprezentate prin intermediul
unor şiruri de maxim 15 caractere.
– În mod implicit, toate aplicaţiile dezvoltate pe baza framework-ului esp-idf in-
clud o partiţie nvs ı̂n memoria flash. Ea este folosită de diferite biblioteci pentru
a stoca date ı̂ntre ciclurile de alimentare. Pentru a limita posibilitatea de re-
folosire a cheilor de către mai multe componente software ale aceleaşi aplicaţii
biblioteca nvs folosite namespace-uri. Astfel, la crearea unui handle de acces
(i.e. apelul nvs open) se specifică şi namespace-ul care se doreşte accesat.
– La nivelul aplicaţiei, ı̂n funcţiei de callback (handle) a resursei results.html se
vor prelua cele două şiruri de caractere recepţionate de la clientul HTTP şi
se vor stoca ı̂n partiţia nvs prin intermediul cheilor "ssid" şi "pass". După
stocare, platforma va fi restartată prin apelul funcţiei esp restart().

• Pe post de aplicaţie rulată de platformă după conectarea la un AP, se va prelua codul


de scanare a serviciilor expunse prin mDNS din laboratorul 5.

• Se va implementa logica de selecţie ı̂ntre modul provisioning şi aplicaţia normală.

– După boot se va verifica dacă sunt stocate ı̂n partiţia nvs un SSID şi o parolă.
În caz afirmativ se va purcede la rularea aplicaţiei normale (ce presupune şi
conectatea la AP-ul identificat prin acel SSID). În caz negativ se va rula codul
de provisioning.
– Pentru forţarea rulării ı̂n modul provisioning (ex. vrem să ne conectăm la alt
AP sau am introdus o parolă greşită ı̂n formular) se va crea un task pentru
monitorizarea butonului conectat la GPIO23. Dacă butonul este apăsat pentru
mai mult de 5 secunde, cele două chei sunt sterse din partiţia nvs şi platforma
este resetată. Astfel, prin logica descrisă la punctul anterior, platofma va intra
ı̂n modul provisioning.

2
Info
• Exemplu de cod pentru utilizarea bibliotecii ı̂n nvs este disponibil aici.

• Documentaţia modulului nvs este disponibilă aici.

• Exemplu de cod pentru scanarea SSID-urilor este disponibil aici.

3
Materiale de studiu

• Foaie de catalog şi manual ESP32

• Documentaţie OTA

• Documentaţie tabele de partiţii

S-ar putea să vă placă și