Strumenti Utente

Strumenti Sito


raspberry:i2c

Il bus I2C e i relativi sensori.
La mia prima esperienza è stata con il sensore INA219 che effettuala misurazione della corrente di un carico.
Diciamo che per cominciare dobbiamo abilitare l'interfaccia I2C

raspi-config

e nel menù interfacce abilitare l'I2C.
riavviare
Poi installare i tools:

apt-get install i2c-tools

Ho fatto un po di ricerca per capire come fare a leggere i valori del sensore tramite il set dei comandi messi a disposizione da i2c-tools, ma non è stata fruttuosa.
Avrei voluto usare il sistema di interazione più a “basso livello” possibile, quindi con la shell bash, ma l'unica cosa utile che ho trovato è stato il sistema di installazione di alcune librerie python
Quindi installare il pyton-pip

apt-get install python-pip python-smbus

poi

pip install pi-ina219

Quindi in sostanza per poter usare questo sensore non ho avuto alternative che usare il python.
Attraverso un apposito script che poi metterò qui su questa esperienza è possibile leggere i valori e poi trattarli.
Il problema succcessivo è poi quello di visualizzare questi valori su di un browser.
Le prime prove molto interessanti sono state fatte con node-red, molto bello ma non è ancora chiaro come salvare il tutto in un futuro ambiente di lavoro quotidiano.
L'altra prova più “a basso livello” (che per me è più controllabile, anche perchè capisco meglio come funziona) è quella di far scrivere allo script python dei file con su i valori e poi questi saranno letti da una semplice pagina web aggiornata ogni secondo od ogni 2, 3 o altro.
Questa pagina web va a leggere, importare i valori non direttamente dal sensore o da una qualche script python ma dai file scritti dallo script python.
Questo script dovrà essere poi messo all'avvio tramite il meccanisco già usato dell'init.d
Di seguito un primo script di prova

ina219.py
from ina219 import INA219, DeviceRangeError
from time import sleep
 
SHUNT_OHMS = 0.1
MAX_EXPECTED_AMPS = 2.0
ina = INA219(SHUNT_OHMS, MAX_EXPECTED_AMPS)
ina.configure(ina.RANGE_16V)
 
def read_ina219():
    try:
        print('Bus Voltage: {0:0.2f}V'.format(ina.voltage()))
        print('Bus Current: {0:0.2f}mA'.format(ina.current()))
        print('Power: {0:0.2f}mW'.format(ina.power()))
        print('Shunt Voltage: {0:0.2f}mV\n'.format(ina.shunt_voltage()))
    except DeviceRangeError as e:
        # Current out of device range with specified shunt resister
        print(e)
 
while 1:
    read_ina219()
    sleep(1)

Di seguito lo stesso script modificato in modo tale da poter andare a scrivere continuamente in un altro file che poi sarà letto dalla pagina web esposta da apache

ina219wr.py
from ina219 import INA219, DeviceRangeError
from time import sleep
 
SHUNT_OHMS = 0.1
MAX_EXPECTED_AMPS = 2.0
ina = INA219(SHUNT_OHMS, MAX_EXPECTED_AMPS)
ina.configure(ina.RANGE_16V)
 
def read_ina219():
    try:
        print('Bus Voltage: {0:0.2f}V'.format(ina.voltage()))
        print('Bus Current: {0:0.2f}mA'.format(ina.current()))
        print('Power: {0:0.2f}mW'.format(ina.power()))
        print('Shunt Voltage: {0:0.2f}mV\n'.format(ina.shunt_voltage()))
        out_file = open("/home/pi/wri", "w")
        out_file.write ('Shunt Voltage: {0:0.2f}mV\n'.format(ina.shunt_voltage()))
        #out_file.write(123ina.power())
        out_file.close()
    except DeviceRangeError as e:
        # Current out of device range with specified shunt resister
        print(e)
 
while 1:
    read_ina219()
    sleep(1)

Ora la pagina in php che si aggiorna automaticamente ogni 2 secondi e che va a leggere il file scritto continuamente dallo script di prima

codice.php
<?php
header("Refresh: 2; url=" . $_SERVER["PHP_SELF"]);
echo "scrivo";
include ("/home/pi/wri");
echo "testo";
?>

Ovviamente con questo sistema è possibile avere una pagina costantemente aggiornata con i dati e i valori di cui ho bisogno.

raspberry/i2c.txt · Ultima modifica: 2023/04/17 14:25 (modifica esterna)