| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- --[[
- @module bh1750
- @summary bh1750 数字型光强度传感器
- @version 1.0
- @date 2022.03.15
- @author Dozingfiretruck
- @usage
- --注意:因使用了sys.wait()所有api需要在协程中使用
- -- 用法实例
- local bh1750 = require "bh1750"
- i2cid = 0
- i2c_speed = i2c.FAST
- sys.taskInit(function()
- i2c.setup(i2cid,i2c_speed)
- bh1750.init(i2cid)--初始化,传入i2c_id
- while 1 do
- local bh1750_data = bh1750.read_light()
- log.info("bh1750_read_light", bh1750_data)
- sys.wait(1000)
- end
- end)
- ]]
- local bh1750 = {}
- local sys = require "sys"
- local i2cid
- local BH1750_ADDRESS_AD0_LOW = 0x23 -- address pin low (GND), default for InvenSense evaluation board
- local BH1750_ADDRESS_AD0_HIGH = 0x24 -- address pin high (VCC)
- local i2cslaveaddr = BH1750_ADDRESS_AD0_LOW
- -- bh1750 registers define
- local BH1750_POWER_DOWN = 0x00 -- power down
- local BH1750_POWER_ON = 0x01 -- power on
- local BH1750_RESET = 0x07 -- reset
- local BH1750_CON_H_RES_MODE = 0x10 -- Continuously H-Resolution Mode
- local BH1750_CON_H_RES_MODE2 = 0x11 -- Continuously H-Resolution Mode2
- local BH1750_CON_L_RES_MODE = 0x13 -- Continuously L-Resolution Mode
- local BH1750_ONE_H_RES_MODE = 0x20 -- One Time H-Resolution Mode
- local BH1750_ONE_H_RES_MODE2 = 0x21 -- One Time H-Resolution Mode2
- local BH1750_ONE_L_RES_MODE = 0x23 -- One Time L-Resolution Mode
- local function i2c_send(data)
- i2c.send(i2cid, i2cslaveaddr, data)
- end
- local function i2c_recv(num)
- local revData = i2c.recv(i2cid, i2cslaveaddr, num)
- return revData
- end
- function bh1750.power_on()
- i2c_send(BH1750_POWER_ON)
- end
- function bh1750.power_down()
- i2c_send(BH1750_POWER_DOWN)
- end
- local function bh1750_set_measure_mode(mode,time)
- i2c_send(BH1750_RESET)
- i2c_send(mode)
- sys.wait(time)
- end
- --[[
- bh1750初始化
- @api bh1750.init(i2c_id)
- @number i2c_id i2c_id
- @return bool 成功返回true
- @usage
- bh1750.init(0)
- ]]
- function bh1750.init(i2c_id)
- i2cid = i2c_id
- bh1750.power_on()
- log.info("bh1750 init_ok")
- return true
- end
- --[[
- 获取bh1750数据
- @api bh1750.get_data()
- @return number 光照强度数据
- @usage
- local bh1750_data = bh1750.read_light()
- log.info("bh1750_read_light", bh1750_data)
- ]]
- function bh1750.read_light()
- bh1750_set_measure_mode(BH1750_CON_H_RES_MODE, 180)
- -- local _,light = pack.unpack(i2c_recv(2),">h") -- 极端情况下数据溢出导致的光照出现负值, 如string.toHex(i2c_recv(2)) == "FFFF"
- local _,light = pack.unpack(i2c_recv(2),">H")
- return light / 1.2
- end
- return bh1750
|