sda = 23 -- pins as on Adafruit Huzzah32 silkscreen scl = 22 id = i2c.HW0 -- hardware interface speed = i2c.SLOW -- values for TCA9534A i2c_addr = 0x3F -- initialize i2c software interface i2c.setup(id, sda, scl, speed) port_input = 0x00 port_output = 0x01 reg_polarity = 0x02 reg_config = 0x03 function write_reg(addr, reg, data, callback) i2c.start(id) i2c.address(id, dev_address, i2c.TRANSMITTER) i2c.write(id, reg, data, true) i2c.stop(id) return i2c.transfer(id, callback, 5000) end function read_reg(dev_address, dev_register, callback) i2c.start(id) i2c.address(id, dev_address, i2c.TRANSMITTER) i2c.write(id, dev_register) i2c.start(id) -- repeated start condition i2c.address(id, dev_address, i2c.RECEIVER) i2c.read(id, 1) i2c.stop(id) return i2c.transfer(id, callback, 5000) end write_reg(i2c_addr, reg_config, 0x00, function(_,_) print("8-mosfet: reg_config done") end) function set_mosfet(value) write_reg(i2c_addr, reg_config, value, function(_,a) print("set mosfet") end) end mosfet_value = 0xFF function publish_status(value) mosfet_value = read_reg(i2c_addr, reg_output) for i = 0,8 do oskar_m:publish("/shannon/kontrol/relay/"..i, bit.band(bit.rshift(mosfet_value, i), 0x1), 0, 0) end end oskar_topichandle["/shannon/kontrol/relay"] = function (client, topic, data) n = tonumber(string.sub(topic, -1)) if n<8 and n>=0 then if data then mosfet_value = bit.band(mosfet_value, bit.lshift(1, n)) else mosfet_value = bit.bor(mosfet_value, bit.bnot(bit.lshift(1, n))) end set_mosfet(mosfet_value) end end