ESP8266 WiFi – Lichtintensiteit sensor BH1750 (GY-302) (NodeMCU)
Op deze pagina vind je een voorbeeld om via de ESP-01 module een Lichtintensiteit sensor BH1750 (GY-302) te gebruiken via de GPIO pinnen met de firmware NodeMCU.
Hardware
Deze lichtintensiteit sensor BH1750 (GY-302) heeft een groot bereik en kan bijv. gebruikt worden om de backlight van een LCD scherm bij te stellen aan de hand van het licht dat aanwezig is.
Deze module heeft een standaard bereik van 1 – 65535 lx.
Enkele voorbeelden van lichtsterkte:
Nacht: 0.001–0.02
Nacht met maanlicht: 0.02–0.3
Bewolkt binnen huis: 5–50
Bewolkt buiten huis: 50–500
Zonnig binnen huis: 100–1000
Eigenschappen (ENG)
- I2C bus Interface
- Spectral responsibility is approximately human eye response
- Illuminance to Digital Converter
- Wide range and High resolution. ( 1 – 65535 lx )
- Low Current by power down function
- 50Hz / 60Hz Light noise reject-function
- Light source dependency is little. ( ex. Incandescent Lamp. Fluorescent Lamp. Halogen Lamp. White LED. Sun Light)
- It is possible to select 2 type of I2C slave-address
- Adjustable measurement result for influence of optical window
- Small measurement variation (+/- 20%)
- The influence of infrared is very small
- Operating Voltage: 3.3V-5V
- Dimensions: 0.85*0.63*0.13″(21*16*3.3mm)
Pinout
BH1750 Pin (bovenkant en van links naar rechts): | Functie |
---|---|
1 | ADDR |
2 | SDA (Serial Data) |
3 | SDL (Serial Clock) |
4 | GND |
5 | VCC (3.3v - 5v) |
Er zijn ook andere varianten zoals de BH1750FVI, deze heeft wel een andere pinout!
Wat heb je nodig?
1) ESPlorer IDE
Sluit de lichtintensiteit sensor BH1750 aan op volgens onderstaand schema:
Getest op firmware: nodemcu_integer_0.9.5_20150318.bin
Upload deze “library” code als bh1750.lua
Tip: Download de code sla het op als bestand, en gebruik de “Upload…” knop in ESPlorer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
-- *************************************************************************** -- BH1750 module for ESP8266 with nodeMCU -- BH1750 compatible tested 2015-1-22 -- -- Written by xiaohu -- -- MIT license, http://opensource.org/licenses/MIT -- *************************************************************************** local moduleName = ... local M = {} _G[moduleName] = M --I2C slave address of GY-30 local GY_30_address = 0x23 -- i2c interface ID local id = 0 --LUX local l --CMD local CMD = 0x10 local init = false --Make it more faster local i2c = i2c function M.init(sda, scl) i2c.setup(id, sda, scl, i2c.SLOW) --print("i2c ok..") init = true end 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(200000) c = i2c.read(id, length) i2c.stop(id) return c end local function read_lux() dataT = read_data(GY_30_address, CMD, 2) --Make it more faster UT = dataT:byte(1) * 256 + dataT:byte(2) l = (UT*1000/12) return(l) end function M.read() if (not init) then print("init() must be called before read.") else read_lux() end end function M.getlux() return l end return M |
Gebruik de volgende code om de lichtintensiteit in lux en weer te geven:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
SDA_PIN = 3 -- sda pin, GPIO0 SCL_PIN = 4 -- scl pin, GPIO2 function round(num, idp) local mult = 10^(idp or 0) return math.floor(num * mult + 0.5) / mult end bh1750 = require("bh1750") bh1750.init(SDA_PIN, SCL_PIN) bh1750.read(OSS) lux = bh1750.getlux() print("lux: "..round(lux / 100, 2)) -- release module bh1750 = nil package.loaded["bh1750"]=nil |
Sla het bestand bijvoorbeeld op als read.lua, resultaat:
1 2 |
> dofile("read.lua") lux: 5.83 |
bron:
nodemcu @ github.com