学习目标:【ESP32-C3 lua】I2C 与 PCF8563实时时钟日历芯片
例如:
- 使用lua语言,ESP32-C3与PCF8563实现I2C通信
学习内容:
1.搭建硬件
- 掌握 lua I2C基本语法
-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "i2c PCF8563 demo"
VERSION = "1.0.0"
-- sys库是标配
sys = require("sys")
local softI2C = i2c.createSoft(0, 1, 110)
local i2caddr = 0xA2
local i2caddr1 =bit.arshift(0XA2,1) --寄存器左移一位
log.info("i2c initial1",i2caddr1) --观察一下地址
sys.taskInit(function()
log.info("i2c initial",softI2C)
--[[设置一次初始时间和日期
i2c.writeReg(softI2C, 0x51, 0x02, string.char(0x02)) --秒
sys.wait(10)
i2c.writeReg(softI2C, 0x51, 0x03, string.char(0x00)) --分
sys.wait(10)
i2c.writeReg(softI2C, 0x51, 0x04,string.char(0x14)) --时
sys.wait(10)
i2c.writeReg(softI2C, 0x51, 0x05,string.char(0x20)) --日期
sys.wait(10)
i2c.writeReg(softI2C, 0x51, 0x06,string.char(0x02)) --星期
sys.wait(10)
i2c.writeReg(softI2C, 0x51, 0x07,string.char(0x02)) --月
sys.wait(10)
i2c.writeReg(softI2C, 0x51, 0x08,string.char(0x24)) --年
sys.wait(10)
--]]
while true do
--i2c.send(softI2C, 0xD6, 0x02) --写A5
local data = i2c.recv(softI2C, 0x51, 1) --读1字节 --无意义
i2c.send(softI2C, 0x51,{0x02}) --写2字节A5 11 --地址51 读地址02
local data1 = i2c.recv(softI2C, 0x51, 1) --读1字节 读1个字节,输出时间 秒 分 时
i2c.send(softI2C, 0x51,{0x03}) --写2字节A5 11 --地址51 读地址03
local data2 = i2c.recv(softI2C, 0x51, 1) --读1字节 读1个字节,输出时间 秒 分 时
i2c.send(softI2C, 0x51,{0x04}) --写2字节A5 11 --地址51 读地址04
local data3 = i2c.recv(softI2C, 0x51, 1) --读1字节 读1个字节,输出时间 秒 分 时
i2c.send(softI2C, 0x51,{0x05}) --写2字节A5 11
local data4 = i2c.recv(softI2C, 0x51, 4) --读1字节 --读 日期 星期 月 年
i2c.send(softI2C, 0x51,{0x09}) --写2字节A5 11
local data5 = i2c.recv(softI2C, 0x51, 4) --读1字节 分钟报警 小时报警 日报警 星期报警 当输出为80的时候最高为置1,表示不启用(看文档第4页)
sys.wait(950)
n1 = string.toHex(data1)
n2 = string.toHex(data2)
n3 = string.toHex(data3)
log.info("i2c initial", n3, n2,n1 )
end
end)
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!