Rendre votre ancienne alimentation électrique contrôlable par smartphone

Ari Mahpour
|  Créé: Février 12, 2024  |  Mise à jour: Juillet 1, 2024
Alimentation électrique Wifi Enabled

J'ai récemment trouvé une vieille Alimentation BK Precision 1787 dans le garage de mon père et, étant le légèrement collectionneur que je suis, je n'ai pas pu résister à l'opportunité de la ramener à la maison pour jouer avec. Comme un jouet abandonné, pendant plus d'un an, cette alimentation est restée dans mon placard, accumulant de la poussière, juste en attendant d'être utilisée. Je l'ai récemment sortie pour découvrir qu'elle avait un port RS-232 sur le panneau arrière :

Figure 1

Figure 1 : 

Je me suis demandé, "pourrais-je réellement contrôler cela en utilisant un câble RS-232 ?" Après une première investigation sur le site web de BK Precision, la documentation originale (datant de plus de 20 ans) indiquait que j'avais besoin d'un kit spécial pour utiliser l'interface PC :

Figure 2

Figure 2 : 

J'étais assez déçu quand je suis tombé sur cet avis et j'ai pensé à jeter tout l'appareil mais j'ai décidé de me lancer dans une petite expérience. Dans cet article, nous allons voir comment j'ai démonté l'alimentation et l'ai transformée en un dispositif contrôlé par IoT où la tension et le courant pouvaient être réglés ou lus via votre téléphone ou tout appareil connecté à Internet. Nous examinerons les commandes UART, l'analyse du bus pour valider la communication série, et la construction d'un serveur API REST sur un Raspberry Pi Pico W pour fournir la capacité IoT de cet équipement.

Le Projet

Plutôt que de considérer l'alimentation comme un déchet électronique, j'ai décidé que je voulais bricoler un peu avec. La plupart des alimentations aujourd'hui peuvent être contrôlées via Série (par ex. UART), USB (généralement en tant que dispositif COM ou USBTMC), et/ou Ethernet (généralement contrôlées via VISA). Cependant, je n'ai pas vu beaucoup d'équipements qui prennent en charge les capacités Wi-Fi. J'imagine que c'est parce que c'est un peu ennuyeux à configurer et que la plupart des concepteurs ou ingénieurs de test ne sont pas vraiment dérangés par une connexion filaire. Mon alimentation était équipée d'un port RS-232 mais rien d'autre. J'ai pensé qu'il serait assez intéressant de lui donner une capacité Wi-Fi avec une interface API REST pour que je puisse la contrôler de n'importe où en utilisant un appareil connecté à Internet.

Le principal problème que j'ai rencontré était mon incapacité à communiquer avec l'alimentation. Comme vous l'avez vu ci-dessus, le manuel indiquait que vous aviez besoin d'un kit propriétaire et d'un logiciel pour utiliser l'interface PC. Ma première tentative de "hacker" l'alimentation a abouti à un échec total. J'ai branché un câble UART RS-232 au port du panneau arrière et commencé à taper des caractères au hasard. J'ai retiré le couvercle et suivi les signaux via le port RS-232 jusqu'à un composant transceiver MAX202C et j'ai observé les signaux TX et RX des deux côtés du composant. Tout ce que j'ai obtenu était un tas de bêtises :

Figure 3

Figure 3 :

Heureusement, les gens chez BK Precision ont été super serviables et m'ont fourni l'ensemble de commandes nécessaire pour contrôler l'alimentation. Ils ont même pu me fournir des captures d'écran avec le logiciel qu'ils utilisaient et tous les réglages UART pour que je puisse confirmer que tout était correctement configuré. Avec leur aide, j'ai pu tester mes commandes et les voir être traitées correctement sur mon oscilloscope également :

Figure 4

Figure 4 : 

Bien que cela semble être une étape superflue, cela m'a aidé à établir une base de référence pour comparer lorsque je connecterais mon Raspberry Pi Pico W directement aux lignes UART. À ce stade, j'ai pu établir une communication correcte et j'étais prêt à commencer à rétrofiter mon alimentation pour en faire un appareil compatible IoT.

Établissement de la communication

Maintenant que j'avais une configuration fonctionnelle en utilisant un câble UART RS-232 USB, je voulais reproduire la même configuration en utilisant un Raspberry Pi Pico W. La plupart de mes projets pour le Raspberry Pi Pico sont écrits en MicroPython (une version plus petite et plus compacte de Python destinée aux microcontrôleurs) donc j'ai décidé d'utiliser la bibliothèque machine.uart. Cela m'a obligé à connecter mes lignes UART/RS-232 aux broches matérielles spécifiques à l'UART. Dans ce cas, j'ai utilisé les GPIO 16 et 17. Après avoir envoyé des commandes sérielles via UART dans mon code MicroPython, j'ai découvert que toutes les données envoyées et reçues étaient corrompues. Le code continuait à signaler que les octets reçus n'étaient même pas des caractères ASCII. Clairement, quelque chose n'allait pas. Pour cette raison spécifique, il était crucial que j'obtienne une capture d'écran d'une configuration fonctionnelle. Immédiatement, j'ai pu déterminer que les signaux étaient devenus inversés au moment où ils arrivaient au dispositif Raspberry Pi Pico. Après avoir réglé le TX et le RX pour inverser (lors de l'instanciation de l'objet de la bibliothèque UART), les données sérielles reçues étaient impeccables.

Il est important de noter que le dispositif Raspberry Pi Pico fonctionne à des niveaux de tension de 3,3V et le BK Precision 1787 (spécifiquement le chip MAX202C qu'il utilise) fonctionne à 5V. Envoyer des signaux de 5V aux broches GPIO du dispositif Raspberry Pi Pico pendant de longues périodes peut endommager les tampons d'entrée du chip. Pour une utilisation à long terme, il est fortement conseillé d'utiliser un convertisseur de niveau pour convertir correctement les niveaux de tension de 3,3V à 5V entre les dispositifs.

Construction du serveur API REST

À ce stade, j'avais établi une communication et écrit une bibliothèque de pilotes qui offrait un contrôle total de mon alimentation électrique via la communication série. L'étape suivante consistait à configurer un serveur web de base et à valider que je serais capable de contrôler mon appareil via le web. Grâce à microdot, j'ai pu prendre un raccourci pour mon API REST et créer un prototype "Hello World" très rapide pour valider que le dispositif Raspberry Pi Pico H pouvait héberger un serveur web pour moi. En plus d'une simple instruction de retour "Hello World", j'ai également confirmé que je pouvais basculer les LED en utilisant des fonctions POST. À ce point, j'étais prêt à intégrer le tout.

 

Mettre tout en œuvre

Pour rendre le code final plus lisible et évolutif, j'ai utilisé des classes dans mon code. Le code orienté objet n'est pas quelque chose de nouveau dans le monde du logiciel mais il est souvent négligé dans les systèmes embarqués. Lors de l'écriture de services web, en particulier ceux qui contrôlent différents éléments matériels, il est important d'abstraire joliment votre code afin que le code matériel détaillé se situe en dehors de l'application principale. Dans mon cas, vous remarquerez dans main.py qu'il y a très peu de code faisant référence à l'alimentation électrique, à part l'appel de fonctions spécifiques telles que le réglage ou la lecture du courant/tension (au lieu de gérer la commande UART réelle dans main.py). Cela permet une vue plus claire de ce qui se passe au niveau de l'application web et abstrait les détails de ce qui se passe au niveau de la communication avec l'appareil.

Dans main.py, je crée deux types de points de terminaison pour contrôler mon alimentation électrique. Un type utilise une méthode POST qui est typiquement utilisée dans l'API REST pour mettre à jour des champs sur un backend vers le serveur (par exemple, insérer une ligne d'une base de données). J'aurais facilement pu utiliser une méthode PUT puisqu'il s'agissait juste d'une valeur unique que je modifiais mais, sans réelle bonne raison, j'ai opté pour POST. C'est à vous de décider, en vérité, quel type de méthode vous aimeriez implémenter dans ce scénario spécifique.

J'ai également créé une route appelée "controller" qui génère un formulaire de soumission très simple où un utilisateur peut régler la tension/le courant et appuyer sur "soumettre", ce qui déclencherait une action POST et activerait le service web pour mettre à jour les réglages de tension/courant sur l'alimentation électrique. C'est là que l'aspect IoT, activé par smartphone, entre en jeu. Réaliser une méthode POST n'est pas très simple à faire depuis votre smartphone ou un navigateur ordinaire. Vous pourriez émettre une méthode GET mais vous finiriez également avec une longue chaîne d'URL. Une manière très simple d'atteindre l'aspect "smartphoness" de votre projet est de déposer un formulaire web de base que n'importe qui peut utiliser depuis n'importe quel appareil. Une fois que vous prenez en charge un formulaire web de base au sein de votre application web (et que vous avez correctement routé le trafic entrant à travers le pare-feu de votre routeur), vous avez, à peu près, démontré que votre code est "activé IoT".

Figure 5

Figure 5 :

Certaines autres fonctionnalités de surveillance de la santé/débogage que j'ai intégrées dans ce projet incluent :

  1. Configurer la LED embarquée pour qu'elle s'allume une fois que tout a été initialisé
  2. Une page « statut » qui démontre que le serveur web est opérationnel
  3. Renvoyer des déclarations via HTTP depuis l'alimentation électrique après avoir émis des commandes vers celle-ci
Figure 6

Figure 6 :

Avoir ces petits extras aide vraiment à transformer un projet de loisir en quelque chose d'un peu plus mature qui peut être diagnostiqué en cas de problèmes.

À ce stade, j'avais réussi à assembler toutes les pièces et je possédais désormais une alimentation électrique à l'ancienne avec une technologie de pointe. « À quelle fin cette alimentation électrique super rétro pourrait-elle servir ? » me suis-je demandé. Eh bien, cette partie, je suis encore en train de la déterminer.


Pour consulter le répertoire complet du code, visitez https://gitlab.com/embedded-designs/rest-api-controlled-power-supply-using-micropython.

A propos de l'auteur

A propos de l'auteur

Ari est un ingénieur doté d'une solide expérience dans la conception, la fabrication, les tests et l'intégration de systèmes électriques, mécaniques et logiciels. Il aime collaborer avec des ingénieurs chargés de la conception, la vérification et les tests afin de favoriser les synergies.

Ressources associées

Documentation technique liée

Retournez à la Page d'Accueil
Thank you, you are now subscribed to updates.