I've modified some code I found in the internet to read a LM75 temperature sensor and want to share my final LUA code with you, hope it is useful for someone!
--USAGE:
--require('lm75')
-- SDA = GPIO0 = 3
-- SCL = GPIO2 = 4
--sda, scl = 3, 4
--lm75:init(sda, scl)
--=lm75:strTemp() ==> 22.5
--=lm75:intTemp() ==> 225
-- ---------------------------------------------------------------
lm75 = {
address = 72, -- A2, A1, A0 = 0
temp_reg = 0,
bus = 0,
init = function (self, sda, scl)
self.bus = 0
i2c.setup(self.bus, sda, scl, i2c.SLOW)
end,
read = function (self)
i2c.start(self.bus)
i2c.address(self.bus, self.address, i2c.TRANSMITTER)
i2c.write(self.bus, self.temp_reg)
i2c.stop(self.bus)
i2c.start(self.bus)
i2c.address(self.bus, self.address, i2c.RECEIVER)
c=i2c.read(self.bus, 2)
i2c.stop(self.bus)
return c
end,
convert = function (self, msb, lsb)
if msb > 127 then msb = msb - 255 end
if lsb > 127 then lsb = 5 else lsb = 0 end
--return msb, bit.band(bit.rshift(lsb, 5), 7)
return msb, lsb
end,
strTemp = function (self)
local h, l
h, l = string.byte(self:read(), 1, 2)
return string.format("%d.%d", self:convert(h, l))
--return string.format("%d.%d", h, l)
end,
intTemp = function (self)
local h, l
h, l = string.byte(self:read(), 1, 2)
return tonumber(string.format("%d%d", self:convert(h, l)))
end
}