Differences

This shows you the differences between two versions of the page.

Link to this comparison view

si:iot2025:lab03 [2025/08/10 13:02]
robert_ionut.alexa
si:iot2025:lab03 [2025/08/10 16:15] (current)
robert_ionut.alexa
Line 1: Line 1:
 ===== Laboratorul 03. Wi-Fi, NimBLE ===== ===== 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.+Î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, iar in final vom configura ceasul sa functioneze ca un mini-router la care ne vom conecta laptopul.
  
 ==== Wi-Fi ==== ==== Wi-Fi ====
Line 16: Line 16:
 </​note>​ </​note>​
  
-Î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, ​+Î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).
  
 Pentru a putea conecta smartwatch-ul la o rețea Wi-Fi existentă identificată prin <​myssid>:<​mypasswd>,​ se pot folosi comenzile de mai jos: Pentru a putea conecta smartwatch-ul la o rețea Wi-Fi existentă identificată prin <​myssid>:<​mypasswd>,​ se pot folosi comenzile de mai jos:
Line 34: Line 34:
  
 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''​. 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''​.
 +
 +Pentru a putea configura ESP32 să ruleze ca un SoftAP (prin a doua interfață de rețea disponibilă - ''​wlan1''​),​ e nevoie de un set asemănător de comenzi:
 +
 +<​code>​
 +ifup wlan1
 +dhcpd_start wlan1
 +wapi psk wlan1 <​mypasswd>​ 3
 +wapi essid wlan1 nuttxapp 1
 +</​code>​
 +
 +Astfel, se creează rețeaua ''​nuttxapp'',​ protejată tot prin WPA2 si CCMP, având parola <​mypasswd>​. Prin ''​dhcpd_start''​ se pornește daemon-ul ''​dhcpd''​ care va rula un server de DHCP și va asigna un IP tuturor device-urile conectate.
 +
 +De asemenea, o altă comandă utilă pentru a investiga starea interfețelor de rețea este ''​ifconfig'',​ asemănătoare cu cea din Linux.
  
 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ă [[https://​nuttx.incubator.apache.org/​docs/​12.3.0/​applications/​wapi/​index.html|aici]] 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ă [[https://​nuttx.incubator.apache.org/​docs/​12.3.0/​applications/​wapi/​index.html|aici]]
Line 50: Line 63:
  
 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). 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).
 +
 +Pe de alta parte, GATT defineste rolurile de Server - Client pentru dispozitivele conectate prin BLE. Intr-o arhitectura de tipul smartphone - smartwatch, smartphone-ul este BLE central dar in acelasi timp este si client, deoarece citeste datele de pe smartwatch.
  
 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. 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.
Line 66: Line 81:
  
 In cadrul GATT exista si posibilitatea definirii propriului serviciu, insa acest lucru face o aplicatie mai putin portabila, nefiind ceva standardizat de BLuetooth SIG. In cadrul GATT exista si posibilitatea definirii propriului serviciu, insa acest lucru face o aplicatie mai putin portabila, nefiind ceva standardizat de BLuetooth SIG.
 +
 +=== NimBLE ===
 +
 +Pentru a implementa BLE, NuttX se foloseste de NimBLE care este o implementare open-source a stivei de BLE (BLE stack) oferita de Apache in detrimentul dezvoltarii propriei stive.
  
 ===== Exercitii ===== ===== 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. **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.+  * Dupa ce ati configurat ceasul folosind comenzile din laborator, incercati ''​ping 8.8.8.8''​. Observati ca nu se trimite niciun pachet. In unele cazuri este posibil chiar ca unele din comenzi sa va returneze eroare.
   * 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.   * 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.   * Va trebui sa rulati ''​ifconfig''​ pentru a determina numele interfetei de BLE, iar mai apoi ''​ifdown <​interfata>''​ pentru a o opri.
Line 81: Line 100:
 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''​. 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''​.
 </​note>​ </​note>​
 +
 +**2.** In cadrul acestui exercitiu vrem sa transmitem smartphone-ului date si alerte despre starea bateriei folosind aplicatia demo ''​nimble''​ din nuttx-apps.
 +  - Activati compilarea acestei aplicatii folosind CONFIG_EXAMPLES_NIMBLE. Rulati si inspectati codul. Starea bateriei este simulata si este deja trimisa catre smartphone.
 +  - Instalati **nRF connect** pe smartphone-uri. Conectati smartphone-ul la smartwatch prin intermediul acesteia si cititi datele despre baterie.
 +  - Pentru a putea folosi serivicul Alert Notification Service, este nevoie sa configuram smartphone-ul pentru tipul de alerte pe care vrem sa le primim. In caz contrar, vor fi ignorate. Faceti acest lucru din ''​Alert Notification Service''​ -> ''​Alert Notification Control Point''​ -> selectati ''​0 - Simple Alert''​.
 +  - Alertele vor fi transmise prin ''​ble_svc_ans_new_alert_add''​. Cautati semnatura acesteia pentru a determina cum poate fi folosita. (**Hint**: deoarece vom folosi "​Simple Alert",​ macro-ul pe care trebuie sa il trimiteti functiei este ''​BLE_SVC_ANS_CAT_ID_SIMPLE_ALERT''​).
 +
 +<note tip>
 +Numele device-ului va fi exportat prin ''​g_gap_name''​. Ideal, acesta trebuie modificat pentru a nu va confunda device-ul cu cel al colegilor.
 +</​note>​
 +
 +**3. (Bonus)** Ne dorim sa configuram smartwatch-ul sa functioneze ca un mini-router cu doua interfete:
 +  * ''​wlan0''​ va fi conectata la internet in urma exercitiului 1.
 +  * ''​wlan1''​ va rula un server de dhcp si va accepta cereri de conectarea din partea altor dispozitive (laptopul vostru), iar orice pachet primit pe wlan1 trebuie rutat spre wlan0.
 +
 +Pentru a face asta trebuie sa rulati comenzile din laborator, la care se adauga inca doua comenzi extra:
 +  - Trebuie sa setati regula implicită de rutare folosind comanda ''​addroute default 192.168.0.1 wlan0''​.
 +  - Trebuie sa adaugati o noua regula in iptables pentru a aplica NAT pe fiecare pachet rutat: ''​iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE''​.
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