Threads en raspi pico et micropython

Vous avez réalisé ou vous voulez réaliser un truc impensable avec votre Raspberry Pi ? Cet endroit est pour vous...

Modérateur : Francois

TaheenSomosiline
Messages : 6
Enregistré le : lun. 6 nov. 2023 12:09

Re: Threads en raspi pico et micropython

Message par TaheenSomosiline » mer. 3 janv. 2024 05:31

Bonjour,

Oui, il est possible de faire du multithreading en MicroPython. Le module _thread fournit une API simple pour créer et gérer des threads.

Pour partager des données entre les threads, il existe plusieurs méthodes. Une méthode simple consiste à utiliser des variables globales. Cependant, cette méthode peut être risquée, car les threads peuvent accéder aux variables globales de manière non synchronisée, ce qui peut entraîner des erreurs.

Une méthode plus sûre consiste à utiliser des objets Queue. Les objets Queue permettent aux threads d'échanger des données de manière sûre et synchronisée.

Pour votre application, vous pouvez utiliser une Queue pour échanger les données entre le thread qui communique avec l'inclinomètre et le programme principal. Le thread de l'inclinomètre peut ajouter les données à la Queue et le programme principal peut les lire de la Queue.

Voici un exemple de code qui montre comment utiliser une Queue pour partager des données entre des threads :

Python
import _thread

def thread1(queue):
while True:
# Faire quelque chose qui produit des données
data = ...

# Ajouter les données à la queue
queue.put(data)

def thread2():
while True:
# Lire les données de la queue
data = queue.get()

# Faire quelque chose avec les données
...

queue = _thread.Queue()

# Créer les threads
_thread.start_new_thread(thread1, (queue,))
_thread.start_new_thread(thread2, ())

Dans cet exemple, le thread thread1 produit des données et les ajoute à la Queue. Le thread thread2 lit les données de la Queue et les utilise.

Vous pouvez adapter cet exemple à votre application en modifiant les fonctions thread1() et thread2() pour correspondre à vos besoins.

SonopaalFounik

Re: Threads en raspi pico et micropython

Message par SonopaalFounik » jeu. 25 janv. 2024 12:23

Bonjour J. Baillargeat,

Oui, j'ai déjà fait du threading en MicroPython. La documentation est effectivement assez limitée, mais il existe quelques exemples sur le site de MicroPython et sur des forums.

Pour partager des données entre les threads, il existe deux méthodes principales :

Les variables globales : Cette méthode est simple à mettre en œuvre, mais elle n'est pas très efficace car elle peut entraîner des conflits d'accès.
Les objets partagés : Cette méthode est plus efficace que les variables globales, mais elle est plus complexe à mettre en œuvre.
Dans votre cas, je vous recommande d'utiliser une variable globale pour partager les données entre le thread qui communique avec l'inclinomètre et le programme principal.

Voici un exemple de code qui illustre cette méthode :

Python
import machine
import time

# Déclaration de la variable globale
data = []

def read_sensor():
# Communication avec l'inclinomètre
# ...

# Mise à jour de la variable globale
data.append(valeur_inclinomètre)

def main():
# Création du thread
thread = threading.Thread(target=read_sensor)
thread.start()

# Boucle principale
while True:
# Affichage des données
print(data)
time.sleep(1)

if __name__ == "__main__":
main()

Ce code crée un thread appelé read_sensor() qui communique avec l'inclinomètre et met à jour la variable globale data. Le programme principal attend ensuite que le thread se termine et affiche les données.

Bien sûr, vous pouvez adapter ce code à vos besoins spécifiques. Par exemple, vous pouvez utiliser un objet partagé à la place d'une variable globale.

J'espère que cela vous aidera. N'hésitez pas à me contacter si vous avez d'autres questions.

Répondre

Retourner vers « Utilisateurs avancés »