import machine
import time
import bh1750
import pzem004t
from machine import I2C, Pin, ADC, UART
import spidev
# Configuración I2C para el sensor BH1750
i2c = I2C(1, scl=Pin(5), sda=Pin(4)) # Ajusta los pines según sea necesario
sensor_luz = bh1750.BH1750(i2c)
# Configuración UART para el medidor de energía PZEM-004T
uart = UART(2, baudrate=9600, tx=17, rx=16) # Ajusta los pines según sea necesario
pzem = pzem004t.PZEM004T(uart)
# Configuración SPI para el MCP3008
spi = spidev.SpiDev()
spi.open(0, 0)
spi.max_speed_hz = 1350000
# Función para leer el valor del MCP3008
def read_adc(channel):
if channel > 7 or channel < 0:
return -1
r = spi.xfer2([1, (8 + channel) << 4, 0])
adc_out = ((r[1] & 3) << 8) + r[2]
return adc_out
# Convertir el valor ADC a voltaje (para el ZMPT101B)
def adc_to_voltage(adc_value, Vref=5.0):
return (adc_value * Vref) / 1024.0
# Convertir el valor ADC a corriente (para el ACS712)
def adc_to_current(adc_value, Vref=5.0, sensitivity=0.185):
voltage = (adc_value * Vref) / 1024.0
current = (voltage - (Vref / 2)) / sensitivity
return current
while True:
# Leer del canal 0 del MCP3008 para ZMPT101B (Sensor de Voltaje CA)
adc_value_voltage = read_adc(0)
voltage = adc_to_voltage(adc_value_voltage)
print('Voltage: {:.2f} V'.format(voltage))
# Leer del canal 1 del MCP3008 para ACS712 (Sensor de Corriente)
adc_value_current = read_adc(1)
current = adc_to_current(adc_value_current)
print('Current: {:.2f} A'.format(current))
# Leer los datos del sensor de luz BH1750
lux = sensor_luz.luminance(bh1750.BH1750.ONCE_HIRES_1)
print('Luminance: {} lux'.format(lux))
# Leer los datos del medidor de energía PZEM-004T
voltage_pzem = pzem.read_voltage()
current_pzem = pzem.read_current()
power_pzem = pzem.read_power()
energy_pzem = pzem.read_energy()
print('PZEM Voltage: {} V'.format(voltage_pzem))
print('PZEM Current: {} A'.format(current_pzem))
print('PZEM Power: {} W'.format(power_pzem))
print('PZEM Energy: {} Wh'.format(energy_pzem))
time.sleep(1)