This is an old revision of the document!
In laboratorul de astazi vom configura placa Esp32 sa acceseze internetul prin intermediul Wi-Fi-ului (denumit station mode), iar mai apoi vom conecta laptopul la Esp32 (care va rula intr-o configuratie denumita SoftAP) pentru a avea conectivitate la internet.
In final, vor fi prezentate cateva notiuni despre procesul de boot de pe Esp32.
Placile Esp32 incorporeaza un modul RF (Radio Frequency) prin intermediul caruia dispun de Wi-Fi, Bluetooth si BLE (Bluetooth Low Energy). Deoarece toate cele trei tehnologii functioneaza la frecventa de 2.4GHz, nu putem sa primim si sa trimitem date in acelasi timp si pe Wi-Fi si prin Bluetooth. Pentru a fi posibil acest lucru, se foloseste time-division multiplexing.
In comunicatia prin Wi-Fi, un device poate sa aiba unul dintre rolurile de mai jos:
In NuttX, Esp32 poate rula atat ca un station, cat si cat un access point (software access point - SoftAP - deoarece managementul comunicatiei se intampla in cadrul sistemului de operare, nu in hardware). Configuratiile precum esp32-wrover-kit:wifi
permit placii sa functioneze doar ca un station, dar exista si esp32-devkitc:sta_softap
, de exemplu, care ofera suport atat pentru station cat si pentru SoftAP.
Pentru a putea conecta Esp32 la o retea Wi-Fi existenta identificata prin <myssid>:<mypasswd>, se pot folosi comenzile de mai jos:
ifup wlan0 wapi psk wlan0 <mypasswd> 3 wapi essid wlan0 <myssid> 1 renew wlan0
wapi psk
este folosit pentru a specifica nivelul de securitate minim pe care reteaua trebuie sa il indeplineasca, precum si algoritmul de criptare - in cazul de fata, se foloseste WPA2 si algoritmul CCMP. In total, exista patru niveluri de securitate, iar in NuttX sunt suportate doar ultimele trei:
Deoarece wapi essid
doar seteaza intern numele retelei, pentru conectarea efectiva la retea si obtinerea unei adrese IP este nevoie de o comanda explicita - renew wlan0
.
Pentru a putea configura Esp32 sa ruleze ca un SoftAP (prin a doua interfata de retea disponibila - wlan1), e nevoie de un set asemanator de comenzi:
ifup wlan1 dhcpd_start wlan1 wapi psk wlan1 <mypasswd> 3 wapi essid wlan1 nuttxapp 1
Astfel, se creeaza reteaua nuttxapp
, protejata tot prin WPA2 si CCMP, avand parola <mypasswd>. Prin dhcpd_start
se porneste daemon-ul dhcpd
care va rula un server de DHCP si va asigna un IP tuturor device-urile conectate.
O descriere mai detaliata a API-ului expus prin WAPI (de exemplu, wapi show wlan0
), precum si cum te poti conecta la o retea nesecurizata (open network), poate fi consultata aici.
De asemenea, o alta comanda utila pentru a investiga starea interfetelor de retea este ifconfig
, asemanatoarea cu cea din Linux.
Esp32 foloseste doua bootloadere intr-un proces denumit multi-stage boot:
Tabela de partitii defineste, in mod implicit, doua tipuri de partitii:
Cu ajutorul partitiei otadata
se implementeaza procedeul denumit OTA - Over-the-air update. Atunci cand second-stage bootloader-ul citeste tabela de partitii, cauta otadata si, bazandu-se pe continutul acesteia, incepe executia partitiei ota_1
sau ota_2
. Astfel, presupunand ca sistemul foloseste ota_1
, in cazul in care vrem sa reflash-uim placa putem sa incarcam noul binar in ota_2
, iar mai apoi doar sa dam un reset. In cazul in care partitia otadata nu exista sau nu este initializata, bootloader-ul foloseste partitia factory
implicita de la adresa 0x10000.
Pentru a putea rula exercitiile, este nevoie sa compilati NuttX folosind esp32-devkitc:sta_softap
, la care va trebui sa activati manuale alte cateva config-uri:
1. Conectati Esp32-ul la reteaua facultatii si testati cu ping 8.8.8.8
ca aveti acces la internet. Folositi interfata wlan0
.
Rulati comanda route
si inspectati output-ul acesteia. Va fi relevant la exercitiul 3.
2. Configurati placa sa ruleze in modul SoftAP si conectati-va cu laptopul la retea pentru a testa. Folositi interfata wlan1
. Rulati din nou comanda route
si observati cum s-a modfiicat tabela de routare.
3. In urma exercitiului 2, laptopul este conectat la Esp32, dar nu are acces la internet. Puteti testa acest lucru din CMD/terminal folosind ping 8.8.8.8
. Mai departe, urmariti pasii de mai jos:
ping 8.8.8.8
. Observati ca nu aveti acces la internet. Configurarea wlan1 ca SoftAP a stricat tabela de routare, asa cum se poate observa din output-ul comenzii route
.addroute default 192.168.0.1 wlan0
. Esp32 este conectat din nou la internet, puteti testati folosind ping
.iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
.www.google.com
.