7static const char *
const TAG =
"tsl2561";
9static const uint8_t TSL2561_COMMAND_BIT = 0x80;
10static const uint8_t TSL2561_WORD_BIT = 0x20;
11static const uint8_t TSL2561_REGISTER_CONTROL = 0x00;
12static const uint8_t TSL2561_REGISTER_TIMING = 0x01;
13static const uint8_t TSL2561_REGISTER_ID = 0x0A;
14static const uint8_t TSL2561_REGISTER_DATA_0 = 0x0C;
15static const uint8_t TSL2561_REGISTER_DATA_1 = 0x0E;
18 ESP_LOGCONFIG(TAG,
"Running setup");
31 timing &= ~0b00010000;
34 timing &= ~0b00000011;
40 LOG_SENSOR(
"",
"TSL2561",
this);
44 ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
50 " Integration Time: %.1f ms",
53 LOG_UPDATE_INTERVAL(
this);
69 if ((ch0 == 0xFFFF) || (ch1 == 0xFFFF)) {
70 ESP_LOGW(TAG,
"Sensor is saturated");
74 float d0 = ch0, d1 = ch1;
75 float ratio = d1 / d0;
88 return 0.0315f * d0 - 0.0593f * d0 * powf(ratio, 1.4f);
89 }
else if (ratio < 0.65f) {
90 return 0.0229f * d0 - 0.0291f * d1;
91 }
else if (ratio < 0.80f) {
92 return 0.0157f * d0 - 0.0153f * d1;
93 }
else if (ratio < 1.30f) {
94 return 0.00338f * d0 - 0.00260f * d1;
100 return 0.0304f * d0 - 0.062f * d0 * powf(ratio, 1.4f);
101 }
else if (ratio < 0.61f) {
102 return 0.0224f * d0 - 0.031f * d1;
103 }
else if (ratio < 0.80f) {
104 return 0.0128f * d0 - 0.0153f * d1;
105 }
else if (ratio < 1.30f) {
106 return 0.00146f * d0 - 0.00112f * d1;
112 uint16_t data1, data0;
113 if (!this->
tsl2561_read_uint(TSL2561_WORD_BIT | TSL2561_REGISTER_DATA_1, &data1)) {
117 if (!this->
tsl2561_read_uint(TSL2561_WORD_BIT | TSL2561_REGISTER_DATA_0, &data0)) {
128 ESP_LOGD(TAG,
"Got illuminance=%.1flx", lx);
150 return this->
write_byte(a_register | TSL2561_COMMAND_BIT, value);
154 if (!this->
read_bytes(a_register | TSL2561_COMMAND_BIT, data, 2))
156 const uint16_t hi = data[1];
157 const uint16_t lo = data[0];
158 *value = (hi << 8) | lo;
162 return this->
read_byte(a_register | TSL2561_COMMAND_BIT, value);
virtual void mark_failed()
Mark this component as failed.
void status_set_warning(const char *message="unspecified")
void status_clear_warning()
void set_timeout(const std::string &name, uint32_t timeout, std::function< void()> &&f)
Set a timeout function with a unique name.
bool write_byte(uint8_t a_register, uint8_t data, bool stop=true)
bool read_byte(uint8_t a_register, uint8_t *data, bool stop=true)
bool read_bytes(uint8_t a_register, uint8_t *data, uint8_t len)
Compat APIs All methods below have been added for compatibility reasons.
void publish_state(float state)
Publish a new state to the front-end.
TSL2561IntegrationTime integration_time_
bool tsl2561_write_byte(uint8_t a_register, uint8_t value)
bool tsl2561_read_uint(uint8_t a_register, uint16_t *value)
float calculate_lx_(uint16_t ch0, uint16_t ch1)
bool tsl2561_read_byte(uint8_t a_register, uint8_t *value)
float get_setup_priority() const override
void set_gain(TSL2561Gain gain)
Set the internal gain of the sensor.
void dump_config() override
void set_is_cs_package(bool package_cs)
The "CS" package of this sensor has a slightly different formula for converting the raw values.
float get_integration_time_ms_()
void set_integration_time(TSL2561IntegrationTime integration_time)
Set the time that sensor values should be accumulated for.
IntegrationTime501 integration_time
const float DATA
For components that import data from directly connected sensors like DHT.
TSL2561IntegrationTime
Enum listing all conversion/integration time settings for the TSL2561.
@ TSL2561_INTEGRATION_14MS
@ TSL2561_INTEGRATION_402MS
@ TSL2561_INTEGRATION_101MS
TSL2561Gain
Enum listing all gain settings for the TSL2561.
Providing packet encoding functions for exchanging data with a remote host.
T id(T value)
Helper function to make id(var) known from lambdas work in custom components.