Pour alimenter nos montages par batterie, il faut que l'ESP reste le plus longtemps et le plus souvent possible en DeepSleep et/ou déconnecté du WiFi. Si l'on souhaite de plus commander le tout par MQTT, on se heurte rapidement à une limitation très gênante de la librairie PubSubClient standard ...
Pour recevoir un message envoyé pendant que l'ESP n'est pas connecté, il faut souscrire au topic avec une Quality Of Service >= 1 ... et que la session soit ouverte sans que le drapeau CleanSession ne soit mis.
Malheureusement, si une telle souscription est possible avec la librairie actuelle, cette dernière se reconnecte systématiquement avec
CleanSession=1
ce qui efface tous les documents qui n'ont pas été remis. D'après l'auteur, c'est parce qu'il faudrait conserver l'état des documents non acquittés, mais il n'y a pas de façon "fiable" de le faire. Ce n'est que partiellement vrai :
Heureusement, des forks existent pour corriger cette lacune ...
Actuellement, il semblerait que la seule façon soit d'effacer le répertoire correspondant dans celui des bibliothèques, généralement
~/Arduino/libraries/PubSubClient
cd ~/Arduino/libraries
git clone https://github.com/destroyedlolo/pubsubclient.git
ou inclure le ZIP correspondant dans l'IDE.
IDE qu'il faudra évidemment redémarrer.
Un booléen a été ajouté aux fonctions connect(...) :
Le niveau de QoS est le moins disant entre le client et l'émetteur. Ainsi sur le client demande un QoS de 1 mais que l'émetteur n'envoie qu'un QoS 0, le résultat sera un QoS de 0 et donc non transmis à un ESP endormi.
Visitez : Nos sorties Ski et rando |
Copyright Laurent Faillie
2001-2024
N'oubliez pas d'entrer le mot de passe pour voir aussi les photos perso. |
Contactez moi si vous souhaitez réutiliser ces photos et pour les obtenir avec une plus grande résolution. |
Visites durant les 7 derniers jours au total. |
Vous pouvez
laissez un commentaire
sur cette page.