1 Star 0 Fork 5

liaohuiooooo/合宙luatos ESP32C3 水墨屏网络天气+OLED时钟+ATH10

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
aht10.lua 2.82 KB
一键复制 编辑 原始数据 按行查看 历史
--[[
@module aht10
@summary aht10 驱动
@version 1.0
@date 2022.03.10
@author Dozingfiretruck
@usage
--注意:因使用了sys.wait()所有api需要在协程中使用
-- 用法实例
local aht10 = require "aht10"
i2cid = 0
i2c_speed = i2c.FAST
sys.taskInit(function()
i2c.setup(i2cid,i2c_speed)
aht10.init(i2cid)--初始化,传入i2c_id
while 1 do
local aht10_data = aht10.get_data()
log.info("aht10_data", "aht10_data.RH:"..(aht10_data.RH*100).."%","aht10_data.T"..(aht10_data.T).."℃")
sys.wait(1000)
end
end)
]]
local aht10 = {}
local sys = require "sys"
local i2cid
local AHT10_ADDRESS_ADR_LOW = 0x38
---器件所用地址
local AHT10_INIT = 0xE1 --初始化命令
local AHT10_MEASURE = 0xAC --触发测量命令
local AHT10_SOFT_RESET = 0xBA --软复位命令,软复位所需时间不超过20毫秒.
local AHT10_STATE = 0x71 --状态字.
--[[
aht10初始化
@api aht10.init(i2c_id)
@number i2c_id i2c_id
@return bool 成功返回true
@usage
aht10.init(0)
]]
function aht10.init(i2c_id)
i2cid = i2c_id
sys.wait(40)--40 毫秒等待设备稳定
i2c.send(i2cid, AHT10_ADDRESS_ADR_LOW, AHT10_SOFT_RESET)--软复位
sys.wait(20)
i2c.send(i2cid, AHT10_ADDRESS_ADR_LOW, AHT10_STATE)
local data = i2c.recv(i2cid, AHT10_ADDRESS_ADR_LOW, 1)
local _,state = pack.unpack(data, "b")
if bit.isclear(state,3) then
i2c.send(i2cid, AHT10_ADDRESS_ADR_LOW, {AHT10_INIT,0x08,0x00})--初始化
end
sys.wait(20)
log.info("aht10 init_ok")
return true
end
--获取原始数据
local function aht10_get_raw_data()
local raw_data={Srh=nil,St=nil}
i2c.send(i2cid, AHT10_ADDRESS_ADR_LOW, {AHT10_MEASURE, 0x33, 0x00})
sys.wait(80)--等待80毫秒以上
i2c.send(i2cid, AHT10_ADDRESS_ADR_LOW, AHT10_STATE)
local data = i2c.recv(i2cid, AHT10_ADDRESS_ADR_LOW, 1)
local _,state = pack.unpack(data, "b")
-- if bit.isclear(state,7) then
local data = i2c.recv(i2cid, AHT10_ADDRESS_ADR_LOW, 6)
local _, data1, data2, data3, data4, data5, data6 = pack.unpack(data, "b6")
raw_data.Srh = bit.bor(bit.bor(bit.rshift(data4, 4), bit.lshift(data3, 4)),bit.lshift(data2, 12))
raw_data.St = bit.bor(bit.bor(bit.lshift(bit.band(data4, 0x0f), 16), bit.lshift(data5, 8)), data6)
-- end
return raw_data or 0
end
--[[
获取aht10数据
@api aht10.get_data()
@return table aht10数据
@usage
local aht10_data = aht10.get_data()
log.info("aht10_data", "aht10_data.RH:"..(aht10_data.RH*100).."%","aht10_data.T"..(aht10_data.T).."℃")
]]
function aht10.get_data()
local aht10_data={RH=nil,T=nil}
local raw_data = aht10_get_raw_data()
aht10_data.RH = raw_data.Srh/1048576
aht10_data.T = raw_data.St/1048576*200-50
return aht10_data or 0
end
return aht10
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Lua
1
https://gitee.com/liaohuiooooo/ESP32C3.git
[email protected]:liaohuiooooo/ESP32C3.git
liaohuiooooo
ESP32C3
合宙luatos ESP32C3 水墨屏网络天气+OLED时钟+ATH10
master

搜索帮助