You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
364 lines
13 KiB
364 lines
13 KiB
"""Sample code and test for adafruit_in219"""
|
|
# Reads all voltage and current sensors for two I2C buses
|
|
import time
|
|
import sys
|
|
#import board
|
|
import busio
|
|
from adafruit_extended_bus import ExtendedI2C as I2C
|
|
from adafruit_ina219 import INA219
|
|
from adafruit_ina219 import ADCResolution, BusVoltageRange
|
|
import signal
|
|
|
|
# Don't turn these signal into exceptions, just die.
|
|
# https://stackoverflow.com/questions/26692284/how-to-prevent-brokenpipeerror-when-doing-a-flush-in-python
|
|
signal.signal(signal.SIGINT, signal.SIG_DFL)
|
|
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
|
|
|
|
if __name__ == "__main__":
|
|
# print 'Length: ', len(sys.argv)
|
|
|
|
buses = [1, 3] # default I2C buses
|
|
single = False
|
|
one = two = three = four = five = six = seven = eight = 0
|
|
|
|
if (len(sys.argv)) > 1:
|
|
# print("There are arguments!", file=sys.stderr)
|
|
# if (('a' == sys.argv[1]) or ('afsk' in sys.argv[1])):
|
|
# print(sys.argv[1])
|
|
buses[0] = int(sys.argv[1], base=10)
|
|
if (len(sys.argv)) > 2:
|
|
buses[1] = int(sys.argv[2], base=10)
|
|
if (len(sys.argv)) > 3:
|
|
if sys.argv[3] == "s":
|
|
single = True
|
|
|
|
# print(buses[0])
|
|
# print(buses[1])
|
|
|
|
addresses = [0x40, 0x41, 0x44, 0x45] #INA219 addresses on the bus
|
|
# print("buses: ", buses, " addr: ", addresses, file=sys.stderr)
|
|
|
|
# config
|
|
|
|
# for x in buses:
|
|
# try:
|
|
# i2c_bus = I2C(x) # Device is /dev/i2c-x
|
|
# for y in addresses:
|
|
# print(x,y)
|
|
# try:
|
|
# Create library object using Extended Bus I2C port
|
|
# print("bus: ", x, " addr: ", y)
|
|
# if x == 0 and y == 0x45:
|
|
# print("Reading INA219 in MoPower Board")
|
|
# i2c_bus = I2C(1)
|
|
# ina219 = INA219(i2c_bus, 0x4a)
|
|
# else:
|
|
# ina219 = INA219(i2c_bus, y)
|
|
# print("ina219 test")
|
|
|
|
# print("Configuring")
|
|
# optional : change configuration to use 32 samples averaging for both bus voltage and shunt voltage
|
|
# ina219.bus_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
# ina219.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
# optional : change voltage range to 16V
|
|
# ina219.bus_voltage_range = BusVoltageRange.RANGE_16V
|
|
# except:
|
|
# print("Python Error 2", file=sys.stderr, flush=True)
|
|
# except:
|
|
# print("Python Error 1", file=sys.stderr, flush=True)
|
|
# No try checking yet
|
|
|
|
# if buses[0] == 0 and addresses[0] == 0x45:
|
|
# print("Reading INA219 in MoPower Board")
|
|
# ina219_one = INA219(I2C(1), 0x4a)
|
|
# else:
|
|
if (buses[0] != -1):
|
|
try:
|
|
i2c_one = I2C(buses[0])
|
|
try:
|
|
ina219_one = INA219(i2c_one, addresses[0])
|
|
ina219_one.bus_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_one.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_one.bus_voltage_range = BusVoltageRange.RANGE_16V
|
|
time.sleep(0.01)
|
|
one = 1
|
|
except:
|
|
# print("Python Error 3", file=sys.stderr, flush=True)
|
|
one = 0
|
|
try:
|
|
ina219_two = INA219(i2c_one, addresses[1])
|
|
ina219_two.bus_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_two.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_two.bus_voltage_range = BusVoltageRange.RANGE_16V
|
|
time.sleep(0.01)
|
|
two = 1
|
|
except:
|
|
# print("Python Error 3", file=sys.stderr, flush=True)
|
|
two = 0
|
|
|
|
try:
|
|
ina219_three = INA219(i2c_one, addresses[2])
|
|
ina219_three.bus_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_three.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_three.bus_voltage_range = BusVoltageRange.RANGE_16V
|
|
time.sleep(0.01)
|
|
three = 1
|
|
except:
|
|
# print("Python Error 3", file=sys.stderr, flush=True)
|
|
three = 0
|
|
|
|
try:
|
|
ina219_four= INA219(i2c_one, addresses[3])
|
|
ina219_four.bus_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_four.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_four.bus_voltage_range = BusVoltageRange.RANGE_16V
|
|
time.sleep(0.01)
|
|
four = 1
|
|
except:
|
|
four = 0
|
|
# print("Python Error 3", file=sys.stderr, flush=True)
|
|
except:
|
|
print("Python Error 5", file=sys.stderr, flush=True)
|
|
|
|
if (buses[1] != -1):
|
|
try:
|
|
i2c_two = I2C(buses[1])
|
|
# print(i2c_two)
|
|
try:
|
|
ina219_five = INA219(i2c_two, addresses[0])
|
|
ina219_five.bus_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_five.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_five.bus_voltage_range = BusVoltageRange.RANGE_16V
|
|
time.sleep(0.01)
|
|
five = 1
|
|
except:
|
|
# print("Python Error 3", file=sys.stderr, flush=True)
|
|
five = 0
|
|
try:
|
|
ina219_six = INA219(i2c_two, addresses[1])
|
|
ina219_six.bus_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_six.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_six.bus_voltage_range = BusVoltageRange.RANGE_16V
|
|
time.sleep(0.01)
|
|
six = 1
|
|
except:
|
|
# print("Python Error 3", file=sys.stderr, flush=True)
|
|
six = 0
|
|
try:
|
|
ina219_seven = INA219(i2c_two, addresses[2])
|
|
ina219_seven.bus_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_seven.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_seven.bus_voltage_range = BusVoltageRange.RANGE_16V
|
|
time.sleep(0.01)
|
|
seven = 1
|
|
except:
|
|
# print("Python Error 3", file=sys.stderr, flush=True)
|
|
seven = 0
|
|
try:
|
|
ina219_eight = INA219(i2c_two, addresses[3])
|
|
ina219_eight.bus_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_eight.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_eight.bus_voltage_range = BusVoltageRange.RANGE_16V
|
|
time.sleep(0.01)
|
|
eight = 1
|
|
except:
|
|
# print("Python Error 3", file=sys.stderr, flush=True)
|
|
eight = 0
|
|
except:
|
|
print("Python Error 5", file=sys.stderr, flush=True)
|
|
|
|
while True:
|
|
error = 0
|
|
try:
|
|
time.sleep(0.01)
|
|
print("{:6.3f} ".format(ina219_one.bus_voltage), "{:6.3f} ".format(ina219_one.current) , end = '')
|
|
except:
|
|
|
|
try:
|
|
ina219_one = INA219(i2c_one, addresses[0])
|
|
ina219_one.bus_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_one.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_one.bus_voltage_range = BusVoltageRange.RANGE_16V
|
|
time.sleep(0.01)
|
|
print("{:6.3f} ".format(ina219_one.bus_voltage), "{:6.3f} ".format(ina219_one.current) , end = '')
|
|
error = 1
|
|
|
|
except:
|
|
# print("Python Error 3", file=sys.stderr, flush=True)
|
|
print("{:6.3f} ".format(0), "{:6.3f} ".format(0), end = '')
|
|
|
|
|
|
try:
|
|
time.sleep(0.01)
|
|
print("{:6.3f} ".format(ina219_two.bus_voltage), "{:6.3f} ".format(ina219_two.current) , end = '')
|
|
except:
|
|
|
|
try:
|
|
ina219_two = INA219(i2c_one, addresses[1])
|
|
ina219_two.bus_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_two.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_two.bus_voltage_range = BusVoltageRange.RANGE_16V
|
|
time.sleep(0.01)
|
|
print("{:6.3f} ".format(ina219_two.bus_voltage), "{:6.3f} ".format(ina219_two.current) , end = '')
|
|
error = 1
|
|
|
|
except:
|
|
# print("Python Error 3", file=sys.stderr, flush=True)
|
|
print("{:6.3f} ".format(0), "{:6.3f} ".format(0), end = '')
|
|
|
|
|
|
try:
|
|
time.sleep(0.01)
|
|
print("{:6.3f} ".format(ina219_three.bus_voltage), "{:6.3f} ".format(ina219_three.current) , end = '')
|
|
except:
|
|
|
|
try:
|
|
ina219_three = INA219(i2c_one, addresses[2])
|
|
ina219_three.bus_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_three.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_three.bus_voltage_range = BusVoltageRange.RANGE_16V
|
|
time.sleep(0.01)
|
|
print("{:6.3f} ".format(ina219_three.bus_voltage), "{:6.3f} ".format(ina219_three.current) , end = '')
|
|
error = 1
|
|
|
|
except:
|
|
# print("Python Error 3", file=sys.stderr, flush=True)
|
|
print("{:6.3f} ".format(0), "{:6.3f} ".format(0), end = '')
|
|
|
|
try:
|
|
time.sleep(0.01)
|
|
print("{:6.3f} ".format(ina219_four.bus_voltage), "{:6.3f} ".format(ina219_four.current) , end = '')
|
|
except:
|
|
|
|
try:
|
|
ina219_four= INA219(i2c_one, addresses[3])
|
|
ina219_four.bus_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_four.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_four.bus_voltage_range = BusVoltageRange.RANGE_16V
|
|
time.sleep(0.01)
|
|
print("{:6.3f} ".format(ina219_four.bus_voltage), "{:6.3f} ".format(ina219_four.current) , end = '')
|
|
error = 1
|
|
|
|
except:
|
|
print("{:6.3f} ".format(0), "{:6.3f} ".format(0), end = '')
|
|
|
|
try:
|
|
time.sleep(0.01)
|
|
print("{:6.3f} ".format(ina219_five.bus_voltage), "{:6.3f} ".format(ina219_five.current) , end = '')
|
|
except:
|
|
|
|
try:
|
|
ina219_five = INA219(i2c_two, addresses[0])
|
|
ina219_five.bus_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_five.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_five.bus_voltage_range = BusVoltageRange.RANGE_16V
|
|
time.sleep(0.01)
|
|
print("{:6.3f} ".format(ina219_five.bus_voltage), "{:6.3f} ".format(ina219_five.current) , end = '')
|
|
error = 1
|
|
|
|
except:
|
|
# print("Python Error 3", file=sys.stderr, flush=True)
|
|
print("{:6.3f} ".format(0), "{:6.3f} ".format(0), end = '')
|
|
|
|
try:
|
|
time.sleep(0.01)
|
|
print("{:6.3f} ".format(ina219_six.bus_voltage), "{:6.3f} ".format(ina219_six.current) , end = '')
|
|
except:
|
|
|
|
try:
|
|
ina219_six = INA219(i2c_two, addresses[1])
|
|
ina219_six.bus_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_six.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_six.bus_voltage_range = BusVoltageRange.RANGE_16V
|
|
time.sleep(0.01)
|
|
print("{:6.3f} ".format(ina219_six.bus_voltage), "{:6.3f} ".format(ina219_six.current) , end = '')
|
|
error = 1
|
|
|
|
except:
|
|
# print("Python Error 3", file=sys.stderr, flush=True)
|
|
print("{:6.3f} ".format(0), "{:6.3f} ".format(0), end = '')
|
|
|
|
try:
|
|
time.sleep(0.01)
|
|
print("{:6.3f} ".format(ina219_seven.bus_voltage), "{:6.3f} ".format(ina219_seven.current) , end = '')
|
|
except:
|
|
|
|
try:
|
|
ina219_seven = INA219(i2c_two, addresses[2])
|
|
ina219_seven.bus_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_seven.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_seven.bus_voltage_range = BusVoltageRange.RANGE_16V
|
|
time.sleep(0.01)
|
|
print("{:6.3f} ".format(ina219_seven.bus_voltage), "{:6.3f} ".format(ina219_seven.current) , end = '')
|
|
error = 1
|
|
|
|
except:
|
|
# print("Python Error 3", file=sys.stderr, flush=True)
|
|
print("{:6.3f} ".format(0), "{:6.3f} ".format(0), end = '')
|
|
|
|
try:
|
|
time.sleep(0.01)
|
|
print("{:6.3f} ".format(ina219_eight.bus_voltage), "{:6.3f} ".format(ina219_eight.current), end = '')
|
|
except:
|
|
|
|
try:
|
|
ina219_eight = INA219(i2c_two, addresses[3])
|
|
ina219_eight.bus_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_eight.shunt_adc_resolution = ADCResolution.ADCRES_12BIT_32S # 1S
|
|
time.sleep(0.001)
|
|
ina219_eight.bus_voltage_range = BusVoltageRange.RANGE_16V
|
|
time.sleep(0.01)
|
|
print("{:6.3f} ".format(ina219_eight.bus_voltage), "{:6.3f} ".format(ina219_eight.current), end = '')
|
|
error = 1
|
|
|
|
except:
|
|
# print("Python Error 3", file=sys.stderr, flush=True)
|
|
print("{:6.3f} ".format(0), "{:6.3f} ".format(0), end = '')
|
|
|
|
if (error == 0):
|
|
print(" ")
|
|
else:
|
|
print("Python Error Recovered!")
|
|
|
|
if not single:
|
|
try:
|
|
inp = input()
|
|
# print(inp)
|
|
except:
|
|
print("Python error getting input!")
|
|
else:
|
|
break
|
|
|
|
|