Arduino supporta il multi-threading?

Alternative e soluzioni

21 Febbraio 2025 di Alessandro Colucci
Multithreading Image

Arduino, di default, non supporta il vero multi-threading come fanno i sistemi operativi come Linux o Windows. Questo perché la maggior parte delle schede Arduino utilizza microcontrollori con processori single-core, privi di un sistema operativo per la gestione dei thread.

Tuttavia, è possibile simulare il multi-threading in diversi modi:

1. Utilizzo di millis() per il multitasking

Invece di usare delay(), è possibile utilizzare la funzione millis() per tenere traccia del tempo ed eseguire più attività in modo apparentemente parallelo. Questo approccio non blocca l'esecuzione del programma e consente di gestire più operazioni basate su intervalli di tempo.

Esempio: https://pastebin.com/SA0uScc6

2. Uso di librerie per la gestione dei task

Alcune librerie permettono di simulare il multi-threading attraverso la pianificazione delle attività. Queste librerie suddividono i compiti in piccoli frammenti ed eseguono ogni attività in sequenza.

    • Scheduler (disponibile per alcune schede Arduino come l’Arduino Due)
    • TaskScheduler, una libreria di terze parti molto diffusa per gestire attività pianificate.

Esempio con TaskScheduler: https://pastebin.com/5t78h234

3. Supporto al multi-threading su ESP32

Se stai utilizzando un ESP32, che ha due core, puoi sfruttare FreeRTOS (incluso nel framework Arduino per ESP32) per implementare un vero multi-threading. FreeRTOS permette di eseguire più task in parallelo su core separati.

Esempio con FreeRTOS su ESP32: https://pastebin.com/h6DbQF5z

Sulle piattaforme come ESP32, FreeRTOS rende possibile il vero multi-threading, migliorando significativamente la gestione delle operazioni in parallelo.

Quale soluzione fa al caso tuo? Proviamole insieme su pleasedontcode.com!

Raggiungici su WhatsApp