View Source SCD30

Hex version

Driver for the Adafruit SCD-30 CO2 temperature and humidity sensor.

Installation

def deps do
  [
    {:scd30, "~> 0.1"}
  ]
end

Sample usage

Using sensor commands

iex(1)> {bus_name, device_addr} = SCD30.Comm.discover
{"i2c-1", 97}
iex(2)> i2c = SCD30.Comm.open(bus_name)
#Reference<0.2263858602.268566537.255722>
iex(3)> SCD30.Cmds.MEASUREMENT_INTERVAL.set(i2c, device_addr, 2) # Sensor will take measurement every 2 seconds
:ok
iex(4)> SCD30.Cmds.CONTINUOUS_MEASUREMENT.start(i2c, device_addr) # Starting continuous measurement mode
:ok
iex(6)> # Since sensor juste start continuous measurement we must wait a long time.
iex(7)> # after this startup, measurements will be available every interval.
iex(8)> :timer.sleep(20_000)  
:ok
iex(9)> if SCD30.Cmds.DATA_READY.read(i2c, device_addr),do: SCD30.Cmds.READ_MEASUREMENT.read(i2c, device_addr)
%SCD30.Measurement{
  co2_ppm: 1035.865478515625,
  rh_percent: 44.5159912109375,
  temp_celsius: 20.65003204345703
}

Using GenServer

iex(1)> SCD30.start_link([name: :scd30])
{:ok, #PID<0.1393.0>}
iex(2)> :timer.sleep(20_000)
:ok
iex(3)> GenServer.call(:scd30, :measure)
{:ok,
 %SCD30.Measurement{
   co2_ppm: 982.560791015625,
   rh_percent: 44.9462890625,
   temp_celsius: 20.49248504638672
 }}