Tengo un sensor de temperatura ADT7410 conectado a un módulo de funcionamiento ESP8266.
El problema que tengo es que solo puedo obtener buenos datos cambiantes después de apagar y encender el ADT7410. Hasta que obtengo una lectura de temperatura fija razonable que no cambia incluso si caliento / enfrío el sensor o 0x0000 (un sensor desconectado da como resultado 0xFFFF). Intenté restablecer el IC a través de I2C, pero no cambia nada.
El sistema consiste en una placa base / placa base. Este esquema muestra las conexiones entre los tableros. Las cosas no relacionadas en la placa base se han eliminado.
¿Cómopodríaresolverestoparaqueeldispositivocomienceafuncionardespuésdeenchufarlaalimentaciónsinagregarunfetparaapagaryencenderlaplacasecundaria?
CódigoluaNodeMCU:
-----------------------Wificonnection-----------------------functionis_connected()print(wifi.sta.status())returnwifi.sta.status()==5endfunctionblock_connected()whilenotis_connected()doprint("Waiting for connection")
tmr.delay(1000000)
end
print("WIFI connected!")
end
------------------
-- I2C & Sensor --
------------------
I2C_ID = 0
I2C_PIN_SDA = 2
I2C_PIN_SCL = 1
I2C_ADDRESS = 0x48
I2C_TEMP_REG_MSB = 0x00
I2C_TEMP_REG_LSB = 0x01
I2C_STATUS_REG = 0x02
I2C_CONF_REG = 0x03
function adt_reset()
i2c.start(I2C_ID)
i2c.address(I2C_ID, 0x00, i2c.TRANSMITTER)
i2c.write(I2C_ID, 0x06)
i2c.stop(I2C_ID)
end
function adt_setup()
i2c.start(I2C_ID)
i2c.address(I2C_ID, I2C_ADDRESS, i2c.TRANSMITTER)
i2c.write(I2C_ID, I2C_CONF_REG)
i2c.write(I2C_ID, 127)
i2c.stop(I2C_ID)
end
function read_reg(id, dev_addr, reg_addr)
i2c.start(id)
i2c.address(id, dev_addr ,i2c.TRANSMITTER)
i2c.write(id,reg_addr)
i2c.start(id)
i2c.address(id, dev_addr,i2c.RECEIVER)
c=i2c.read(id,1)
i2c.stop(id)
return string.byte(c)
end
function get_temp()
msb = read_reg(I2C_ID, I2C_ADDRESS, I2C_TEMP_REG_MSB)
print(msb)
lsb = read_reg(I2C_ID, I2C_ADDRESS, I2C_TEMP_REG_LSB)
print(lsb)
val = bit.lshift(msb, 8) + lsb
if bit.isset(msb, 7) then
return (val - 65536)/128
else
return val/128
end
end
---------------------
-- MQTT Connection --
---------------------
MQTT_HOST = "rabbitmq-sysd.containers.ikioma"
MQTT_PORT = 1883
MQTT_CLIENTID = "temp-" .. node.chipid()
MQTT_KEEPALIVE = 120
MQTT_USER = "guest"
MQTT_PASS = "guest"
MQTT_QOS = 1
MQTT_RETAIN = 0
mqtt_connected = false
m = mqtt.Client(MQTT_CLIENTID, MQTT_KEEPALIVE, MQTT_USER, MQTT_PASS)
function mqtt_connected()
print("MQTT connected")
mqtt_connected = true
m:publish("/connections", MQTT_CLIENTID, MQTT_QOS, MQTT_RETAIN)
end
function mqtt_disconnected()
print("MQTT disconnected")
mqtt_connected = false
end
function mqtt_get_connected()
return mqtt_connected
end
m:lwt("/lwt", MQTT_CLIENTID, MQTT_QOS, MQTT_RETAIN)
m:on("connect", function(con) print ("connected?") end)
m:on("offline", mqtt_disconnected)
mqtt_ip = ""
function mqtt_connect()
m:connect(mqtt_ip, MQTT_PORT, 0, 0, mqtt_connected)
end
function mqtt_connect_with_ip(ip)
mqtt_ip = ip
mqtt_connect()
end
function main_loop()
if mqtt_get_connected() then
m:publish("/" .. MQTT_CLIENTID, get_temp(), MQTT_QOS, MQTT_RETAIN, function(conn) print("sent") end)
if to_advertisement == 0 then
m:publish("/devices", MQTT_CLIENTID, MQTT_QOS, MQTT_RETAIN)
to_advertisement = ADVERTISE_INTERVAL
else
to_advertisement = to_advertisement - 1
end
else
mqtt_connect()
end
end
----------
-- MAIN --
----------
block_connected()
print(wifi.sta.getmac())
print(wifi.sta.getip())
i2c.setup(I2C_ID, I2C_PIN_SDA, I2C_PIN_SCL, i2c.SLOW)
adt_reset()
adt_setup()
sk = net.createConnection(net.TCP, 0)
sk:dns(MQTT_HOST, function(conn, ip) mqtt_connect_with_ip(ip) end)
sk = nil
ADVERTISE_INTERVAL = 10
to_advertisement = 0
-- run "loop" every 10s
tmr.alarm(0, 5000, 1, main_loop)