153 lines
3.8 KiB
Markdown
153 lines
3.8 KiB
Markdown
|
# Si7021 Module
|
||
|
| Since | Origin / Contributor | Maintainer | Source |
|
||
|
| :----- | :-------------------- | :---------- | :------ |
|
||
|
| 2017-04-19 | [fetchbot](https://github.com/fetchbot) | [fetchbot](https://github.com/fetchbot) | [si7021.c](../../../app/modules/si7021.c)|
|
||
|
|
||
|
This module provides access to the Si7021 humidity and temperature sensor.
|
||
|
|
||
|
## si7021.firmware()
|
||
|
Read the internal firmware revision of the Si7021 sensor.
|
||
|
|
||
|
#### Syntax
|
||
|
`si7021.firmware()`
|
||
|
|
||
|
#### Parameters
|
||
|
none
|
||
|
|
||
|
#### Returns
|
||
|
`fwrev` Firmware version
|
||
|
* `0xFF` Firmware version 1.0
|
||
|
* `0x20` Firmware version 2.0
|
||
|
|
||
|
#### Example
|
||
|
```lua
|
||
|
local sda, scl = 6, 5
|
||
|
i2c.setup(0, sda, scl, i2c.SLOW) -- call i2c.setup() only once
|
||
|
si7021.setup()
|
||
|
|
||
|
fwrev = si7021.firmware()
|
||
|
print(string.format("FW: %X\r\n", fwrev))
|
||
|
```
|
||
|
|
||
|
## si7021.setting()
|
||
|
Settings for the sensors configuration register to adjust measurement resolution, on-chip heater and read the supply voltage status.
|
||
|
|
||
|
#### Syntax
|
||
|
`si7021.setting(RESOLUTION[, HEATER, HEATER_SETTING])`
|
||
|
|
||
|
#### Parameters
|
||
|
- `RESOLUTION`
|
||
|
* `si7021.RH12_TEMP14` Relative Humidity 12 bit - Temperature 14 bit (default)
|
||
|
* `si7021.RH08_TEMP12` Relative Humidity 8 bit - Temperature 12 bit
|
||
|
* `si7021.RH10_TEMP13` Relative Humidity 10 bit - Temperature 13 bit
|
||
|
* `si7021.RH11_TEMP11` Relative Humidity 11 bit - Temperature 11 bit
|
||
|
- `HEATER` optional
|
||
|
* `si7021.HEATER_ENABLE` On-chip Heater Enable
|
||
|
* `si7021.HEATER_DISABLE` On-chip Heater Disable (default)
|
||
|
- `HEATER_SETTING` optional
|
||
|
* `0x00` - `0x0F` 3.09 mA - 94.20 mA
|
||
|
|
||
|
#### Returns
|
||
|
- `resolution`
|
||
|
* `0` Relative Humidity 12 bit - Temperature 14 bit
|
||
|
* `1` Relative Humidity 8 bit - Temperature 12 bit
|
||
|
* `2` Relative Humidity 10 bit - Temperature 13 bit
|
||
|
* `3` Relative Humidity 11 bit - Temperature 11 bit
|
||
|
- `vdds`
|
||
|
* `0` VDD OK (1.9V - 3.6V)
|
||
|
* `1` VDD LOW (1.8V - 1.9V)
|
||
|
- `heater`
|
||
|
* `0` Disabled
|
||
|
* `1` Enabled
|
||
|
- `heater_setting`
|
||
|
* `0` - `15`
|
||
|
|
||
|
#### Example
|
||
|
```lua
|
||
|
local id, sda, scl = 0, 6, 5
|
||
|
i2c.setup(id, sda, scl, i2c.SLOW) -- call i2c.setup() only once
|
||
|
si7021.setup()
|
||
|
|
||
|
res, vdds, heater, heater_set = si7021.setting(si7021.RH12_TEMP14)
|
||
|
res, vdds, heater, heater_set = si7021.setting(si7021.RH12_TEMP14, si7021.HEATER_ENABLE, 0x01)
|
||
|
```
|
||
|
|
||
|
## si7021.setup()
|
||
|
Initializes the device on fixed I²C device address (0x40).
|
||
|
|
||
|
#### Syntax
|
||
|
`si7021.setup()`
|
||
|
|
||
|
#### Parameters
|
||
|
none
|
||
|
|
||
|
#### Returns
|
||
|
`nil`
|
||
|
|
||
|
#### Example
|
||
|
```lua
|
||
|
local sda, scl = 6, 5
|
||
|
i2c.setup(0, sda, scl, i2c.SLOW) -- call i2c.setup() only once
|
||
|
si7021.setup()
|
||
|
```
|
||
|
|
||
|
## si7021.read()
|
||
|
|
||
|
#### Syntax
|
||
|
`si7021.read()`
|
||
|
|
||
|
#### Parameters
|
||
|
none
|
||
|
|
||
|
#### Returns
|
||
|
- `hum` humidity (see note below)
|
||
|
- `temp` temperature (see note below)
|
||
|
- `hum_dec` humidity decimal
|
||
|
- `temp_dec` temperature decimal
|
||
|
|
||
|
!!! note
|
||
|
|
||
|
If using float firmware then `hum` and `temp` are floating point numbers. On an integer firmware, the final values have to be concatenated from `hum` and `hum_dec` / `temp` and `temp_dec`.
|
||
|
|
||
|
#### Example
|
||
|
```lua
|
||
|
local sda, scl = 6, 5
|
||
|
i2c.setup(0, sda, scl, i2c.SLOW) -- call i2c.setup() only once
|
||
|
si7021.setup()
|
||
|
|
||
|
hum, temp, hum_dec, temp_dec = si7021.read()
|
||
|
|
||
|
-- Integer firmware using this example
|
||
|
print(string.format("Humidity:\t\t%d.%03d\nTemperature:\t%d.%03d\n", hum, hum_dec, temp, temp_dec))
|
||
|
|
||
|
-- Float firmware using this example
|
||
|
print("Humidity: "..hum.."\n".."Temperature: "..temp)
|
||
|
```
|
||
|
|
||
|
## si7021.serial()
|
||
|
Read the individualized 64-bit electronic serial number of the Si7021 sensor.
|
||
|
|
||
|
#### Syntax
|
||
|
`si7021.serial()`
|
||
|
|
||
|
#### Parameters
|
||
|
none
|
||
|
|
||
|
#### Returns
|
||
|
- `sna` 32-bit serial number part a
|
||
|
- `snb` 32-bit serial number part b, upper byte contains the device identification
|
||
|
* `0x00` or `0xFF` engineering samples
|
||
|
* `0x0D` `13` Si7013
|
||
|
* `0x14` `20` Si7020
|
||
|
* `0x15` `21` Si7021
|
||
|
|
||
|
#### Example
|
||
|
```lua
|
||
|
local sda, scl = 6, 5
|
||
|
i2c.setup(0, sda, scl, i2c.SLOW) -- call i2c.setup() only once
|
||
|
si7021.setup()
|
||
|
|
||
|
sna, snb = si7021.serial()
|
||
|
print(string.format("SN:\t\t%X%X\nDevice:\tSi70%d", sna, snb, bit.rshift(snb,24)))
|
||
|
```
|