sobota 7. ledna 2017

ESP8266 od WeMos a SHT30

Kutím si nějaké měřáčky teploty a vlhkosti vzduchu. Zatím provozuji dva kousky s čidly DHT22. Celkem spokojenost, ale proč nezkusit něco jiného...

WeMos začal prodávat moduly SHT30 s čidly SHT30-DIS, které komunikují na standardní sběrnici I2C. Dlouho jsem se mořil s tím je zprovoznit, nakonec se to povedlo...



Základní údaje

Interface: I2C
Adresy: 0x45 (po vyzkratování propojky ADDR 0x44)
Přesnost měření vlhkosti: ±3%RH
Přesnost měření teploty: ±0.3°C
Pin datového vodiče (SDA): D2
Pin hodin (SCL): D1

Na desce je také vyveden ALERT, který je čip schopen automaticky ovládat podle nastavení vnitřních registrů a měřené teploty. Správně nastavený chip tak nepotřebuje ke své činnosti nadřazený MCU.

Program

Jednoduchý program, který změří a vypíše teplotu a vlhkost.

-- SHT30 --
-- https://www.wemos.cc/sites/default/files/2016-11/SHT30-DIS_datasheet.pdf

-- init i2c
id  = 0
sda = 2 -- pin D2
scl = 1 -- pin D1
dev_addr = 0x45

i2c.setup(id, sda, scl, i2c.SLOW)
--

-- send command
i2c.start(id)
i2c.address(id, dev_addr, i2c.TRANSMITTER)
i2c.write(id, 0x2C, 0x06) -- HIGH Repeatability, Clock stretching ENABLED
i2c.stop(id)
--

tmr.delay(13500) -- wait for data measuring (13.5 ms for HIGH Repeatability)

-- get data
i2c.start(id)
i2c.address(id, dev_addr, i2c.RECEIVER)
data = i2c.read(id, 6) -- read 6 bytes
i2c.stop(id)
--

-- calculate temperature and humidity (2 data bytes + 1 checksum byte)
temp = ((((data:byte(1) * 256.0) + data:byte(2)) * 175) / 65535.0) - 45
humidity = ((((data:byte(4) * 256.0) + data:byte(5)) * 100) / 65535.0)
--

-- print data
print("temperature: "..temp.." degC")
print("humidity:    "..humidity.." %")
--

Žádné komentáře:

Okomentovat