Added tmp102 temperature sensor support (#929)

* Added tmp102 temperature sensor support

* Added sensor to test3.yaml

* Moved docstring to component root

* Tweak formatting from clang-format script

* Removed extra newline at the end of the file to satisfy pylint

* Update schema to match that of other single-value sensors

In ESPHome, sensors that only expose one value do not put the sensor under another key.

* Add missing import

* Fix test after structural change to component

* removed unused setting

* Update esphome/components/tmp102/tmp102.cpp

Co-authored-by: Otto Winter <otto@otto-winter.com>
Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
This commit is contained in:
Tim Savage 2020-10-27 05:00:43 +11:00 committed by GitHub
parent f034472e2a
commit d97a9bf8e8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 110 additions and 0 deletions

View file

@ -0,0 +1,9 @@
"""
The TMP102 is a two-wire, serial output temperature
sensor available in a tiny SOT563 package. Requiring
no external components, the TMP102 is capable of
reading temperatures to a resolution of 0.0625°C.
https://www.sparkfun.com/datasheets/Sensors/Temperature/tmp102.pdf
"""

View file

@ -0,0 +1,30 @@
"""
The TMP102 is a two-wire, serial output temperature
sensor available in a tiny SOT563 package. Requiring
no external components, the TMP102 is capable of
reading temperatures to a resolution of 0.0625°C.
https://www.sparkfun.com/datasheets/Sensors/Temperature/tmp102.pdf
"""
import esphome.codegen as cg
import esphome.config_validation as cv
from esphome.components import i2c, sensor
from esphome.const import CONF_ID, UNIT_CELSIUS, ICON_THERMOMETER
DEPENDENCIES = ['i2c']
tmp102_ns = cg.esphome_ns.namespace('tmp102')
TMP102Component = tmp102_ns.class_("TMP102Component", cg.PollingComponent, i2c.I2CDevice,
sensor.Sensor)
CONFIG_SCHEMA = sensor.sensor_schema(UNIT_CELSIUS, ICON_THERMOMETER, 1).extend({
cv.GenerateID(): cv.declare_id(TMP102Component),
}).extend(cv.polling_component_schema("60s")).extend(i2c.i2c_device_schema(0x48))
def to_code(config):
var = cg.new_Pvariable(config[CONF_ID])
yield cg.register_component(var, config)
yield i2c.register_i2c_device(var, config)
yield sensor.register_sensor(var, config)

View file

@ -0,0 +1,47 @@
#include "tmp102.h"
#include "esphome/core/log.h"
namespace esphome {
namespace tmp102 {
static const char *TAG = "tmp102";
static const uint8_t TMP102_ADDRESS = 0x48;
static const uint8_t TMP102_REGISTER_TEMPERATURE = 0x00;
static const uint8_t TMP102_REGISTER_CONFIGURATION = 0x01;
static const uint8_t TMP102_REGISTER_LOW_LIMIT = 0x02;
static const uint8_t TMP102_REGISTER_HIGH_LIMIT = 0x03;
static const float TMP102_CONVERSION_FACTOR = 0.0625;
void TMP102Component::setup() { ESP_LOGCONFIG(TAG, "Setting up TMP102..."); }
void TMP102Component::dump_config() {
ESP_LOGCONFIG(TAG, "TMP102:");
LOG_I2C_DEVICE(this);
if (this->is_failed()) {
ESP_LOGE(TAG, "Communication with TMP102 failed!");
}
LOG_UPDATE_INTERVAL(this);
LOG_SENSOR(" ", "Temperature", this);
}
void TMP102Component::update() {
uint16_t raw_temperature;
if (!this->read_byte_16(TMP102_REGISTER_TEMPERATURE, &raw_temperature, 50)) {
this->status_set_warning();
return;
}
raw_temperature = raw_temperature >> 4;
float temperature = raw_temperature * TMP102_CONVERSION_FACTOR;
ESP_LOGD(TAG, "Got Temperature=%.1f°C", temperature);
this->publish_state(temperature);
this->status_clear_warning();
}
float TMP102Component::get_setup_priority() const { return setup_priority::DATA; }
} // namespace tmp102
} // namespace esphome

View file

@ -0,0 +1,22 @@
#pragma once
#include "esphome/core/component.h"
#include "esphome/components/sensor/sensor.h"
#include "esphome/components/i2c/i2c.h"
namespace esphome {
namespace tmp102 {
class TMP102Component : public PollingComponent, public i2c::I2CDevice, public sensor::Sensor {
public:
/// Setup (reset) the sensor and check connection.
void setup() override;
void dump_config() override;
/// Update the sensor values (temperature)
void update() override;
float get_setup_priority() const override;
};
} // namespace tmp102
} // namespace esphome

View file

@ -375,6 +375,8 @@ sensor:
name: "PZEMDC Current" name: "PZEMDC Current"
power: power:
name: "PZEMDC Power" name: "PZEMDC Power"
- platform: tmp102
name: "TMP102 Temperature"
- platform: hm3301 - platform: hm3301
pm_1_0: pm_1_0:
name: "PM1.0" name: "PM1.0"