This is an old revision of the document!
În laboratorul de astăzi vom configura smartwatch-ul Hacktorwatch să acceseze internetul prin intermediul Wi-Fi-ului (denumit station mode), iar prin NimBLE (o biblioteca care implementeaza BLE - Bluetooth Low Energy) vom trimite date si alerte legat de starea bateriei catre smartphone.
Plăcile ESP32 încorporează un modul RF (Radio Frequency) prin intermediul căruia dispun de Wi-Fi, Bluetooth și BLE (Bluetooth Low Energy). Deoarece toate cele trei tehnologii funcționează la frecvența de 2.4GHz, nu putem să primim și să trimitem date în același timp și pe Wi-Fi și prin Bluetooth. Pentru a fi posibil acest lucru, se folosește time-division multiplexing, insa momentan acest feature nu este integrat in NuttX.
În comunicația prin Wi-Fi, un device poate să aibă unul dintre rolurile de mai jos:
În NuttX, ESP32-ul poate rula atât ca un station, cât și ca un access point (software access point - SoftAP - deoarece managementul comunicației se întâmplă în cadrul sistemului de operare, nu în hardware). Cu toate acestea,
Pentru a putea conecta smartwatch-ul la o rețea Wi-Fi existentă identificată 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 rețeaua trebuie să îl îndeplinească, precum și algoritmul de criptare - în cazul de față, se folosește WPA2 și algoritmul CCMP. În total, există patru niveluri de securitate, iar în NuttX sunt suportate doar ultimele trei:
Deoarece wapi essid doar setează intern numele rețelei, pentru conectarea efectivă la rețea și obținerea unei adrese IP este nevoie de o comandă explicită - renew wlan0
.
O descriere mai detaliată a API-ului expus prin WAPI (de exemplu, wapi show wlan0
), precum și cum te poți conecta la o rețea nesecurizată (denumita open network), poate fi consultată aici
Bluetooth Low Energy (BLE) este o varianta optimizata a tehnologiei clasice de Bluetooth pretabila microcontrollerelor care ruleaza pe baterie datorita consumului redus de energie. Din aceasta cauza, un dezavantaj este latimea de banda scazuta (nu se pot trimite multe date), iar distanta este mai scazuta decat in cazul Bluetooth-ului clasic. Consumul redus de energie provine din faptul ca, prin BLE, device-ul se gaseste majoritar in starea de sleep.
In lumea BLE, comunicarea dintre doua dispozitive este impartita pe doua niveluri denumite profile:
Din punct de vedere al arhitecturii de retea, in BLE exista doua tipuri principale de dispozitive, definite de asemenea de profilul GAP:
De cele mai multe ori, un smartphone este BLE central, iar smartwatch-urile sunt BLE peripherals, insa nu este obligatoriu. In realitate, smartwatch-urile moderne se pot conecta la diverse accesorii de la care pot citi date (de exemplu, smartwatch-urile Garmin se pot conecta la anumite heart rate monitors pentru a masura pulsul cat mai exact).
Asa cum am explicat deja, GATT ofera o modalitate ierarhica de a propaga datele prin impartirea acestora in servicii (categorii de date) si caracteristici (date efective). Atat serviciile, cat si caracteristicile sunt identificabile printr-un UUID unic, care este un numar pe 128 de octeti.
De exemplu, un device care monitorizeaza conditiile de mediu poate folosi un singur serviciu cu trei caracteristici: temperatura, umidate, presiune.
In functie de complexitatea aplicatiei si a datelor transmise, in cadrul comunicatiei peste BLE pot fi folosite mai multe servicii. Bluetooth Special Interest Group (SIG) a definit o lista de servicii pentru a oferi o modalitate standardizata prin care atat sender-ul cat si receiver-ul sa poata interpreta datele. In laboratorul de astazi vom folosi doua servicii:
Mai jos, aveti o lista a celor mai importante servicii definite de Blueooth SIG. O lista completa poate fi accesata aici.
In cadrul GATT exista si posibilitatea definirii propriului serviciu, insa acest lucru face o aplicatie mai putin portabila, nefiind ceva standardizat de BLuetooth SIG.
1. Conectați smartwatch-ul la rețeaua facultății și testați cu ping 8.8.8.8
că aveți acces la internet.
ping 8.8.8.8
. Observati ca nu se trimite niciun pachet.ifconfig
pentru a determina numele interfetei de BLE, iar mai apoi ifdown <interfata>
pentru a o opri.
ping -c
.