Rendere il tuo vecchio alimentatore controllabile tramite smartphone

Ari Mahpour
|  Creato: febbraio 12, 2024  |  Aggiornato: luglio 1, 2024
Alimentatore Abilitato Wifi

Ho recentemente trovato un vecchio Alimentatore BK Precision 1787 nel garage di mio padre e, essendo il leggero accumulatore che sono, non ho potuto resistere alla tentazione di portarlo a casa e giocarci. Come un giocattolo abbandonato, per oltre un anno questo alimentatore è rimasto nel mio armadietto, raccogliendo polvere, in attesa di essere utilizzato. Di recente l'ho tirato fuori solo per scoprire che aveva una porta RS-232 sul pannello posteriore:

Figura 1

Figura 1: 

Mi sono chiesto, "potrei effettivamente controllarlo usando un cavo RS-232?" Dopo un'indagine iniziale sul sito web di BK Precision, la documentazione originale (di oltre 20 anni fa) affermava che avevo bisogno di un kit speciale per poter utilizzare l'interfaccia PC:

Figura 2

Figura 2: 

Ero piuttosto deluso quando ho letto quella nota e ho pensato di buttare via tutto l'apparato, ma ho deciso di impegnarmi in un piccolo esperimento. In questo articolo vedremo come ho smontato l'alimentatore e lo ho trasformato in un dispositivo controllato IoT dove la tensione e la corrente possono essere impostate o lette tramite il telefono o qualsiasi dispositivo connesso a Internet. Esamineremo i comandi UART, l'analisi del bus per validare la comunicazione seriale e la costruzione di un server API REST su un Raspberry Pi Pico W per fornire la capacità IoT di questo pezzo di attrezzatura.

Il Progetto

Invece di considerare l'alimentatore come rifiuto elettronico, ho deciso che volevo smanettarci un po'. La maggior parte degli alimentatori oggi può essere controllata tramite seriale (ad es. UART), USB (solitamente come dispositivo COM o USBTMC) e/o Ethernet (generalmente controllata tramite VISA). Tuttavia, non ho visto molti pezzi di attrezzatura che supportano le capacità Wi-Fi. Immagino che ciò sia perché è un po' fastidioso da configurare e la maggior parte dei progettisti o ingegneri di test non sono davvero infastiditi da una connessione cablata. Il mio alimentatore era dotato di una porta RS-232, ma nient'altro. Ho pensato che sarebbe stato piuttosto interessante dotarlo di capacità Wi-Fi con un front end API REST in modo da poterlo controllare da qualsiasi luogo utilizzando un dispositivo connesso a Internet.

Il principale problema che ho avuto è stata l'impossibilità di comunicare con l'alimentatore. Come avete visto sopra, il manuale affermava che avevate bisogno di un kit proprietario e di un software per utilizzare l'interfaccia PC. Il mio primo tentativo di "hackerare" l'alimentatore si è concluso con un fallimento totale. Ho collegato un cavo UART RS-232 alla porta del pannello posteriore e ho iniziato a digitare caratteri a caso. Ho rimosso il coperchio e tracciato i segnali tramite la porta RS-232 fino a un chip trasmettitore MAX202C e ho esaminato i segnali TX e RX su entrambi i lati del chip. Tutto quello che ho ottenuto è stato un mucchio di spazzatura:

Figura 3

Figura 3:

Fortunatamente, il personale di BK Precision è stato molto disponibile e mi ha fornito il set di comandi necessario per controllare l'alimentatore. Sono stati anche in grado di fornirmi screenshot con il software che stavano utilizzando e tutte le impostazioni UART in modo che potessi confermare di avere tutto configurato correttamente. Con il loro aiuto sono stato in grado di testare i miei comandi e vederli essere elaborati correttamente anche sul mio oscilloscopio:

Figura 4

Figura 4: 

Anche se questo sembra un passaggio superfluo, mi ha aiutato a stabilire una base di confronto per quando avrei collegato direttamente il mio Raspberry Pi Pico W alle linee UART. A questo punto sono stato in grado di stabilire una comunicazione adeguata e ero pronto per iniziare a modificare il mio alimentatore per trasformarlo in un dispositivo abilitato per l'IoT.

Stabilire la comunicazione

Ora che avevo una configurazione funzionante utilizzando un cavo UART RS-232 USB, volevo replicare la stessa configurazione utilizzando un Raspberry Pi Pico W. La maggior parte dei miei progetti per il Raspberry Pi Pico sono scritti in MicroPython (una versione più piccola e compatta di Python destinata ai microcontrollori) quindi ho deciso di utilizzare la libreria machine.uart. Questo mi ha richiesto di collegare le mie linee UART/RS-232 ai pin hardware specifici UART. In questo caso ho usato GPIO 16 e 17. Dopo aver inviato comandi seriali tramite UART all'interno del mio codice MicroPython ho scoperto che tutti i dati inviati e ricevuti erano spazzatura. Il codice continuava a segnalare che i bytecodes ricevuti non erano nemmeno caratteri ASCII. Chiaramente qualcosa non andava. Per questa specifica ragione era critico ottenere una cattura dell'oscilloscopio di una configurazione funzionante. Immediatamente sono stato in grado di determinare che i segnali erano diventati invertiti dal momento in cui arrivavano al dispositivo Raspberry Pi Pico. Dopo aver impostato l'inversione di TX e RX (quando si istanzia l'oggetto della libreria UART) i dati seriali ricevuti erano perfetti.

È importante notare che il dispositivo Raspberry Pi Pico opera a livelli di tensione di 3.3V e il BK Precision 1787 (specificamente il chip MAX202C che utilizza) opera a 5V. Inviare segnali a 5V ai pin GPIO del dispositivo Raspberry Pi Pico per periodi prolungati può danneggiare i buffer di ingresso del chip. Per un uso a lungo termine è vivamente consigliabile utilizzare uno shift di livello per convertire adeguatamente i livelli di tensione da 3.3V a 5V tra i dispositivi.

Costruire il server API REST

A questo punto avevo stabilito la comunicazione e scritto una libreria di driver che forniva il pieno controllo della mia alimentazione tramite comunicazione seriale. Il passo successivo era configurare un server web di base e verificare che sarei stato in grado di controllare il mio dispositivo via web. Grazie a microdot sono riuscito a semplificare la mia API REST e creare un prototipo molto veloce di "Hello World" per confermare che il dispositivo Raspberry Pi Pico H potesse ospitare un server web per me. Oltre a un semplice comando di ritorno "Hello World", ho anche confermato che potevo attivare e disattivare i LED utilizzando funzioni POST. A questo punto ero pronto per integrare tutto.

Mettere tutto insieme

Per rendere il codice finale più leggibile e scalabile, ho utilizzato le classi nel mio codice. Il codice orientato agli oggetti non è una novità nel mondo del software ma è spesso trascurato nei sistemi embedded. Quando si scrivono servizi web, specialmente quelli che controllano diversi pezzi di hardware, è importante astrare bene il codice in modo che il codice hardware dettagliato si trovi al di fuori dell'applicazione principale. Nel mio caso noterete in main.py che c'è molto poco codice che fa riferimento all'alimentazione, eccetto per la chiamata di funzioni specifiche come l'impostazione o la lettura di corrente/tensione (invece di gestire il comando UART effettivo all'interno di main.py). Questo permette una visione più chiara di ciò che sta accadendo a livello di applicazione web e astrae i dettagli di ciò che sta succedendo a livello di comunicazione con il dispositivo.

In main.py creo due tipi diversi di endpoint per controllare la mia alimentazione. Un tipo è usato un metodo POST che è tipicamente usato all'interno dell'API REST per aggiornare i campi su un backend al server (ad es. inserire una riga di un database). Avrei potuto facilmente usare un metodo PUT poiché si trattava solo di un singolo valore che stavo modificando ma, senza un vero motivo valido, ho mantenuto il POST. Sta a voi, in verità, quale tipo di metodo vorreste implementare in questo scenario specifico.

Ho anche creato una rotta chiamata "controller" che genera un modulo di invio molto semplice dove un utente può impostare la tensione/corrente e premere "invia", il che a sua volta, eseguirebbe un'azione POST e attiverebbe il servizio web per aggiornare le impostazioni di tensione/corrente sull'alimentazione. Qui entra in gioco l'aspetto IoT, abilitato per smartphone. Eseguire un metodo POST non è molto semplice da fare dal proprio smartphone o browser comune. Si potrebbe emettere un metodo GET ma si finirebbe anche con una lunga stringa URL. Un modo molto semplice per raggiungere l'aspetto "smartphoness" del vostro progetto è inserire un modulo web di base a cui chiunque può accedere da qualsiasi dispositivo. Una volta che supportate un modulo web di base all'interno della vostra applicazione web (e avete indirizzato correttamente il traffico in entrata attraverso il firewall del router), avete, praticamente, dimostrato che il vostro codice è "abilitato per IoT".

Figura 5

Figura 5:

Alcune altre funzionalità di monitoraggio della salute/debug che ho inserito in questo progetto includono:

  1. Impostare il LED di bordo per accendersi una volta che tutto è stato inizializzato
  2. Una pagina di “stato” che dimostra che il server web è attivo e funzionante
  3. Restituire dichiarazioni tramite HTTP dall'alimentatore dopo aver emesso comandi ad esso
Figura 6

Figura 6:

Avere questi piccoli extra aiuta davvero a trasformare un progetto hobbistico in qualcosa di un po' più maturo che può essere diagnosticato quando si presentano problemi.

A questo punto avevo messo insieme con successo tutti i pezzi e ora possedevo un alimentatore vecchia scuola con tecnologia all'avanguardia. “A quale scopo servirebbe questo super alimentatore retrò?” mi chiedevo. Beh, quella parte sto ancora cercando di capirla.


Per visualizzare l'intero repository del codice visita https://gitlab.com/embedded-designs/rest-api-controlled-power-supply-using-micropython.

Sull'Autore

Sull'Autore

Ari è un ingegnere con una solida esperienza nei campi di progettazione, produzione, collaudo e integrazione di sistemi elettrici, meccanici e software. Ama riunire gli ingegneri addetti alla progettazione, alla verifica e al collaudo e farli lavorare insieme come un'unità affiatata.

Risorse correlate

Documentazione Tecnica Correlata

Tornare alla Pagina Iniziale
Thank you, you are now subscribed to updates.