Remarks

Tmp102
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.Sensors.Temperature.Tmp102

The TMP102 is a temperature sensor capable of reading the current temperature with an accuracy of 0.5C over the range of -25C to 85C with a total range of -40C to 125C.

Purchasing

TMP102 sensors are available on a breakout board from the following suppliers:

The TMP102 temperature sensor can operate in interrupt or polling mode.

Code Example

Tmp102 tmp102;

public override Task Initialize()
{
    Console.WriteLine("Initialize...");

    tmp102 = new Tmp102(Device.CreateI2cBus());

    var consumer = Tmp102.CreateObserver(
        handler: result =>
        {
            Console.WriteLine($"Temperature New Value { result.New.Celsius}C");
            Console.WriteLine($"Temperature Old Value { result.Old?.Celsius}C");
        },
        filter: null
    );
    tmp102.Subscribe(consumer);

    tmp102.TemperatureUpdated += (object sender, IChangeResult<Meadow.Units.Temperature> e) =>
    {
        Console.WriteLine($"Temperature Updated: {e.New.Celsius:N2}C");
    };

    return Task.CompletedTask;
}

public override async Task Run()
{
    var temp = await tmp102.Read();
    Console.WriteLine($"Current temperature: {temp.Celsius} C");

    tmp102.StartUpdating(TimeSpan.FromSeconds(1));
}

Sample project(s) available on GitHub

Interrupt Mode

The example below will check the temperature every second. An interrupt will be raised if the difference in temperature between the last reported reading and the current reading is greater than + / - 0.1 °C.

public class MeadowApp : App<F7Micro, MeadowApp>
{
    public MeadowApp()
    {
        Console.WriteLine("TMP102 Interrupt Sample");

        // Create a new TMP102 object, check the temperature every
        // 1s and report any changes grater than +/- 0.1C.
        var tmp102 = new TMP102(updateInterval: 1000, temperatureChangeNotificationThreshold: 0.1F);

        // Hook up the interrupt handler.
        tmp102.TemperatureChanged += (s, e) =>
        {
            Console.WriteLine("Temperature: " + e.CurrentValue.ToString("f2"));
        };

        // Now put the main program to sleep as the interrupt handler
        // above deals with processing the sensor data.
        Thread.Sleep(Timeout.Infinite);
    }
}

Polling Mode

The following application reads the temperature from the TMP102 sensor every second and displays the results in the debug console:

public class MeadowApp : App<F7Micro, MeadowApp>
{
    public MeadowApp()
    {
      gi  Console.WriteLine("TMP102 Test");
        var tmp102 = new TMP102();
        while (true)
        {
            Console.WriteLine("Temperature: " + tmp102.Temperature.ToString("f2"));
            Thread.Sleep(1000);
        }
    }
}

Sample projects available on GitHub

Wiring Example

TMP102 sensors can be connected to Meadow using only four connections:

Characteristic Locus
Inheritance System.Object ObservableBase<Units.Temperature> SensorBase<Units.Temperature> SamplingSensorBase<Units.Temperature> ByteCommsSensorBase<Units.Temperature> > Tmp102
Implements IDisposable ITemperatureSensor
Inherited Members ByteCommsSensorBase<Units.Temperature>.Peripheral ByteCommsSensorBase<Units.Temperature>.ReadBuffer ByteCommsSensorBase<Units.Temperature>.WriteBuffer ByteCommsSensorBase<Units.Temperature>.Init(Int32, Int32) ByteCommsSensorBase<Units.Temperature>.Dispose(Boolean) ByteCommsSensorBase<Units.Temperature>.Dispose() SamplingSensorBase<Units.Temperature>.StartUpdating(Nullable<TimeSpan>) SamplingSensorBase<Units.Temperature>.StopUpdating() SensorBase<Units.Temperature>.Updated SensorBase<Units.Temperature>.samplingLock SensorBase<Units.Temperature>.SamplingTokenSource SensorBase<Units.Temperature>.Conditions SensorBase<Units.Temperature>.IsSampling SensorBase<Units.Temperature>.UpdateInterval SensorBase<Units.Temperature>.RaiseEventsAndNotify(IChangeResult<>) SensorBase<Units.Temperature>.Read() ObservableBase<Units.Temperature>.observers ObservableBase<Units.Temperature>.NotifyObservers(IChangeResult<>) Meadow.Foundation.ObservableBase<Units.Temperature>.Subscribe(IObserver<>) Meadow.Foundation.ObservableBase<Units.Temperature>.CreateObserver(Action<>, System.Nullable<Predicate<IChangeResult<UNIT>>>)
Namespace Meadow.Foundation.Sensors.Temperature
Assembly Tmp102.dll

Syntax

public class Tmp102 : ByteCommsSensorBase<Units.Temperature>, IDisposable, ITemperatureSensor

Constructors

Tmp102(II2cBus, Byte)

Create a new TMP102 object using the default configuration for the sensor.

Declaration
public Tmp102(II2cBus i2cBus, byte address = null)

Parameters

Type Name Description
II2cBus i2cBus
System.Byte address

I2C address of the sensor.

Properties

SensorResolution

Get / set the resolution of the sensor.

Declaration
public Tmp102.Resolution SensorResolution { get; set; }

Property Value

Type Description
Tmp102.Resolution

Temperature

The temperature from the last reading.

Declaration
public Units.Temperature? Temperature { get; protected set; }

Property Value

Type Description
System.Nullable<Units.Temperature>

Methods

RaiseChangedAndNotify(IChangeResult<Units.Temperature>)

Declaration
protected void RaiseChangedAndNotify(IChangeResult<Units.Temperature> changeResult)

Parameters

Type Name Description
IChangeResult<Units.Temperature> changeResult

ReadSensor()

Update the Temperature property.

Declaration
protected override Task<Units.Temperature> ReadSensor()

Returns

Type Description
Task<Units.Temperature>

Overrides

Meadow.Foundation.SensorBase<Units.Temperature>.ReadSensor()

Events

TemperatureUpdated

Declaration
public event EventHandler<IChangeResult<Units.Temperature>> TemperatureUpdated

Event Type

Type Description
EventHandler<IChangeResult<Units.Temperature>>