Merge pull request #1048 from devsaurus/modules_cleanup

Remove Lua modules with equivalent ones in app/modules.
This commit is contained in:
Marcel Stör 2016-02-15 22:46:23 +01:00
commit e8c89fac19
11 changed files with 19 additions and 1111 deletions

View File

@ -1,101 +0,0 @@
------------------------------------------------------------------------------
-- BMP085 query module
--
-- LICENCE: http://opensource.org/licenses/MIT
-- Vladimir Dronnikov <dronnikov@gmail.com>
-- Heavily based on work of Christee <Christee@nodemcu.com>
--
-- Example:
-- dofile("bmp085.lua").read(sda, scl)
------------------------------------------------------------------------------
local M
do
-- cache
local i2c, tmr = i2c, tmr
-- helpers
local r8 = function(reg)
i2c.start(0)
i2c.address(0, 0x77, i2c.TRANSMITTER)
i2c.write(0, reg)
i2c.stop(0)
i2c.start(0)
i2c.address(0, 0x77, i2c.RECEIVER)
local r = i2c.read(0, 1)
i2c.stop(0)
return r:byte(1)
end
local w8 = function(reg, val)
i2c.start(0)
i2c.address(0, 0x77, i2c.TRANSMITTER)
i2c.write(0, reg)
i2c.write(0, val)
i2c.stop(0)
end
local r16u = function(reg)
return r8(reg) * 256 + r8(reg + 1)
end
local r16 = function(reg)
local r = r16u(reg)
if r > 32767 then r = r - 65536 end
return r
end
-- calibration data
local AC1, AC2, AC3, AC4, AC5, AC6, B1, B2, MB, MC, MD
-- read
local read = function(sda, scl, oss)
i2c.setup(0, sda, scl, i2c.SLOW)
-- cache calibration data
if not AC1 then
AC1 = r16(0xAA)
AC2 = r16(0xAC)
AC3 = r16(0xAE)
AC4 = r16u(0xB0)
AC5 = r16u(0xB2)
AC6 = r16u(0xB4)
B1 = r16(0xB6)
B2 = r16(0xB8)
MB = r16(0xBA)
MC = r16(0xBC)
MD = r16(0xBE)
end
-- get raw P
if not oss then oss = 0 end
if oss <= 0 then oss = 0 end
if oss > 3 then oss = 3 end
w8(0xF4, 0x34 + 64 * oss)
tmr.delay((4 + 3 ^ oss) * 1000)
local p = r8(0xF6) * 65536 + r8(0xF7) * 256 + r8(0xF8)
p = p / 2 ^ (8 - oss)
-- get T
w8(0xF4, 0x2E)
tmr.delay(5000)
local t = r16(0xF6)
local X1 = (t - AC6) * AC5 / 32768
local X2 = MC * 2048 / (X1 + MD)
t = (X2 + X1 + 8) / 16
-- normalize P
local B5 = t * 16 - 8;
local B6 = B5 - 4000
local X1 = B2 * (B6 * B6 / 4096) / 2048
local X2 = AC2 * B6 / 2048
local X3 = X1 + X2
local B3 = ((AC1 * 4 + X3) * 2 ^ oss + 2) / 4
X1 = AC3 * B6 / 8192
X2 = (B1 * (B6 * B6 / 4096)) / 65536
X3 = (X1 + X2 + 2) / 4
local B4 = AC4 * (X3 + 32768) / 32768
local B7 = (p - B3) * (50000 / 2 ^ oss)
p = B7 / B4 * 2
X1 = (p / 256) ^ 2
X1 = (X1 * 3038) / 65536
X2 = (-7357 * p) / 65536
p = p + (X1 + X2 + 3791) / 16
-- Celsius * 10, Hg mm * 10
return t, p * 3 / 40
end
-- expose
M = {
read = read,
}
end
return M

View File

@ -1,84 +0,0 @@
------------------------------------------------------------------------------
-- DHT11/22 query module
--
-- LICENCE: http://opensource.org/licenses/MIT
-- Vladimir Dronnikov <dronnikov@gmail.com>
--
-- Example:
-- print("DHT11", dofile("dht22.lua").read(4))
-- print("DHT22", dofile("dht22.lua").read(4, true))
-- NB: the very first read sometimes fails
------------------------------------------------------------------------------
local M
do
-- cache
local gpio = gpio
local val = gpio.read
local waitus = tmr.delay
--
local read = function(pin, dht22)
-- wait for pin value
local w = function(v)
local c = 255
while c > 0 and val(pin) ~= v do c = c - 1 end
return c
end
-- NB: we preallocate incoming data buffer
-- or precise timing in reader gets broken
local b = { 0, 0, 0, 0, 0 }
-- kick the device
gpio.mode(pin, gpio.INPUT, gpio.PULLUP)
gpio.write(pin, 1)
waitus(10)
gpio.mode(pin, gpio.OUTPUT)
gpio.write(pin, 0)
waitus(20000)
gpio.write(pin, 1)
gpio.mode(pin, gpio.INPUT, gpio.PULLUP)
-- wait for device presense
if w(0) == 0 or w(1) == 0 or w(0) == 0 then
return nil, 0
end
-- receive 5 octets of data, msb first
for i = 1, 5 do
local x = 0
for j = 1, 8 do
x = x + x
if w(1) == 0 then return nil, 1 end
-- 70us for 1, 27 us for 0
waitus(30)
if val(pin) == 1 then
x = x + 1
if w(0) == 0 then return nil, 2 end
end
end
b[i] = x
end
-- check crc. NB: calculating in receiver loop breaks timings
local crc = 0
for i = 1, 4 do
crc = (crc + b[i]) % 256
end
if crc ~= b[5] then return nil, 3 end
-- convert
local t, h
-- DHT22: values in tenths of unit, temperature can be negative
if dht22 then
h = b[1] * 256 + b[2]
t = b[3] * 256 + b[4]
if t > 0x8000 then t = -(t - 0x8000) end
-- DHT11: no negative temperatures, only integers
-- NB: return in 0.1 Celsius
else
h = 10 * b[1]
t = 10 * b[3]
end
return t, h
end
-- expose interface
M = {
read = read,
}
end
return M

View File

@ -0,0 +1,7 @@
Support for this Lua module has been discontinued.
Equivalent functionality is available from the bmp085 module in the NodeMCU
firmware code base. Refer to `docs/en/modules/bmp085.md` for API
documentation.
The original Lua code can be found in the [git repository](https://github.com/nodemcu/nodemcu-firmware/tree/2fbd5ed509964a16057b22e00aa8469d6a522d73/lua_modules/bmp085).

View File

@ -1,166 +0,0 @@
# BMP085 module
##Require
```lua
bmp085 = require("bmp085")
```
## Release
```lua
bmp085 = nil
package.loaded["bmp085"]=nil
```
<a id="bmp085_init"></a>
##init()
####Description
Setting the i2c pin of bmp085.<br />
####Syntax
init(sda, scl)
####Parameters
sda: 1~12, IO index.<br />
scl: 1~12, IO index.<br />
####Returns
nil
####Example
```lua
bmp085 = require("bmp085")
gpio5 = 1
gpio4 = 2
sda = gpio5
scl = gpio4
bmp085.init(sda, scl)
-- Don't forget to release it after use
bmp085 = nil
package.loaded["bmp085"]=nil
```
####See also
**-** []()
<a id="bmp085_getUP"></a>
##getUP()
####Description
Get calibrated data of pressure from bmp085.<br />
####Syntax
getUP(oss)
####Parameters
oss: Over sampling setting, which is 0,1,2,3. Default value is 0.<br />
####Returns
p: Integer, calibrated data of pressure from bmp085.
####Example
```lua
bmp085 = require("bmp085")
sda = 1
scl = 2
bmp085.init(sda, scl)
p = bmp085.getUP(oss)
print(p)
-- Don't forget to release it after use
bmp085 = nil
package.loaded["bmp085"]=nil
```
####See also
**-** []()
<a id="bmp085_getUP_raw"></a>
##getUP_raw()
####Description
Get raw data of pressure from bmp085.<br />
####Syntax
getUP_raw(oss)
####Parameters
oss: Over sampling setting, which is 0,1,2,3. Default value is 0.<br />
####Returns
up_raw: Integer, raw data of pressure from bmp085.
####Example
```lua
bmp085 = require("bmp085")
sda = 1
scl = 2
bmp085.init(sda, scl)
up = bmp085.getUP_raw(oss)
print(up)
-- Don't forget to release it after use
bmp085 = nil
package.loaded["bmp085"]=nil
```
####See also
**-** []()
<a id="bmp085_getUT"></a>
##getUT()
####Description
Get temperature from bmp085.<br />
####Syntax
getUT(num_10x)
####Parameters
num_10x: num_10x: bool value, if true, return number of 0.1 centi-degree. Default value is false, which return a string , eg: 16.7.<br />
####Returns
t: Integer or String, if num_10x is true, return number of 0.1 centi-degree, otherwise return a string.The temperature from bmp085.<br />
####Example
```lua
bmp085 = require("bmp085")
sda = 1
scl = 2
bmp085.init(sda, scl)
-- Get string of temperature.
p = bmp085.getUT(false)
print(p)
-- Get number of temperature.
p = bmp085.getUT(true)
print(p)
-- Don't forget to release it after use
bmp085 = nil
package.loaded["bmp085"]=nil
```
####See also
**-** []()
<a id="bmp085_getAL"></a>
##getAL()
####Description
Get estimated data of altitude from bmp085.<br />
####Syntax
getAL(oss)
####Parameters
oss: over sampling setting, which is 0,1,2,3. Default value is 0.<br />
####Returns
e: Integer, estimated data of altitude. Altitudi can be calculated by pressure refer to sea level pressure, which is 101325. Pressure changes 100pa corresponds to 8.43m at sea level<br />
####Example
```lua
bmp085 = require("bmp085")
sda = 1
scl = 2
bmp085.init(sda, scl)
-- Get string of temperature.
e = bmp085.getAL()
print(p)
-- Don't forget to release it after use
bmp085 = nil
package.loaded["bmp085"]=nil
```
####See also
**-** []()

View File

@ -1,158 +0,0 @@
--------------------------------------------------------------------------------
-- BMP085 I2C module for NODEMCU
-- NODEMCU TEAM
-- LICENCE: http://opensource.org/licenses/MIT
-- Christee <Christee@nodemcu.com>
--------------------------------------------------------------------------------
local moduleName = ...
local M = {}
_G[moduleName] = M
--default value for i2c communication
local id=0
--default oversampling setting
local oss = 0
--CO: calibration coefficients table.
local CO = {}
-- read reg for 1 byte
local function read_reg(dev_addr, reg_addr)
i2c.start(id)
i2c.address(id, dev_addr ,i2c.TRANSMITTER)
i2c.write(id,reg_addr)
i2c.stop(id)
i2c.start(id)
i2c.address(id, dev_addr,i2c.RECEIVER)
local c=i2c.read(id,1)
i2c.stop(id)
return c
end
--write reg for 1 byte
local function write_reg(dev_addr, reg_addr, reg_val)
i2c.start(id)
i2c.address(id, dev_addr, i2c.TRANSMITTER)
i2c.write(id, reg_addr)
i2c.write(id, reg_val)
i2c.stop(id)
end
--get signed or unsigned 16
--parameters:
--reg_addr: start address of short
--signed: if true, return signed16
local function getShort(reg_addr, signed)
local tH = string.byte(read_reg(0x77, reg_addr))
local tL = string.byte(read_reg(0x77, (reg_addr + 1)))
local temp = tH*256 + tL
if (temp > 32767) and (signed == true) then
temp = temp - 65536
end
return temp
end
-- initialize i2c
--parameters:
--d: sda
--l: scl
function M.init(d, l)
if (d ~= nil) and (l ~= nil) and (d >= 0) and (d <= 11) and (l >= 0) and ( l <= 11) and (d ~= l) then
sda = d
scl = l
else
print("iic config failed!") return nil
end
print("init done")
i2c.setup(id, sda, scl, i2c.SLOW)
--get calibration coefficients.
CO.AC1 = getShort(0xAA, true)
CO.AC2 = getShort(0xAC, true)
CO.AC3 = getShort(0xAE, true)
CO.AC4 = getShort(0xB0)
CO.AC5 = getShort(0xB2)
CO.AC6 = getShort(0xB4)
CO.B1 = getShort(0xB6, true)
CO.B2 = getShort(0xB8, true)
CO.MB = getShort(0xBA, true)
CO.MC = getShort(0xBC, true)
CO.MD = getShort(0xBE, true)
end
--get temperature from bmp085
--parameters:
--num_10x: bool value, if true, return number of 0.1 centi-degree
-- default value is false, which return a string , eg: 16.7
function M.getUT(num_10x)
write_reg(0x77, 0xF4, 0x2E);
tmr.delay(10000);
local temp = getShort(0xF6)
local X1 = (temp - CO.AC6) * CO.AC5 / 32768
local X2 = CO.MC * 2048/(X1 + CO.MD)
local r = (X2 + X1 + 8)/16
if(num_10x == true) then
return r
else
return ((r/10).."."..(r%10))
end
end
--get raw data of pressure from bmp085
--parameters:
--oss: over sampling setting, which is 0,1,2,3. Default value is 0
function M.getUP_raw(oss)
local os = 0
if ((oss == 0) or (oss == 1) or (oss == 2) or (oss == 3)) and (oss ~= nil) then
os = oss
end
local ov = os * 64
write_reg(0x77, 0xF4, (0x34 + ov));
tmr.delay(30000);
--delay 30ms, according to bmp085 document, wait time are:
-- 4.5ms 7.5ms 13.5ms 25.5ms respectively according to oss 0,1,2,3
local MSB = string.byte(read_reg(0x77, 0xF6))
local LSB = string.byte(read_reg(0x77, 0xF7))
local XLSB = string.byte(read_reg(0x77, 0xF8))
local up_raw = (MSB*65536 + LSB *256 + XLSB)/2^(8 - os)
return up_raw
end
--get calibrated data of pressure from bmp085
--parameters:
--oss: over sampling setting, which is 0,1,2,3. Default value is 0
function M.getUP(oss)
local os = 0
if ((oss == 0) or (oss == 1) or (oss == 2) or (oss == 3)) and (oss ~= nil) then
os = oss
end
local raw = M.getUP_raw(os)
local B5 = M.getUT(true) * 16 - 8;
local B6 = B5 - 4000
local X1 = CO.B2 * (B6 * B6 /4096)/2048
local X2 = CO.AC2 * B6 / 2048
local X3 = X1 + X2
local B3 = ((CO.AC1*4 + X3)*2^os + 2)/4
X1 = CO.AC3 * B6 /8192
X2 = (CO.B1 * (B6 * B6 / 4096))/65536
X3 = (X1 + X2 + 2)/4
local B4 = CO.AC4 * (X3 + 32768) / 32768
local B7 = (raw -B3) * (50000/2^os)
local p = B7/B4 * 2
X1 = (p/256)^2
X1 = (X1 *3038)/65536
X2 = (-7357 *p)/65536
p = p +(X1 + X2 + 3791)/16
return p
end
--get estimated data of altitude from bmp085
--parameters:
--oss: over sampling setting, which is 0,1,2,3. Default value is 0
function M.getAL(oss)
--Altitudi can be calculated by pressure refer to sea level pressure, which is 101325
--pressure changes 100pa corresponds to 8.43m at sea level
return (M.getUP(oss) - 101325)*843/10000
end
return M

View File

@ -1,89 +1,7 @@
# DHTxx module Support for this Lua module has been discontinued.
This module is compatible with DHT11, DHT21 and DHT22. Equivalent functionality is available from the dht module in the NodeMCU
And is able to auto-select wheather you are using DHT11 or DHT2x firmware code base. Refer to `docs/en/modules/dht.md` for API
documentation.
No need to use a resistor to connect the pin data of DHT22 to ESP8266. The original Lua code can be found in the [git repository](https://github.com/nodemcu/nodemcu-firmware/tree/2fbd5ed509964a16057b22e00aa8469d6a522d73/lua_modules/dht_lib).
##Integer Verison[When using DHT11, Float version is useless...]
### Example
```lua
PIN = 4 -- data pin, GPIO2
DHT= require("dht_lib")
DHT.read(PIN)
t = DHT.getTemperature()
h = DHT.getHumidity()
if h == nil then
print("Error reading from DHTxx")
else
-- temperature in degrees Celsius and Farenheit
print("Temperature: "..((t-(t % 10)) / 10).."."..(t % 10).." deg C")
print("Temperature: "..(9 * t / 50 + 32).."."..(9 * t / 5 % 10).." deg F")
-- humidity
print("Humidity: "..((h - (h % 10)) / 10).."."..(h % 10).."%")
end
-- release module
DHT = nil
package.loaded["dht_lib"]=nil
```
##Float Verison
###Example
```lua
PIN = 4 -- data pin, GPIO2
DHT= require("dht_lib")
DHT.read(PIN)
t = DHT.getTemperature()
h = DHT.getHumidity()
if h == nil then
print("Error reading from DHT11/22")
else
-- temperature in degrees Celsius and Farenheit
-- floating point and integer version:
print("Temperature: "..(t/10).." deg C")
print("Temperature: "..(9 * t / 50 + 32).." deg F")
-- humidity
print("Humidity: "..(h/10).."%")
end
-- release module
DHT = nil
package.loaded["dht_lib"]=nil
```
## Functions
###read
read(pin)
Read humidity and temperature from DHTxx(11,21,22...).
**Parameters:**
* pin - ESP8266 pin connect to data pin
### getHumidity
getHumidity()
Returns the humidity of the last reading.
**Returns:**
* last humidity reading in per thousand
### getTemperature
getTemperature()
Returns the temperature of the last reading.
**Returns:**
* last temperature reading in(dht22) 0.1ºC (dht11)1ºC
*

View File

@ -1,178 +0,0 @@
-- ***************************************************************************
-- DHTxx(11,21,22) module for ESP8266 with nodeMCU
--
-- Written by Javier Yanez mod by Martin
-- but based on a script of Pigs Fly from ESP8266.com forum
--
-- MIT license, http://opensource.org/licenses/MIT
-- ***************************************************************************
--Support list
--DHT11 Tested
--DHT21 Not Test yet
--DHT22(AM2302) Tested
--AM2320 Not Test yet
--Output format-> Real temperature times 10(or DHT22 will miss it float part in Int Version)
--==========================Module Part======================
local moduleName = ...
local M = {}
_G[moduleName] = M
--==========================Local the UMI and TEMP===========
local humidity
local temperature
--==========================Local the bitStream==============
local bitStream = {}
---------------------------Read bitStream from DHTXX--------------------------
local function read(pin)
local bitlength = 0
humidity = 0
temperature = 0
-- Use Markus Gritsch trick to speed up read/write on GPIO
local gpio_read = gpio.read
for j = 1, 40, 1 do
bitStream[j] = 0
end
-- Step 1: send out start signal to DHT22
gpio.mode(pin, gpio.OUTPUT)
gpio.write(pin, gpio.HIGH)
tmr.delay(100)
gpio.write(pin, gpio.LOW)
tmr.delay(20000)
gpio.write(pin, gpio.HIGH)
gpio.mode(pin, gpio.INPUT)
-- Step 2: Receive bitStream from DHT11/22
-- bus will always let up eventually, don't bother with timeout
while (gpio_read(pin) == 0 ) do end
local c=0
while (gpio_read(pin) == 1 and c < 500) do c = c + 1 end
-- bus will always let up eventually, don't bother with timeout
while (gpio_read(pin) == 0 ) do end
c=0
while (gpio_read(pin) == 1 and c < 500) do c = c + 1 end
-- Step 3: DHT22 send data
for j = 1, 40, 1 do
while (gpio_read(pin) == 1 and bitlength < 10 ) do
bitlength = bitlength + 1
end
bitStream[j] = bitlength
bitlength = 0
-- bus will always let up eventually, don't bother with timeout
while (gpio_read(pin) == 0) do end
end
end
---------------------------Check out the data--------------------------
----Auto Select the DHT11/DHT22 By check the byte[1] && byte[3] -------
---------------Which is empty when using DHT11-------------------------
function M.read(pin)
read(pin)
local byte_0 = 0
local byte_1 = 0
local byte_2 = 0
local byte_3 = 0
local byte_4 = 0
for i = 1, 8, 1 do -- Byte[0]
if (bitStream[i] > 3) then
byte_0 = byte_0 + 2 ^ (8 - i)
end
end
for i = 1, 8, 1 do -- Byte[1]
if (bitStream[i+8] > 3) then
byte_1 = byte_1 + 2 ^ (8 - i)
end
end
for i = 1, 8, 1 do -- Byte[2]
if (bitStream[i+16] > 3) then
byte_2 = byte_2 + 2 ^ (8 - i)
end
end
for i = 1, 8, 1 do -- Byte[3]
if (bitStream[i+24] > 3) then
byte_2 = byte_2 + 2 ^ (8 - i)
end
end
for i = 1, 8, 1 do -- Byte[4]
if (bitStream[i+32] > 3) then
byte_4 = byte_4 + 2 ^ (8 - i)
end
end
if byte_1==0 and byte_3 == 0 then
---------------------------Convert the bitStream into Number through DHT11's Way--------------------------
--As for DHT11 40Bit is consisit of 5Bytes
--First byte->Humidity Data's Int part
--Sencond byte->Humidity Data's Float Part(Which should be empty)
--Third byte->Temp Data;s Intpart
--Forth byte->Temp Data's Float Part(Which should be empty)
--Fifth byte->SUM Byte, Humi+Temp
if(byte_4 ~= byte_0+byte_2) then
humidity = nil
temperature = nil
else
humidity = byte_0 *10 -- In order to universe with the DHT22
temperature = byte_2 *10
end
else ---------------------------Convert the bitStream into Number through DHT22's Way--------------------------
--As for DHT22 40Bit is consisit of 5Bytes
--First byte->Humidity Data's High Bit
--Sencond byte->Humidity Data's Low Bit(And if over 0x8000, use complement)
--Third byte->Temp Data's High Bit
--Forth byte->Temp Data's Low Bit
--Fifth byte->SUM Byte
humidity = byte_0 * 256 + byte_1
temperature = byte_2 * 256 + byte_3
checksum = byte_4
checksumTest = (bit.band(humidity, 0xFF) + bit.rshift(humidity, 8) + bit.band(temperature, 0xFF) + bit.rshift(temperature, 8))
checksumTest = bit.band(checksumTest, 0xFF)
if temperature > 0x8000 then
-- convert to negative format
temperature = -(temperature - 0x8000)
end
-- conditions compatible con float point and integer
if (checksumTest - checksum >= 1) or (checksum - checksumTest >= 1) then
humidity = nil
end
end
byte_0 = nil
byte_1 = nil
byte_2 = nil
byte_3 = nil
byte_4 = nil
end
--------------API for geting the data out------------------
function M.getTemperature()
return temperature
end
function M.getHumidity()
return humidity
end
-------------Return Index------------------------------------
return M

View File

@ -0,0 +1,7 @@
Support for this Lua module has been discontinued.
Equivalent functionality is available from the dht module in the NodeMCU
firmware code base. Refer to `docs/en/modules/tsl2561.md` for API
documentation.
The original Lua code can be found in the [git repository](https://github.com/nodemcu/nodemcu-firmware/tree/2fbd5ed509964a16057b22e00aa8469d6a522d73/lua_modules/tsl2561).

View File

@ -1,240 +0,0 @@
-- ***************************************************************************
-- tsl2561.lua
-- Module for ESP8266 with nodeMCU
-- Ported from github.com/Seeed-Studio/Grove_Digital_Light_Sensor
--
-- Copyright (c) 2012 seeed technology inc.
-- Website : www.seeed.cc
-- Author : zhangkun
-- Create Time:
-- Change Log : 2015-07-21: Ported original code to Lua
-- by Marius Schmeding (skybus.io)
--
-- MIT License, http://opensource.org/licenses/MIT
-- ***************************************************************************
local TSL2561_Control = 0x80
local TSL2561_Timing = 0x81
local TSL2561_Interrupt = 0x86
local TSL2561_Channel0L = 0x8C
local TSL2561_Channel0H = 0x8D
local TSL2561_Channel1L = 0x8E
local TSL2561_Channel1H = 0x8F
local TSL2561_Address = 0x29 -- device address
local LUX_SCALE = 14 -- scale by 2^14
local RATIO_SCALE = 9 -- scale ratio by 2^9
local CH_SCALE = 10 -- scale channel values by 2^10
local CHSCALE_TINT0 = 0x7517 -- 322/11 * 2^CH_SCALE
local CHSCALE_TINT1 = 0x0fe7 -- 322/81 * 2^CH_SCALE
-- Scale table
local S = {}
S.K1T = 0x0040 -- 0.125 * 2^RATIO_SCALE
S.B1T = 0x01f2 -- 0.0304 * 2^LUX_SCALE
S.M1T = 0x01be -- 0.0272 * 2^LUX_SCALE
S.K2T = 0x0080 -- 0.250 * 2^RATIO_SCA
S.B2T = 0x0214 -- 0.0325 * 2^LUX_SCALE
S.M2T = 0x02d1 -- 0.0440 * 2^LUX_SCALE
S.K3T = 0x00c0 -- 0.375 * 2^RATIO_SCALE
S.B3T = 0x023f -- 0.0351 * 2^LUX_SCALE
S.M3T = 0x037b -- 0.0544 * 2^LUX_SCALE
S.K4T = 0x0100 -- 0.50 * 2^RATIO_SCALE
S.B4T = 0x0270 -- 0.0381 * 2^LUX_SCALE
S.M4T = 0x03fe -- 0.0624 * 2^LUX_SCALE
S.K5T = 0x0138 -- 0.61 * 2^RATIO_SCALE
S.B5T = 0x016f -- 0.0224 * 2^LUX_SCALE
S.M5T = 0x01fc -- 0.0310 * 2^LUX_SCALE
S.K6T = 0x019a -- 0.80 * 2^RATIO_SCALE
S.B6T = 0x00d2 -- 0.0128 * 2^LUX_SCALE
S.M6T = 0x00fb -- 0.0153 * 2^LUX_SCALE
S.K7T = 0x029a -- 1.3 * 2^RATIO_SCALE
S.B7T = 0x0018 -- 0.00146 * 2^LUX_SCALE
S.M7T = 0x0012 -- 0.00112 * 2^LUX_SCALE
S.K8T = 0x029a -- 1.3 * 2^RATIO_SCALE
S.B8T = 0x0000 -- 0.000 * 2^LUX_SCALE
S.M8T = 0x0000 -- 0.000 * 2^LUX_SCALE
S.K1C = 0x0043 -- 0.130 * 2^RATIO_SCALE
S.B1C = 0x0204 -- 0.0315 * 2^LUX_SCALE
S.M1C = 0x01ad -- 0.0262 * 2^LUX_SCALE
S.K2C = 0x0085 -- 0.260 * 2^RATIO_SCALE
S.B2C = 0x0228 -- 0.0337 * 2^LUX_SCALE
S.M2C = 0x02c1 -- 0.0430 * 2^LUX_SCALE
S.K3C = 0x00c8 -- 0.390 * 2^RATIO_SCALE
S.B3C = 0x0253 -- 0.0363 * 2^LUX_SCALE
S.M3C = 0x0363 -- 0.0529 * 2^LUX_SCALE
S.K4C = 0x010a -- 0.520 * 2^RATIO_SCALE
S.B4C = 0x0282 -- 0.0392 * 2^LUX_SCALE
S.M4C = 0x03df -- 0.0605 * 2^LUX_SCALE
S.K5C = 0x014d -- 0.65 * 2^RATIO_SCALE
S.B5C = 0x0177 -- 0.0229 * 2^LUX_SCALE
S.M5C = 0x01dd -- 0.0291 * 2^LUX_SCALE
S.K6C = 0x019a -- 0.80 * 2^RATIO_SCALE
S.B6C = 0x0101 -- 0.0157 * 2^LUX_SCALE
S.M6C = 0x0127 -- 0.0180 * 2^LUX_SCALE
S.K7C = 0x029a -- 1.3 * 2^RATIO_SCALE
S.B7C = 0x0037 -- 0.00338 * 2^LUX_SCALE
S.M7C = 0x002b -- 0.00260 * 2^LUX_SCALE
S.K8C = 0x029a -- 1.3 * 2^RATIO_SCALE
S.B8C = 0x0000 -- 0.000 * 2^LUX_SCALE
S.M8C = 0x0000 -- 0.000 * 2^LUX_SCALE
local moduleName = ...
local M = {}
_G[moduleName] = M
-- i2c interface ID
local id = 0
-- local vars
local ch0,ch1,chScale,channel1,channel0,ratio1,b,m,temp,lux = 0
-- Wrapping I2C functions to retain original calls
local Wire = {}
function Wire.beginTransmission(ADDR)
i2c.start(id)
i2c.address(id, ADDR, i2c.TRANSMITTER)
end
function Wire.write(commands)
i2c.write(id, commands)
end
function Wire.endTransmission()
i2c.stop(id)
end
function Wire.requestFrom(ADDR, length)
i2c.start(id)
i2c.address(id, ADDR,i2c.RECEIVER)
c = i2c.read(id, length)
i2c.stop(id)
return string.byte(c)
end
local function readRegister(deviceAddress, address)
Wire.beginTransmission(deviceAddress)
Wire.write(address) -- register to read
Wire.endTransmission()
value = Wire.requestFrom(deviceAddress, 1) -- read a byte
return value
end
local function writeRegister(deviceAddress, address, val)
Wire.beginTransmission(deviceAddress) -- start transmission to device
Wire.write(address) -- send register address
Wire.write(val) -- send value to write
Wire.endTransmission() -- end transmission
end
function M.getLux()
local CH0_LOW=readRegister(TSL2561_Address,TSL2561_Channel0L)
local CH0_HIGH=readRegister(TSL2561_Address,TSL2561_Channel0H)
--read two bytes from registers 0x0E and 0x0F
local CH1_LOW=readRegister(TSL2561_Address,TSL2561_Channel1L)
local CH1_HIGH=readRegister(TSL2561_Address,TSL2561_Channel1H)
ch0 = bit.bor(bit.lshift(CH0_HIGH,8),CH0_LOW)
ch1 = bit.bor(bit.lshift(CH1_HIGH,8),CH1_LOW)
end
function M.init(sda, scl)
i2c.setup(id, sda, scl, i2c.SLOW)
writeRegister(TSL2561_Address,TSL2561_Control,0x03) -- POWER UP
writeRegister(TSL2561_Address,TSL2561_Timing,0x00) --No High Gain (1x), integration time of 13ms
writeRegister(TSL2561_Address,TSL2561_Interrupt,0x00)
writeRegister(TSL2561_Address,TSL2561_Control,0x00) -- POWER Down
end
function M.readVisibleLux()
writeRegister(TSL2561_Address,TSL2561_Control,0x03) -- POWER UP
tmr.delay(14000)
M.getLux()
writeRegister(TSL2561_Address,TSL2561_Control,0x00) -- POWER Down
if(ch0/ch1 < 2 and ch0 > 4900) then
return -1 -- ch0 out of range, but ch1 not. the lux is not valid in this situation.
end
return M.calculateLux(0, 0, 0) -- T package, no gain, 13ms
end
function M.calculateLux(iGain, tInt, iType)
if tInt == 0 then -- 13.7 msec
chScale = CHSCALE_TINT0
elseif tInt == 1 then -- 101 msec
chScale = CHSCALE_TINT1
else -- assume no scaling
chScale = bit.lshift(1,CH_SCALE)
end
if (not iGain) then chScale = bit.lshift(chScale,4) end -- scale 1X to 16X
-- scale the channel values
channel0 = bit.rshift((ch0 * chScale),CH_SCALE)
channel1 = bit.rshift((ch1 * chScale),CH_SCALE)
ratio1 = 0
if channel0 ~= 0 then ratio1 = bit.lshift(channel1,(RATIO_SCALE+1))/channel0 end
-- round the ratio value
ratio = bit.rshift((ratio1 + 1),1)
if iType == 0 then -- T package
if ratio >= 0 and ratio <= S.K1T then
b=S.B1T
m=S.M1T
elseif ratio <= S.K2T then
b=S.B2T
m=S.M2T
elseif ratio <= S.K3T then
b=S.B3T
m=S.M3T
elseif ratio <= S.K4T then
b=S.B4T
m=S.M4T
elseif ratio <= S.K5T then
b=S.B5T
m=S.M5T
elseif ratio <= S.K6T then
b=S.B6T
m=S.M6T
elseif ratio <= S.K7T then
b=S.B7T
m=S.M7T
elseif ratio > S.K8T then
b=S.B8T
m=S.M8T
end
elseif iType == 1 then -- CS package
if ratio >= 0 and ratio <= S.K1C then
b=S.B1C
m=S.M1C
elseif ratio <= S.K2C then
b=S.B2C
m=S.M2C
elseif ratio <= S.K3C then
b=S.B3C
m=S.M3C
elseif ratio <= S.K4C then
b=S.B4C
m=S.M4C
elseif ratio <= S.K5C then
b=S.B5C
m=S.M5C
elseif ratio <= S.K6C then
b=S.B6C
m=S.M6C
elseif ratio <= S.K7C then
b=S.B7C
m=S.M7C
end
end
temp=((channel0*b)-(channel1*m))
if temp<0 then temp=0 end
temp = temp + bit.lshift(1,(LUX_SCALE-1))
-- strip off fractional portion
lux = bit.rshift(temp,LUX_SCALE)
return lux
end
return M

View File

@ -1,72 +0,0 @@
# tsl2561 Module
##Require
```lua
tsl2561 = require("tsl2561")
```
## Release
```lua
tsl2561 = nil
package.loaded["tsl2561"]=nil
```
<a id="tsl2561_init"></a>
##init()
####Description
Setting the I2C pin of tsl2561.<br />
####Syntax
init(sda, scl)
####Parameters
sda: 1~12, IO index.<br />
scl: 1~12, IO index.<br />
####Returns
nil
####Example
```lua
SDA_PIN = 6 -- sda pin, GPIO12
SCL_PIN = 5 -- scl pin, GPIO14
tsl2561 = require("tsl2561")
tsl2561.init(SDA_PIN, SCL_PIN)
-- release module
tsl2561 = nil
package.loaded["tsl2561"]=nil
```
####See also
**-** []()
<a id="tsl2561_read"></a>
##readVisibleLux()
####Description
Get the Lux reading of visible light<br />
####Syntax
readVisibleLux()
####Parameters
nil.<br />
####Returns
nil.<br />
####Example
```lua
SDA_PIN = 6 -- sda pin, GPIO12
SCL_PIN = 5 -- scl pin, GPIO14
tsl2561 = require("tsl2561")
tsl2561.init(SDA_PIN, SCL_PIN)
lux = tsl2561.readVisibleLux()
-- release module
tsl2561 = nil
package.loaded["tsl2561"]=nil
```
####See also
**-** []()

View File

@ -1,25 +0,0 @@
-- ***************************************************************************
-- TSL2561 Example Program for ESP8266 with nodeMCU
--
-- Written by Marius Schmeding
--
-- MIT license, http://opensource.org/licenses/MIT
-- ***************************************************************************
tmr.alarm(0, 5000, 1, function()
SDA_PIN = 6 -- sda pin
SCL_PIN = 5 -- scl pin
-- init module
tsl2561 = require("tsl2561")
tsl2561.init(SDA_PIN, SCL_PIN)
-- read value
l = tsl2561.readVisibleLux()
print("lux: "..l.." lx")
-- release module
tsl2561 = nil
package.loaded["tsl2561"]=nil
end)