This is an old revision of the document!


Laboratorul 03. Wi-Fi, NimBLE

Î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.

Wi-Fi

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:

  • Router - definește o nouă rețea.
  • Access Point - un device care face parte dintr-o rețea, se conectează la router, dar este folosit pentru a crea subrețele.
  • Station - un simplu device conectat în rețea.

Un smartphone funcționeaza ca un access point atunci când este configurat hotspot-ul.

Î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:

  • WEP
  • WPA
  • WPA2 (WPA2-PSK)
  • WPA3 (WPA3-AES)

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

BLE

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:

  1. GAP (Generic Access Profile) - defineste rolul fiecarui dispozitiv si cum doua dispozitive se pot conectata (advertising, scanning, etc).
  2. GATT (Generic Attribute Profile) - defineste un mod ierarhic prin care datele sunt transmise intre doua dispozitive odata ce a fost stabilita o conexiune, asemanator unui pachet de retea cu mai multe protocoale din stiva TCP/IP.

Din punct de vedere al arhitecturii de retea, in BLE exista doua tipuri principale de dispozitive, definite de asemenea de profilul GAP:

  • BLE peripheral - trimite periodic mesaje de advertisement pentru a anunta ca este “disponibil”, insa nu initiaza conexiuni.
  • BLE central - scaneaza reteaua si initializeaza conexiunile.

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:

  • Battery Service - pentru a propaga date despre starea bateriei dispozitivului.
  • Alert Notification Service - pentru a trimite alerte atunci cand bateria dispozitivului ajunge la 100%.

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.

Exercitii

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.

  • Dupa ce ati configurat ceasul folosind comenzile din laborator, incercati ping 8.8.8.8. Observati ca nu se trimite niciun pachet.
  • Asa cum am precizat anterior, NuttX nu ofera support pentru time division multiplexing intre BLE si Wi-Fi, iar build-urile noastre sunt configurate sa foloseasca in mod implicit interfata de BLE.
  • Va trebui sa rulati ifconfig pentru a determina numele interfetei de BLE, iar mai apoi ifdown <interfata> pentru a o opri.

În cazul în care nu reușiți să vă conectați la rețeaua facultății, puteți folosi hotspot-ul de pe telefonul mobil. Acest lucru vă va permite să testați atăt conectarea la o rețea nesecurizată, căt și la una securizată (prin WPA2).

NuttX nu tratează în mod implicit semnalul SIGINT, iar în urma rulării ping-ului vi se va bloca consola de nsh. Puteți evita această problemă prin activarea CONFIG_TTY_SIGINT sau configurand un numar fix de pachete de ICMP pe care ping-ul sa le trimita folosind ping -c.

si/iot2025/lab03.1754820138.txt.gz · Last modified: 2025/08/10 13:02 by robert_ionut.alexa
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0