Si vous avez utilisé votre Raspberry Pi Pico W pendant très longtemps, il y a de fortes chances pour que vous remarquiez que votre programme ne fonctionne plus.
L’une des raisons pour lesquelles les programmes échouent sur une longue période de temps concerne la fiabilité du Wi-Fi. Si votre Wi-Fi devient peu fiable, le premier réflexe du Pico W est de se planter.
Voyons comment nous pouvons rendre le Pico W plus résistant dans MicroPython.
Qu’est-ce qui cause la fiabilité du Wi-Fi sur le Pico W ?
Votre Wi-Fi se déconnecte plusieurs fois par jour. Il est difficile de le percevoir sur votre téléphone ou votre PC car les systèmes d’exploitation et les logiciels ont pris en compte ce défaut garanti des réseaux Wi-Fi.
Avec le Pico W, un simple script qui se connecte et récupère des données se plante si votre Pico W perd sa connexion. La seule solution est de le réinitialiser en débranchant l’alimentation.
Si votre projet nécessite l’enregistrement de données pendant des heures, vous ne voulez pas avoir à surveiller constamment les pannes.
La gestion des erreurs est la clé pour garantir que votre programme puisse survivre à de mauvaises connexions.
L’amélioration de la puissance du signal Wi-Fi est-elle utile ?
Vous vous demandez peut-être si vous devez utiliser un réseau maillé pour augmenter la puissance du signal. Oui, cela vous aidera, mais pas au point d’éviter les scénarios où la connexion est interrompue.
Dans une expérience, nous avons placé un Pico W au deuxième étage d’une maison et un autre Pico W à côté du routeur Wi-Fi. La différence de résultat est que l’appareil du deuxième étage s’est déconnecté plus tôt que le Pico W situé plus près du routeur. Ce dernier a fini par avoir une connexion interrompue également, comme le montrent les lacunes dans la collecte des données.
Malheureusement, si l’amélioration de la puissance du signal réduit le problème, elle ne le résout pas. Examinons donc quelques méthodes permettant d’écrire du code plus résilient.
Méthode logicielle de connexion et de déconnexion
Si votre projet ne nécessite qu’une communication unidirectionnelle, cette méthode est parfaite. Par exemple, les enregistreurs de température qui doivent fonctionner pendant une longue période mais qui n’enregistrent les données qu’une fois de temps en temps.
Ceci résout le problème des crashs qui se produisent lorsque votre Pico W pense qu’il est connecté, mais lorsqu’il essaie d’envoyer des données à un point de terminaison, il réalise qu’il est hors ligne, puis se plante.
La clé de cette méthode implique une procédure où votre programme tourne dans une boucle infinie. Dans cette boucle, il y a une fonction qui s’exécutera après un certain temps. Cette fonction connectera le Pico W au Wi-Fi, fera son travail (par exemple, envoyer des données à un serveur), puis se déconnectera.
Réinitialisation matérielle du logiciel
L’utilisation du code de réinitialisation dure de MicroPython peut vous aider à vous assurer que votre Pico W fonctionnera même si vous n’intervenez pas. Consultez notre introduction à MicroPython si vous avez besoin d’aide, puis exécutez cette commande :
import machine
machine.reset()
Imaginons que vous perdiez la connexion à minuit pendant que vous dormez. Si vous n’avez pas de logiciel de réinitialisation, vous devrez réinitialiser manuellement le programme le lendemain matin. Cela pourrait entraîner la perte de huit heures d’enregistrement de données.
Si vous disposez d’une réinitialisation matérielle du logiciel, que vous avez placée dans votre bloc de code de traitement des erreurs, le Pico W se réinitialisera de lui-même.
L’inconvénient est que lors d’un hard reset, l’état de votre programme sera perdu et si votre programme se plante, le hard reset logiciel ne se déclenchera pas.
Utiliser la minuterie Watchdog intégrée du Pico W
Un chien de garde matériel est un dispositif qui réinitialise votre Pico W en cas de dysfonctionnement. Les minuteries de chien de garde sont des minuteries à compte à rebours. S’ils reçoivent un signal avant que le compte à rebours n’atteigne zéro, alors le compte à rebours est réinitialisé. Cependant, si le compte à rebours atteint zéro, le Pico W est réinitialisé.
En MicroPython, le code de base est le suivant :
from machine import WDT
wdt = WDT(timeout=1000) #timeout is in ms
wdt.feed() #resets countdown
Vous pouvez consulter la documentation WDT de MicroPython pour en savoir plus, ainsi que la documentation officielle du SDK de Pico pour des conseils sur le C++.
Rendre la connexion de votre Pico W à l’épreuve des bombes
Pour donner à votre Pico W les meilleures chances de fonctionner indéfiniment avec une connexion Wi-Fi, vous devez faire plusieurs choses.
Tout d’abord, assurez-vous que la connexion Wi-Fi est raisonnablement forte. Bien que le code puisse atténuer certains problèmes avec le Wi-Fi, selon la méthode utilisée, il peut parfois entraîner une perte d’état du programme ou de points de données.
Deuxièmement, le programme doit disposer d’une méthode pour récupérer les connexions Wi-Fi interrompues afin que vous puissiez continuer à bénéficier du service.
Avec ces étapes en place, vous pouvez être sûr d’une connectivité plus fiable de votre Pico W.