76 lines
1.8 KiB
Lua
76 lines
1.8 KiB
Lua
|
--------------------------------------------------------------------------------
|
||
|
-- DS3231 I2C module for NODEMCU
|
||
|
-- NODEMCU TEAM
|
||
|
-- LICENCE: http://opensource.org/licenses/MIT
|
||
|
-- Tobie Booth <tbooth@hindbra.in>
|
||
|
--------------------------------------------------------------------------------
|
||
|
|
||
|
local moduleName = ...
|
||
|
local M = {}
|
||
|
_G[moduleName] = M
|
||
|
|
||
|
-- Default value for i2c communication
|
||
|
local id = 0
|
||
|
|
||
|
--device address
|
||
|
local dev_addr = 0x68
|
||
|
|
||
|
local function decToBcd(val)
|
||
|
return((val/10*16) + (val%10))
|
||
|
end
|
||
|
|
||
|
local function bcdToDec(val)
|
||
|
return((val/16*10) + (val%16))
|
||
|
end
|
||
|
|
||
|
-- initialize i2c
|
||
|
--parameters:
|
||
|
--d: sda
|
||
|
--l: scl
|
||
|
function M.init(d, l)
|
||
|
if (d ~= nil) and (l ~= nil) and (d >= 0) and (d <= 11) and (l >= 0) and ( l <= 11) and (d ~= l) then
|
||
|
sda = d
|
||
|
scl = l
|
||
|
else
|
||
|
print("iic config failed!") return nil
|
||
|
end
|
||
|
print("init done")
|
||
|
i2c.setup(id, sda, scl, i2c.SLOW)
|
||
|
end
|
||
|
|
||
|
--get time from DS3231
|
||
|
function M.getTime()
|
||
|
i2c.start(id)
|
||
|
i2c.address(id, dev_addr, i2c.TRANSMITTER)
|
||
|
i2c.write(id, 0x00)
|
||
|
i2c.stop(id)
|
||
|
i2c.start(id)
|
||
|
i2c.address(id, dev_addr, i2c.RECEIVER)
|
||
|
local c=i2c.read(id, 7)
|
||
|
i2c.stop(id)
|
||
|
return bcdToDec(tonumber(string.byte(c, 1))),
|
||
|
bcdToDec(tonumber(string.byte(c, 2))),
|
||
|
bcdToDec(tonumber(string.byte(c, 3))),
|
||
|
bcdToDec(tonumber(string.byte(c, 4))),
|
||
|
bcdToDec(tonumber(string.byte(c, 5))),
|
||
|
bcdToDec(tonumber(string.byte(c, 6))),
|
||
|
bcdToDec(tonumber(string.byte(c, 7)))
|
||
|
end
|
||
|
|
||
|
--set time for DS3231
|
||
|
function M.setTime(second, minute, hour, day, date, month, year)
|
||
|
i2c.start(id)
|
||
|
i2c.address(id, dev_addr, i2c.TRANSMITTER)
|
||
|
i2c.write(id, 0x00)
|
||
|
i2c.write(id, decToBcd(second))
|
||
|
i2c.write(id, decToBcd(minute))
|
||
|
i2c.write(id, decToBcd(hour))
|
||
|
i2c.write(id, decToBcd(day))
|
||
|
i2c.write(id, decToBcd(date))
|
||
|
i2c.write(id, decToBcd(month))
|
||
|
i2c.write(id, decToBcd(year))
|
||
|
i2c.stop(id)
|
||
|
end
|
||
|
|
||
|
return M
|