VIP6(xingyuewang,http://517513.cn) commit si7021 module.
This commit is contained in:
parent
f09f6443d1
commit
0ea9cb9c01
|
@ -0,0 +1,24 @@
|
|||
|
||||
tmr.alarm(0, 60000, 1, function()
|
||||
|
||||
SDA_PIN = 6 -- sda pin, GPIO12
|
||||
SCL_PIN = 5 -- scl pin, GPIO14
|
||||
|
||||
si7021 = require("si7021")
|
||||
si7021.init(SDA_PIN, SCL_PIN)
|
||||
si7021.read(OSS)
|
||||
h = si7021.getHumidity()
|
||||
t = si7021.getTemperature()
|
||||
|
||||
-- pressure in differents units
|
||||
print("Humidity: "..(h / 100).."."..(h % 100).." %")
|
||||
|
||||
-- temperature in degrees Celsius and Farenheit
|
||||
print("Temperature: "..(t/100).."."..(t%100).." deg C")
|
||||
print("Temperature: "..(9 * t / 500 + 32).."."..(9 * t / 50 % 10).." deg F")
|
||||
|
||||
-- release module
|
||||
si7021 = nil
|
||||
package.loaded["si7021"]=nil
|
||||
|
||||
end)
|
|
@ -0,0 +1,41 @@
|
|||
|
||||
--创建一个定时器
|
||||
tmr.alarm(0, 60000, 1, function()
|
||||
|
||||
SDA_PIN = 6 -- sda pin, GPIO12
|
||||
SCL_PIN = 5 -- scl pin, GPIO14
|
||||
|
||||
si7021 = require("si7021")
|
||||
si7021.init(SDA_PIN, SCL_PIN)
|
||||
si7021.read(OSS)
|
||||
Hum = si7021.getHumidity()
|
||||
Temp = si7021.getTemperature()
|
||||
|
||||
--定义数据变量格式
|
||||
PostData = "[{\"Name\":\"T\",\"Value\":\"" .. (Temp/100).."."..(Temp%100) .. "\"},{\"Name\":\"H\",\"Value\":\"" .. (Hum/100).."."..(Hum%100) .. "\"}]"
|
||||
--创建一个TCP连接
|
||||
socket=net.createConnection(net.TCP, 0)
|
||||
--域名解析IP地址并赋值
|
||||
socket:dns("www.lewei50.com", function(conn, ip)
|
||||
ServerIP = ip
|
||||
print("Connection IP:" .. ServerIP)
|
||||
end)
|
||||
--开始连接服务器
|
||||
socket:connect(80, ServerIP)
|
||||
socket:on("connection", function(sck) end)
|
||||
--HTTP请求头定义
|
||||
socket:send("POST /api/V1/gateway/UpdateSensors/yourID HTTP/1.1\r\n" ..
|
||||
"Host: www.lewei50.com\r\n" ..
|
||||
"Content-Length: " .. string.len(PostData) .. "\r\n" ..
|
||||
"userkey: yourKEY\r\n\r\n" ..
|
||||
PostData .. "\r\n")
|
||||
--HTTP响应内容
|
||||
socket:on("receive", function(sck, response)
|
||||
print(response)
|
||||
end)
|
||||
|
||||
-- release module
|
||||
si7021 = nil
|
||||
package.loaded["si7021"]=nil
|
||||
|
||||
end)
|
|
@ -0,0 +1,131 @@
|
|||
# si7021 module
|
||||
|
||||
##Require
|
||||
```lua
|
||||
si7021 = require("si7021")
|
||||
```
|
||||
## Release
|
||||
```lua
|
||||
si7021 = nil
|
||||
package.loaded["si7021"]=nil
|
||||
```
|
||||
<a id="si7021_init"></a>
|
||||
##init()
|
||||
####Description
|
||||
Setting the i2c pin of si7021.<br />
|
||||
|
||||
####Syntax
|
||||
init(sda, scl)
|
||||
|
||||
####Parameters
|
||||
sda: 1~12, IO index.<br />
|
||||
scl: 1~12, IO index.<br />
|
||||
|
||||
####Returns
|
||||
nil
|
||||
|
||||
####Example
|
||||
```lua
|
||||
si7021 = require("si7021")
|
||||
gpio5 = 1
|
||||
gpio4 = 2
|
||||
sda = gpio5
|
||||
scl = gpio4
|
||||
si7021.init(sda, scl)
|
||||
-- Don't forget to release it after use
|
||||
si7021 = nil
|
||||
package.loaded["si7021"]=nil
|
||||
```
|
||||
|
||||
####See also
|
||||
**-** []()
|
||||
|
||||
<a id="si7021_read"></a>
|
||||
##read()
|
||||
####Description
|
||||
Read temperature and humidity from si7021.<br />
|
||||
|
||||
####Syntax
|
||||
read()
|
||||
|
||||
####Parameters
|
||||
nil.<br />
|
||||
|
||||
####Returns
|
||||
nil(Why?).<br />
|
||||
|
||||
####Example
|
||||
```lua
|
||||
si7021 = require("si7021")
|
||||
sda = 1
|
||||
scl = 2
|
||||
si7021.init(sda, scl)
|
||||
r = si7021.read()
|
||||
print(r)
|
||||
-- Don't forget to release it after use
|
||||
si7021 = nil
|
||||
package.loaded["si7021"]=nil
|
||||
```
|
||||
|
||||
####See also
|
||||
**-** []()
|
||||
|
||||
<a id="si7021_getHumidity"></a>
|
||||
##getHumidity()
|
||||
####Description
|
||||
Get humidity from si7021.<br />
|
||||
|
||||
####Syntax
|
||||
getHumidity()
|
||||
|
||||
####Parameters
|
||||
nil.<br />
|
||||
|
||||
####Returns
|
||||
h: Integer, humidity from si7021.
|
||||
|
||||
####Example
|
||||
```lua
|
||||
si7021 = require("si7021")
|
||||
sda = 1
|
||||
scl = 2
|
||||
si7021.init(sda, scl)
|
||||
h = si7021.getHumidity()
|
||||
print(h)
|
||||
-- Don't forget to release it after use
|
||||
si7021 = nil
|
||||
package.loaded["si7021"]=nil
|
||||
```
|
||||
|
||||
####See also
|
||||
**-** []()
|
||||
|
||||
<a id="si7021_getTemperature"></a>
|
||||
##getTemperature()
|
||||
####Description
|
||||
Get temperature from si7021.<br />
|
||||
|
||||
####Syntax
|
||||
getTemperature()
|
||||
|
||||
####Parameters
|
||||
nil.<br />
|
||||
|
||||
####Returns
|
||||
t: Integer, temperature from si7021.
|
||||
|
||||
####Example
|
||||
```lua
|
||||
si7021 = require("si7021")
|
||||
sda = 1
|
||||
scl = 2
|
||||
si7021.init(sda, scl)
|
||||
t = si7021.getTemperature()
|
||||
print(t)
|
||||
-- Don't forget to release it after use
|
||||
si7021 = nil
|
||||
package.loaded["si7021"]=nil
|
||||
```
|
||||
|
||||
####See also
|
||||
**-** []()
|
|
@ -0,0 +1,104 @@
|
|||
-- ***************************************************************************
|
||||
-- SI7021 module for ESP8266 with nodeMCU
|
||||
-- Si7021 compatible tested 2015-1-22
|
||||
--
|
||||
-- Written by VIP6
|
||||
--
|
||||
-- MIT license, http://opensource.org/licenses/MIT
|
||||
-- ***************************************************************************
|
||||
|
||||
local moduleName = ...
|
||||
local M = {}
|
||||
_G[moduleName] = M
|
||||
|
||||
--I2C slave address of Si70xx
|
||||
local Si7021_ADDR = 0x40
|
||||
|
||||
--Commands
|
||||
local CMD_MEASURE_HUMIDITY_HOLD = 0xE5
|
||||
local CMD_MEASURE_HUMIDITY_NO_HOLD = 0xF5
|
||||
local CMD_MEASURE_TEMPERATURE_HOLD = 0xE3
|
||||
local CMD_MEASURE_TEMPERATURE_NO_HOLD = 0xF3
|
||||
|
||||
|
||||
-- temperature and pressure
|
||||
local t,h
|
||||
|
||||
local init = false
|
||||
|
||||
-- i2c interface ID
|
||||
local id = 0
|
||||
|
||||
-- 16-bit two's complement
|
||||
-- value: 16-bit integer
|
||||
local function twoCompl(value)
|
||||
if value > 32767 then value = -(65535 - value + 1)
|
||||
end
|
||||
return value
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- read data from si7021
|
||||
-- ADDR: slave address
|
||||
-- commands: Commands of si7021
|
||||
-- length: bytes to read
|
||||
local function read_data(ADDR, commands, length)
|
||||
i2c.start(id)
|
||||
i2c.address(id, ADDR, i2c.TRANSMITTER)
|
||||
i2c.write(id, commands)
|
||||
i2c.stop(id)
|
||||
i2c.start(id)
|
||||
i2c.address(id, ADDR,i2c.RECEIVER)
|
||||
tmr.delay(20000)
|
||||
c = i2c.read(id, length)
|
||||
i2c.stop(id)
|
||||
return c
|
||||
end
|
||||
|
||||
-- initialize module
|
||||
-- sda: SDA pin
|
||||
-- scl SCL pin
|
||||
function M.init(sda, scl)
|
||||
i2c.setup(id, sda, scl, i2c.SLOW)
|
||||
--print("i2c ok..")
|
||||
init = true
|
||||
end
|
||||
|
||||
-- read humidity from si7021
|
||||
local function read_humi()
|
||||
dataH = read_data(Si7021_ADDR, CMD_MEASURE_HUMIDITY_HOLD, 2)
|
||||
UH = string.byte(dataH, 1) * 256 + string.byte(dataH, 2)
|
||||
h = ((UH*12500+65536/2)/65536 - 600)
|
||||
return(h)
|
||||
end
|
||||
|
||||
-- read temperature from si7021
|
||||
local function read_temp()
|
||||
dataT = read_data(Si7021_ADDR, CMD_MEASURE_TEMPERATURE_HOLD, 2)
|
||||
UT = string.byte(dataT, 1) * 256 + string.byte(dataT, 2)
|
||||
t = ((UT*17572+65536/2)/65536 - 4685)
|
||||
return(t)
|
||||
end
|
||||
|
||||
-- read temperature and humidity from si7021
|
||||
function M.read()
|
||||
if (not init) then
|
||||
print("init() must be called before read.")
|
||||
else
|
||||
read_humi()
|
||||
read_temp()
|
||||
end
|
||||
end;
|
||||
|
||||
-- get humidity
|
||||
function M.getHumidity()
|
||||
return h
|
||||
end
|
||||
|
||||
-- get temperature
|
||||
function M.getTemperature()
|
||||
return t
|
||||
end
|
||||
|
||||
return M
|
Loading…
Reference in New Issue