--- 模块功能:I2C BMP180功能测试. -- @author denghai -- @module i2c.BMP180 -- @license MIT -- @copyright openLuat -- @release 2021.09.22 module(...,package.seeall) -- i2c ID i2cid = 2 -- i2c 速率 speed = 100000 -- 初始化 function init(address) if i2c.setup(i2cid, speed, -1, 1) ~= speed then log.error("i2c", "setup fail", addr) return end addr = address end -- 读取数据 function send(...) sys.wait(10) if not addr then log.info("i2c", "addr err") return end local t = {...} if i2c.send(i2cid, addr, t) ~= #t then log.error("i2c", "send fail", #t) return end return true end -- 发送数据 function read(n) sys.wait(10) if not addr then log.info("i2c", "addr err") return "\x00" end val = i2c.recv(i2cid, addr, n) log.info("read", val:toHex()) if val and #val > 0 then return val end return "\x00" end -- 读取short 值 function short(addr, n) send(addr) if n then f, val = pack.unpack(read(2), ">H") else f, val = pack.unpack(read(2), ">h") end log.info("val", f, val) return f and val or 0 end sys.taskInit(function() sys.wait(8000) init(0x77) send(0xD0) local id = read(1) if "U"~=id then print("error id",id) sys.restart("error i2c id!") return end -- 复位 send(0xE0,0xB6) AC1 = short(0xAA) AC2 = short(0xAC) AC3 = short(0xAE) AC4 = short(0xB0,true) AC5 = short(0xB2,true) AC6 = short(0xB4,true) B1 = short(0xB6) B2 = short(0xB8) MB = short(0xBA) MC = short(0xBC) MD = short(0xBE) while true do sys.wait(2000) -- 温度 ℃ send(0xF4,0x2E) sys.wait(1000) log.info("温度raw", short(0xF6)) UT = short(0xF6) -- 气压 Pa send(0xF4,0x34) sys.wait(1000) send(0xF6) _, UP = pack.unpack(read(2), "