mirror of https://github.com/arendst/Tasmota.git
Add I2C temperature sensor LM75AD
6.0.0a * Add support for I2C temperature sensor LM75AD (#2909)
This commit is contained in:
parent
006a747d10
commit
43dd708413
|
@ -1,6 +1,7 @@
|
||||||
/* 6.0.0a
|
/* 6.0.0a
|
||||||
* Add CRC to Settings making future upgrades more fail-safe
|
* Add CRC to Settings making future upgrades more fail-safe
|
||||||
* Add support for uploading Sonoff Bridge firmware found in tools/fw_efm8bb1 folder build by Portisch using Web Gui File Upload (#2886)
|
* Add support for uploading Sonoff Bridge firmware found in tools/fw_efm8bb1 folder build by Portisch using Web Gui File Upload (#2886)
|
||||||
|
* Add support for I2C temperature sensor LM75AD (#2909)
|
||||||
* Add command RfRaw to control Portisch firmware features
|
* Add command RfRaw to control Portisch firmware features
|
||||||
* Remove version 3, 4 and pre 5.2 settings auto-upgrade. See https://github.com/arendst/Sonoff-Tasmota/wiki/Upgrade#migration-path
|
* Remove version 3, 4 and pre 5.2 settings auto-upgrade. See https://github.com/arendst/Sonoff-Tasmota/wiki/Upgrade#migration-path
|
||||||
* Change default CFG_HOLDER from 0x20161209 to 4617 (=0x1209) - no impact on default upgrades
|
* Change default CFG_HOLDER from 0x20161209 to 4617 (=0x1209) - no impact on default upgrades
|
||||||
|
|
|
@ -263,6 +263,7 @@
|
||||||
#define USE_SHT // Add I2C emulating code for SHT1X sensor (+1k4 code)
|
#define USE_SHT // Add I2C emulating code for SHT1X sensor (+1k4 code)
|
||||||
#define USE_SHT3X // Add I2C code for SHT3x or SHTC3 sensor (+0k7 code)
|
#define USE_SHT3X // Add I2C code for SHT3x or SHTC3 sensor (+0k7 code)
|
||||||
#define USE_HTU // Add I2C code for HTU21/SI7013/SI7020/SI7021 sensor (+1k5 code)
|
#define USE_HTU // Add I2C code for HTU21/SI7013/SI7020/SI7021 sensor (+1k5 code)
|
||||||
|
#define USE_LM75AD // Add I2C code for LM75AD sensor (+0k5 code)
|
||||||
#define USE_BMP // Add I2C code for BMP085/BMP180/BMP280/BME280 sensor (+4k code)
|
#define USE_BMP // Add I2C code for BMP085/BMP180/BMP280/BME280 sensor (+4k code)
|
||||||
// #define USE_BME680 // Add additional support for BME680 sensor using Adafruit Sensor and BME680 libraries (+6k code)
|
// #define USE_BME680 // Add additional support for BME680 sensor using Adafruit Sensor and BME680 libraries (+6k code)
|
||||||
#define USE_SGP30 // Add I2C code for SGP30 sensor (+1k1 code)
|
#define USE_SGP30 // Add I2C code for SGP30 sensor (+1k1 code)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
xdrv_26_lm75ad.ino - Support for I2C LM75AD Temperature Sensor
|
xsns_26_lm75ad.ino - Support for I2C LM75AD Temperature Sensor
|
||||||
|
|
||||||
Copyright (C) 2018 Theo Arends
|
Copyright (C) 2018 Andre Thomas and Theo Arends
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -21,7 +21,11 @@
|
||||||
#ifdef USE_LM75AD
|
#ifdef USE_LM75AD
|
||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* LM75AD
|
* LM75AD - Temperature
|
||||||
|
*
|
||||||
|
* Docs at https://www.nxp.com/docs/en/data-sheet/LM75A.pdf
|
||||||
|
*
|
||||||
|
* I2C Address: 0x48 - 0x4F
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
#define LM75AD_ADDRESS1 0x48
|
#define LM75AD_ADDRESS1 0x48
|
||||||
|
@ -56,7 +60,7 @@ void LM75ADDetect()
|
||||||
}
|
}
|
||||||
for (byte i = 0; i < sizeof(lm75ad_addresses); i++) {
|
for (byte i = 0; i < sizeof(lm75ad_addresses); i++) {
|
||||||
lm75ad_address = lm75ad_addresses[i];
|
lm75ad_address = lm75ad_addresses[i];
|
||||||
if (I2cValidRead8(&buffer,lm75ad_address,LM75_CONF_REGISTER)) {
|
if (I2cValidRead8(&buffer, lm75ad_address, LM75_CONF_REGISTER)) {
|
||||||
lm75ad_type = 1;
|
lm75ad_type = 1;
|
||||||
snprintf_P(log_data, sizeof(log_data), S_LOG_I2C_FOUND_AT, "LM75AD", lm75ad_address);
|
snprintf_P(log_data, sizeof(log_data), S_LOG_I2C_FOUND_AT, "LM75AD", lm75ad_address);
|
||||||
AddLog(LOG_LEVEL_DEBUG);
|
AddLog(LOG_LEVEL_DEBUG);
|
||||||
|
@ -67,34 +71,37 @@ void LM75ADDetect()
|
||||||
|
|
||||||
float LM75ADConvertTemp(uint16_t t) {
|
float LM75ADConvertTemp(uint16_t t) {
|
||||||
float tmpt;
|
float tmpt;
|
||||||
|
|
||||||
|
int16_t sign = 1;
|
||||||
if (t & 0x8000) { // we are getting a negative temperature value
|
if (t & 0x8000) { // we are getting a negative temperature value
|
||||||
t=t<<1; // shift out the MSB
|
t = (~t) +0x20;
|
||||||
t=t>>6; // shift value into place (5 LSB not used + the MSB we shifted out to make it zero)
|
sign = -1;
|
||||||
tmpt=t*0.125*-1;
|
|
||||||
} else { // we're getting a positive value
|
|
||||||
t=t>>5; // shift value into place (5 LSB not used)
|
|
||||||
tmpt=t*0.125;
|
|
||||||
}
|
|
||||||
if (!isnan(tmpt) && Settings.flag.temperature_conversion) {
|
|
||||||
tmpt = tmpt * 1.8 + 32; // Fahrenheit
|
|
||||||
}
|
}
|
||||||
|
t = t >> 5; // shift value into place (5 LSB not used)
|
||||||
|
tmpt = ConvertTemp(sign * t * 0.125);
|
||||||
|
|
||||||
return tmpt;
|
return tmpt;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LM75ADShow(boolean json)
|
void LM75ADShow(boolean json)
|
||||||
{
|
{
|
||||||
if (lm75ad_type) {
|
if (lm75ad_type) {
|
||||||
char temperature[10];
|
char temperature[10];
|
||||||
uint16_t lm75ad_value = LM75ADGetTempRegister();
|
|
||||||
float t=LM75ADConvertTemp(lm75ad_value);
|
uint16_t lm75ad_value = LM75ADGetTempRegister();
|
||||||
dtostrfd(t, Settings.flag2.temperature_resolution, temperature);
|
float t = LM75ADConvertTemp(lm75ad_value);
|
||||||
if (json) {
|
dtostrfd(t, Settings.flag2.temperature_resolution, temperature);
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"LM75AD\":{\"" D_JSON_TEMPERATURE "\":%s}"), mqtt_data, temperature);
|
|
||||||
|
if (json) {
|
||||||
|
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"LM75AD\":{\"" D_JSON_TEMPERATURE "\":%s}"), mqtt_data, temperature);
|
||||||
|
#ifdef USE_DOMOTICZ
|
||||||
|
if (0 == tele_period) DomoticzSensor(DZ_TEMP, temperature);
|
||||||
|
#endif // USE_DOMOTICZ
|
||||||
#ifdef USE_WEBSERVER
|
#ifdef USE_WEBSERVER
|
||||||
} else {
|
} else {
|
||||||
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SNS_TEMP, mqtt_data, "LM75AD", temperature, TempUnit());
|
snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SNS_TEMP, mqtt_data, "LM75AD", temperature, TempUnit());
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue