
FreeRTOS è un sistema operativo in tempo reale (RTOS) open source e gratuito, progettato per applicazioni embedded e IoT. FreeRTOS offre una serie di vantaggi per lo sviluppo di firmware, tra cui:
In questo articolo, vedremo come sviluppare un firmware per un dispositivo IoT basato su ESP32, una scheda di sviluppo con un SoC (System on a Chip) che integra un microcontrollore, una connessione Wi-Fi e Bluetooth, e vari sensori e periferiche. Il nostro obiettivo sarà quello di creare un dispositivo che misuri la temperatura e l’umidità dell’ambiente e le invii ad Azure IoT Central, una piattaforma cloud che consente di gestire e monitorare i dispositivi IoT.
La prima fase dello sviluppo del firmware è la progettazione, in cui si definiscono le specifiche e le funzionalità del dispositivo, si sceglie l’hardware e il software necessari, e si progetta l’architettura e il flusso del programma.
Per il nostro progetto, abbiamo bisogno di:
Per l’IDE, possiamo usare Visual Studio Code, un editor di codice gratuito e multipiattaforma, che supporta vari linguaggi e strumenti. Per il framework di sviluppo, possiamo usare ESP-IDF, il framework ufficiale di Espressif per ESP32, che include FreeRTOS e diversi componenti e librerie per lo sviluppo di applicazioni IoT.
L’architettura del nostro firmware sarà basata sul modello a task di FreeRTOS, in cui il programma è suddiviso in unità di esecuzione indipendenti e concorrenti, chiamate task, che vengono schedulate dal kernel di FreeRTOS in base alle loro priorità e alle risorse disponibili. Il nostro firmware avrà tre task principali:
Il flusso del nostro firmware sarà il seguente:
La seconda fase dello sviluppo del firmware è l’implementazione, in cui si scrive il codice sorgente, si compila il programma, e si carica il firmware sulla scheda ESP32.
Per scrivere il codice, possiamo seguire i seguenti passi:
Per compilare il programma, possiamo usare il comando ESP-IDF: Build, che eseguirà il tool idf.py e genererà il file binario del firmware. Per caricare il firmware sulla scheda ESP32, possiamo usare il comando ESP-IDF: Flash, che eseguirà il tool esptool.py e trasferirà il file binario sulla memoria flash del SoC. Per monitorare il comportamento del dispositivo, possiamo usare il comando ESP-IDF: Monitor, che aprirà una finestra di terminale e mostrerà i messaggi di log inviati dal firmware.

Questo è il task che si occupa della lettura periodica del sensore di umidità, usando la libreria DHT11 per ESP-IDF. La lettura avviene ogni 5 secondi e i valori letti vengono salvati in 2 variabili apposite.

Nel secondo blocco vi è il task che, una volta collegato ad Azure tramite l'Azure iothub C sdk di Microsoft, pubblica ogni 10s il messaggio contenete i valori delle 2 variabili lette dal sensore

In questo blocco è presente il punto di entrata del codice, ovvero l'app_main(), che si occupa dell'inizializzazione della periferica WiFi, del task di lettura periodica del DHT11 e del task che si collega ad Azure.
La terza fase dello sviluppo del firmware è il test e il debug, in cui si verifica il funzionamento del dispositivo, si individuano e si correggono gli eventuali errori, e si ottimizza il codice e le prestazioni.
Per testare il dispositivo, possiamo usare Azure IoT Central, che ci permetterà di visualizzare i dati inviati dal dispositivo, di inviare comandi e proprietà al dispositivo, e di configurare le regole e le azioni per il monitoraggio e l’analisi dei dati. Per accedere ad Azure IoT Central, possiamo seguire i seguenti passi:
A questo punto, il dispositivo dovrebbe essere connesso ad Azure IoT Central.
L’ultima fase dello sviluppo del firmware è il deploy e il monitoraggio, in cui si distribuisce il firmware sui dispositivi finali, si gestisce il ciclo di vita del firmware, e si monitorano le prestazioni e la sicurezza dei dispositivi.
Per distribuire il firmware sui dispositivi finali, possiamo usare diverse tecniche, come il flashing OTA (Over-The-Air), il provisioning automatico, o il deployment tramite container. Per gestire il ciclo di vita del firmware, possiamo usare Azure IoT Hub, che ci permetterà di creare e gestire i dispositivi, di distribuire il firmware, di monitorare le prestazioni e la sicurezza, e di ricevere gli allarmi e le notifiche in caso di problemi.
Per monitorare le prestazioni e la sicurezza dei dispositivi, possiamo usare Azure Monitor, che ci permetterà di raccogliere e analizzare i dati di telemetria, di visualizzare le metriche e i log, di creare le dashboard e gli alert, e di integrare con altri servizi di monitoraggio e di analisi.
In questo articolo, abbiamo visto come sviluppare un firmware per dispositivi IoT con FreeRTOS, partendo dalla progettazione e arrivando al deploy e al monitoraggio. FreeRTOS offre una soluzione completa e flessibile per lo sviluppo di firmware, che può essere integrata con diversi servizi cloud, come AWS IoT Core e Azure IoT Hub, per creare soluzioni IoT scalabili e sicure.
Leggi ancora


