Differences

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

Link to this comparison view

si:iot2025:lab01 [2025/07/13 12:11]
robert_ionut.alexa
si:iot2025:lab01 [2025/08/11 12:50] (current)
dan.tudose
Line 3: Line 3:
 Bine ați venit la școala de vară IoT Summer School! Bine ați venit la școala de vară IoT Summer School!
  
-In cadrul ​scolii ​de vara, ne propunem ​sa va familiarizam ​cu sisteme de operare RTOS (NuttX) care se preteaza ​mai degraba microcontrollerelor ​decât sistemelor de tip desktop.+În cadrul ​școlii ​de vară, ne propunem ​să vă familiarizăm ​cu sisteme de operare RTOS (Real time operating system- NuttX - care se pretează ​mai degrabă microcontrolerelor ​decât sistemelor de tip desktop.
  
-În acest laborator veți învăța cum să compilați și să încărcați sistemul de operare NuttX pe smartwatch-ul [[https://​github.com/​dantudose/​open-smartwatch|Hector ​Watch]], dezvoltat ​in facultate ​si bazat pe un modul **ESP32 S3 mini** la care au fost adaugate+În acest laborator veți învăța cum să compilați și să încărcați sistemul de operare NuttX pe smartwatch-ul [[https://​github.com/​dantudose/​Hacktor-Watch-2.0/|Hacktor ​Watch]], dezvoltat ​în facultate ​și bazat pe un microprocesor ​**ESP32 S3** la care au fost adăugate
-  * patru butoane externe +  * doua butoane externe
-  * un step counter+
   * un display cu touch   * un display cu touch
   * un senzor de haptics   * un senzor de haptics
-  * un accelerometru +  * un accelerometru ​si giroscop
-  * un cititor de carduri microSD+
  
-Mai jos puteti ​vedea si o poza cu PCB-ul ​ceasului:+Mai jos puteți ​vedea diagrama hardware a ceasului:
  
-[[https://​github.com/​radupascale/​smartwatch-licenta|{{  si:laboratoare:pcb2_no_bg.png?500  ​}}]]+{{ :si:iot2025:hacktor_watch_2.0.jpg?600 }}
  
-Pentru a putea fi folosit pe microcontrollere, NuttX are un memory-footprint foarte scăzut (de ordinul câtorva ​sutelor ​de kilobytes). Un alt feature care îl face potrivit sistemelor low-end este faptul că nu folosește mecanismele de memorie virtuală (mai costisitoare ​atat din punct de vedere hardware ​cat si software) în mod implicit, acest mod de operare numindu-se flat-mode addressing.+Pentru a putea fi folosit pe microcontrolere, NuttX are un memory-footprint foarte scăzut (de ordinul câtorva ​sute de kilobytes). Un alt feature care îl face potrivit sistemelor low-end este faptul că nu folosește mecanismele de memorie virtuală (mai costisitoare ​atât din punct de vedere hardware, cât și software) în mod implicit, acest mod de operare numindu-se flat-mode addressing.
  
 ===== Setup ===== ===== Setup =====
Line 44: Line 42:
 ==== MacOS ==== ==== MacOS ====
  
-Pentru a rula pe MacOS urmariti ​tutorialul de [[https://​github.com/​robertalexa2000/​nuttx-esp32-docs/​blob/​si_labs/​bringup/​macos_tutorial.md|aici]].+Pentru a rula pe MacOS, urmăriți ​tutorialul de [[https://​github.com/​robertalexa2000/​nuttx-esp32-docs/​blob/​si_labs/​bringup/​macos_tutorial.md|aici]].
  
 ===== Compilarea și încărcarea pe placă ===== ===== Compilarea și încărcarea pe placă =====
Line 86: Line 84:
  
 <note tip> <note tip>
-NuttX folosește ​directoare separate:+NuttX folosește ​două directoare separate:
   * nuttx, care conține sistemul de operare: scheduler, drivere, sisteme de fișiere, etc.   * nuttx, care conține sistemul de operare: scheduler, drivere, sisteme de fișiere, etc.
   * nuttx-apps, care conține aplicațiile.   * nuttx-apps, care conține aplicațiile.
Line 92: Line 90:
 Una din etapele compilării presupune ca sistemul de build să creeze o bibliotecă statică denumită ''​libapps.a''​ care va fi adăugată la binarul de NuttX în etapa de linking. Una din etapele compilării presupune ca sistemul de build să creeze o bibliotecă statică denumită ''​libapps.a''​ care va fi adăugată la binarul de NuttX în etapa de linking.
  
-Repository-ul hectorwatch-nuttx ​contine ​nuttx si apps ca submodule care trebuie ​initializate ​(descarcate) separat.+Repository-ul hectorwatch-nuttx ​conține ​nuttx și apps ca submodule care trebuie ​inițializate ​(descărcate) separat.
 </​note>​ </​note>​
  
 <note important>​ <note important>​
-Pentru a putea rula NuttX, este nevoie ​sa incarcati ​bootloader-ul ​si tabela de partitii in memoria flash a ESP32-ului. Acestea pot fi compilate manual (daca aveti nevoie de modificari ​la bootloader, de exemplu), dar exista si binare precompilate pe care le puteti descarca ​de pe github:+Pentru a putea rula NuttX, este nevoie ​să încărcați ​bootloader-ul ​și tabela de partiții în memoria flash a ESP32-ului. Acestea pot fi compilate manual (dacă aveți ​nevoie de modificări ​la bootloader, de exemplu), dar există și binare precompilate pe care le puteți descărca ​de pe github:
  
 <​code>​ <​code>​
Line 103: Line 101:
 </​code>​ </​code>​
  
-Cu toate acestea, Hectorwatch-nuttx ​contine ​deja binarele precompilate in **esp32s3-bins**.+Cu toate acestea, Hectorwatch-nuttx ​conține ​deja binarele precompilate in **esp32s3-bins**.
 </​note>​ </​note>​
  
 ==== Compilarea și rularea ==== ==== Compilarea și rularea ====
  
-Pentru a configura si compila NuttX, ​folositi urmatoarea secventa ​de comenzi:+Pentru a configura si compila NuttX, ​folosiți următoarea secvență ​de comenzi:
  
 <​code>​ <​code>​
Line 116: Line 114:
 </​code>​ </​code>​
  
-În functie de tipul de placă pe care rulați, este posibil să fie nevoie să apăsați un buton de ''​BOOT''​ (''​IO0''​) atunci când încărcați NuttX. Astfel, placa intră în modul de "​Download"​ - în mod normal, placa este în starea de "​Boot"​. Butonul trebuie apăsat doar atunci când se încearcă stabilirea conexiunii cu firmware-ul de pe ESP32. ​In cazul smartwatch-ului nostru, ​aveti mai jos o poza atasata ​care va arata ce rol are fiecare buton:+În functie de tipul de placă pe care rulați, este posibil să fie nevoie să apăsați un buton de ''​BOOT''​ (''​IO0''​) atunci când încărcați NuttX. Astfel, placa intră în modul de "​Download"​ - în mod normal, placa este în starea de "​Boot"​. Butonul trebuie apăsat doar atunci când se încearcă stabilirea conexiunii cu firmware-ul de pe ESP32. ​În cazul smartwatch-ului nostru, ​aveți ​mai jos o poză atașată ​care vă arată ​ce rol au cele doua butoane disponibile pe carcasa:
  
-{{ :si:laboratoare:​hacktor_buttons.jpg ​|}}+{{ :si:iot2025:​hacktor_buttons.jpg?300 }}
  
-Daca vrem sa incarcam ​NuttX pe un ESP32S3 (microcontroller-ul care sta la baza ceasului nostru), pentru a comuta din "​Boot"​ in "​Download"​ nu este suficient sa apasati ​un singur buton, ci trebuia sa urmati ​secventa ​de operatii: ''​Tineti apasat ​BOOT''​ -> ''​apasati ​RESET **o singura data**''​ -> ''​ridicati ​degetul de pe BOOT''​. Acum puteti sa flash-uiti microcontroller-ul folosind comanda ''​make flash ESPTOOL_PORT=/​dev/​ttyACM0 ESPTOOL_BAUD=115200 ESPTOOL_BINDIR=../​esp32s3-bins''​.+Dacă vrem să încărcăm ​NuttX pe un ESP32S3 (microcontroller-ul care stă la baza ceasului nostru), pentru a comuta din "​Boot"​ in "​Download"​ nu este suficient ​să apăsați un singur buton, ci trebuie să urmați ​secvență ​de operații: ''​Țineți apăsat ​BOOT''​ -> ''​apăsați ​RESET **o singură dată**''​ -> ''​ridicați ​degetul de pe BOOT''​. Acum puteți să flash-uiți microcontroller-ul folosind comanda ''​make flash ESPTOOL_PORT=/​dev/​ttyACM0 ESPTOOL_BAUD=115200 ESPTOOL_BINDIR=../​esp32s3-bins''​.
  
-Dupa ce ati terminat procesul de flash, este nevoie de inca un reset pentru a comuta ​inapoi ​din modul de "​Download"​ in cel de "​Boot"​.+După ce ați terminat procesul de flash, este nevoie de încă ​un reset pentru a comuta ​înapoi ​din modul de "​Download"​ in cel de "​Boot"​.
  
 Pentru a vă conecta la placă veți folosi ''​picocom /​dev/​ttyACM0 -b 115200''​. Pentru a vă conecta la placă veți folosi ''​picocom /​dev/​ttyACM0 -b 115200''​.
  
 <note important>​ <note important>​
-Pentru macOS, folositi ​urmatoarele ​comenzi:+Pentru macOS, folositi ​următoarele ​comenzi:
 <​code>​ <​code>​
 ./​tools/​configure.sh -m hacktorwatch:​usbnsh ./​tools/​configure.sh -m hacktorwatch:​usbnsh
Line 135: Line 133:
 </​code>​ </​code>​
  
-Observati ​flag-ul "​-m" ​si denumirea ​diferita ​a portului usb.+Observați ​flag-ul "​-m" ​și denumirea ​diferită ​a portului usb.
 </​note>​ </​note>​
  
Line 144: Line 142:
 {{ :​si:​iot2025:​nuttx_esp32s3_flash_log.png?​750 |}} {{ :​si:​iot2025:​nuttx_esp32s3_flash_log.png?​750 |}}
  
-În final, ​odata ce va conectati ​la ceas, ar trebui ​sa obtineti ​un log precum cel de mai jos:+În final, ​odată ​ce vă conectați ​la ceas, ar trebui ​să obțineți ​un log precum cel de mai jos:
  
 {{ :​si:​iot2025:​nuttx_esp32s3_picocom.png?​600 }} {{ :​si:​iot2025:​nuttx_esp32s3_picocom.png?​600 }}
Line 155: Line 153:
   * pentru a putea compila "​Hello,​ World!"​ trebuie să activați config-ul ''​CONFIG_EXAMPLES_HELLO''​ folosind ''​make menuconfig''​. Căutarea unui anume config se poate face la fel ca in VIM, folosind ''/''​ urmat de string-ul dorit.   * pentru a putea compila "​Hello,​ World!"​ trebuie să activați config-ul ''​CONFIG_EXAMPLES_HELLO''​ folosind ''​make menuconfig''​. Căutarea unui anume config se poate face la fel ca in VIM, folosind ''/''​ urmat de string-ul dorit.
   * odată compilat și încărcat NuttX, utilizați comanda ''?''​ pentru a vedea cum se poate rula aplicația.   * odată compilat și încărcat NuttX, utilizați comanda ''?''​ pentru a vedea cum se poate rula aplicația.
 +</​note>​
 +
 +**2. (Bonus)** Compilați NuttX pentru plăcile Sparrow folosind config-ul ''​esp32-sparrow-kit:​nsh''​ și nu uitați să ștergeți mai întâi config-ul deja existent pentru hacktorwatch.
 +
 +<note tip>
 +In NuttX, există două operații de clean-up, spre deosebire de Makefile-urile clasice care oferă o singură operație:
 +  * ''​make clean''​ - șterge doar fișierele obiect compilate
 +  * ''​make distclean''​ - șterge orice fișier asociat cu config-ul actual pentru a putea reinițializa sistemul de build de la zero.
 </​note>​ </​note>​
  
Line 161: Line 167:
   * [[https://​en.wikipedia.org/​wiki/​Cross_compiler| What is a cross-compiler?​]]   * [[https://​en.wikipedia.org/​wiki/​Cross_compiler| What is a cross-compiler?​]]
   * [[https://​docs.espressif.com/​projects/​esp-idf/​en/​latest/​esp32/​api-guides/​tools/​idf-tools.html| ESP32 toolchain]]   * [[https://​docs.espressif.com/​projects/​esp-idf/​en/​latest/​esp32/​api-guides/​tools/​idf-tools.html| ESP32 toolchain]]
 +  * [[https://​developer.espressif.com/​blog/​nuttx-adding-porting-an-app/​| Building Applications on NuttX]]
si/iot2025/lab01.1752397911.txt.gz · Last modified: 2025/07/13 12:11 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