
Firmware paddy
Ceci est le composant du firmware de Paddy, le démon d'administration Power.
Il utilise Arduino C ++ et est conçu autour d'une machine d'état. Il est clignotant directement sur une puce prise en charge. Le type Arduino utilisé pour ce projet est un IoT Nano 33.
Le travail de ce code est d'interfacer avec le courtier Paddy MQTT via Wi-Fi, ou l'application Paddy via Bluetooth Low Energy, pour la configuration et la gestion des erreurs. Le code doit également contrôler le matériel qui fonctionne:
- Bascillation en marche / arrêt du périphérique de chargement
- Mesure de puissance pour le dispositif de charge, avec des statistiques périodiques envoyant.
Diagramme de la machine d'état

Aperçu
Le code de cette machine d'État est organisé avec des composants singleton qui sont instanciés une fois dans le firmware et réutilisés tout au long du cycle de vie du programme. Ces modules sont les suivants:
- BLE: gère la communication directe entre le démon et l'appareil central.
- CONTRÔLE: Allume le périphérique de chargement ou désactiver en fonction de la commande reçue à l'époque.
- MQTT: gère toute la communication avec le courtier et délégue à d'autres composants ou états sur la récupération des messages.
- Puissance: contrôle et calibre le transformateur de courant de mesure de puissance. Fait des lectures périodiques.
- Stockage: émule une puce EEPROM en raison de l'Arduino IoT Nano 33 choisi n'a pas eu de véritable EEPROM. Stocke les informations d'identification nécessaires.
- Wi-Fi: Gire les connexions Wi-Fi et la mesure de la résistance du signal.
Chaque État ayant un devoir prédéfini, il est facile de comprendre ce que fait chaque morceau du flux:
- État de démarrage: c'est l'état initial dans lequel le microcontrôleur entre dès qu'il se démarque. Les vérifications matérielles sont effectuées ici, en particulier le module Wi-Fi et le module Bluetooth à basse énergie. Si ces vérifications sont réussies et que le démon peut initialiser les composants susmentionnés, il se déplace vers l'état d'init. Sinon, il se déplace sur Broken, s'arrêtant là et clignotant une LED indiquant une erreur matérielle à l'utilisateur.
- Init State: L'état init est le premier état intermédiaire que le démon entre. Son objectif est de préparer le dispositif à une fonction appropriée, en étalant tout d'abord le module de mesure de puissance en le faisant parcourir plusieurs fois, habituant les lectures de l'appareil au courant de ligne. Ensuite, il est vérifié si le démon contient des informations d'identification stockées dans son EEPROM émulé ou non. Le démon se déplace sur l'état de connexion avec lesdites informations d'identification si la première est vraie, sinon la phase de configuration est entrée.
- État de configuration: avec son comportement de blocage, cet état ne progressera pas tant que l'action utilisateur ne sera pas terminée. Étant donné que le démon ne contient aucune information d'identification ici, il ne savait pas comment se connecter au Wi-Fi ou au courtier. Cela signifie qu'à ce stade, le démon est incapable d'utiliser le Wi-Fi pour les transferts de données et a besoin d'une approche directe. BLE est parfait pour ce scénario, car l'écriture et la lecture des caractéristiques sont facilement réalisables à partir de l'application Paddy. Par conséquent, les capacités BLE de l'appareil sont utilisées pour émettre ces caractéristiques:
- Serial (en lecture seule): une caractéristique qui émet le numéro de série de l'appareil.
- SSID (écriture-uniquement): l'identifiant de jeu de services pour le réseau Wi-Fi.
- Mot de passe (écriture uniquement): le mot de passe du point d'accès Wi-Fi.
- Nom d'utilisateur d'entreprise (écriture uniquement): Si le Wi-Fi nécessite des techniques d'authentification d'entreprise telles que EAP ou PEAP, le nom d'utilisateur de l'utilisateur.
- Mot de passe d'entreprise (écriture uniquement): Si le Wi-Fi nécessite des techniques d'authentification d'entreprise telles que EAP ou PEAP, le mot de passe de l'utilisateur.
- JWT (écriture uniquement): le jeton Web JSON utilisé par le démon pour se connecter au courtier.
- Réinitialiser (écrire uniquement): Lorsque cette caractéristique est écrite, le démon réinitialise ses références.
Pour continuer, les caractéristiques JWT et les informations d'identification doivent être écrites par l'appareil mobile de l'utilisateur via l'application Paddy. Il convient de noter que pour simplicité, le micrologiciel détecte cette étape telle que terminée uniquement aux caractéristiques SSID. En tant que tels, les écritures peuvent se produire dans n'importe quel ordre, à l'exception de celle du SSID, qui doit être écrite pour durer un comportement prévisible à atteindre. Pour discerner entre les modes d'autorisation, différentes combinaisons de caractéristiques écrites donnent trois configurations en ce qui concerne l'autorisation Wi-Fi: insécurité (SSID uniquement), sécurisé (mot de passe SSID +) et Enterprise (SSID + Enterprise Username + Enterprise Mot de passe).
- État de connexion: cet état est relativement simple, car il ne fonctionne que pendant que le démon se connecte au courtier backend. Sur le succès de la connexion, il remet l'État à celui en ligne et retient l'échec.
- État en ligne: l'état «fonctionnel» du démon, cela représente un coussin entièrement fonctionnel. Ici, il peut interagir avec le courtier en recevant des messages MQTT et en les envoyant. Le démon a quelques tâches alors qu'elle est dans cet état:
- Écoutez les messages MQTT, à savoir sur les sujets ON, OFF, réinitialisent et tournent. Lorsque l'un de ces messages est reçu, il effectue de manière appropriée la bonne action.
- Envoyez des messages de ping Keep-Alive au courtier. Ces messages sont uniquement à des fins statistiques et ne sont pas nécessaires pour maintenir la connexion en vie; Ils sont simplement utilisés pour garder une trace du statut du démon de l'application. Dans la charge utile de ces messages, la force du signal Wi-Fi est relayée.
- Relayez périodiquement les données d'utilisation de l'énergie au courtier.
- Vérifiez si l'appareil est toujours connecté au courtier. Si l'appareil n'est plus connecté, allez à Backoff.
- État de revers: Bien que cet état sert de rembourrage avant les connexions du démon, il s'agit également d'une fenêtre pour l'utilisateur pour réinitialiser le démon via une connexion directe. Par exemple, dans les cas où le démon est déplacé d'un endroit avec une autre connexion Wi-Fi, il a déjà des informations d'identification, mais ils sont incorrects. En tant que tel, lorsque le démon atteint l'état de backoff, il ouvre une fenêtre de 60 secondes dans laquelle l'utilisateur peut le réinitialiser directement via BLE directement. Cependant, si le compteur de 60 secondes s'épuise, le démon se réessayera pour se connecter à nouveau au serveur en se déplaçant à l'état de connexion.
Diagramme de circuit
