mirror of
https://github.com/esphome/esphome.git
synced 2024-11-26 00:48:19 +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"
|
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"
|
||||||
|
|
Loading…
Reference in a new issue