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: I2CAdresy: 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