mirror of
https://github.com/esphome/esphome.git
synced 2024-11-25 16:38:16 +01:00
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:
parent
f034472e2a
commit
d97a9bf8e8
5 changed files with 110 additions and 0 deletions
9
esphome/components/tmp102/__init__.py
Normal file
9
esphome/components/tmp102/__init__.py
Normal 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
|
||||
|
||||
"""
|
30
esphome/components/tmp102/sensor.py
Normal file
30
esphome/components/tmp102/sensor.py
Normal 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)
|
47
esphome/components/tmp102/tmp102.cpp
Normal file
47
esphome/components/tmp102/tmp102.cpp
Normal 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
|
22
esphome/components/tmp102/tmp102.h
Normal file
22
esphome/components/tmp102/tmp102.h
Normal 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
|
|
@ -375,6 +375,8 @@ sensor:
|
|||
name: "PZEMDC Current"
|
||||
power:
|
||||
name: "PZEMDC Power"
|
||||
- platform: tmp102
|
||||
name: "TMP102 Temperature"
|
||||
- platform: hm3301
|
||||
pm_1_0:
|
||||
name: "PM1.0"
|
||||
|
|
Loading…
Reference in a new issue