This shows you the differences between two versions of the page.
si:iot2025:lab01 [2025/08/07 20:00] 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 2 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 o 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 o 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 157: | Line 155: | ||
</note> | </note> | ||
- | **2. (Bonus)** Compilati NuttX pentru placile Sparrow folosind config-ul ''esp32-sparrow-kit:nsh'' si nu uitati sa stergeti mai intai config-ul deja existent pentru hacktorwatch. | + | **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> | <note tip> | ||
- | In NuttX, exista doua operatii de clean-up, spre deosebire de Makefile-urile clasice care ofera o singura operatie: | + | In NuttX, există două operații de clean-up, spre deosebire de Makefile-urile clasice care oferă o singură operație: |
- | * ''make clean'' - sterge doar fisierele obiect compilate | + | * ''make clean'' - șterge doar fișierele obiect compilate |
- | * ''make distclean'' - sterge orice fisier asociat cu config-ul actual pentru a putea reinitializa sistemul de build de la zero. | + | * ''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 169: | 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]] |