Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support LM75 temperature sensor #1327

Merged
merged 4 commits into from
Nov 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions main/User_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,7 @@ int lowpowermode = DEFAULT_LOW_POWER_MODE;
//#define ZsensorTSL2561 "TSL2561" //ESP8266, Arduino, ESP32
//#define ZsensorBME280 "BME280" //ESP8266, Arduino, ESP32
//#define ZsensorHTU21 "HTU21" //ESP8266, Arduino, ESP32
//#define ZsensorLM75 "LM75" //ESP8266, Arduino, ESP32
//#define ZsensorDHT "DHT" //ESP8266, Arduino, ESP32, Sonoff RF Bridge
//#define ZsensorDS1820 "DS1820" //ESP8266, Arduino, ESP32
//#define ZsensorGPIOKeyCode "GPIOKeyCode" //ESP8266, Arduino, ESP32
Expand Down
15 changes: 15 additions & 0 deletions main/ZmqttDiscovery.ino
Original file line number Diff line number Diff line change
Expand Up @@ -554,6 +554,21 @@ void pubMqttDiscovery() {
}
# endif

# ifdef ZsensorLM75
Log.trace(F("LM75Discovery" CR));
char* LM75sensor[8] = {"sensor", "temp", "htu", "temperature", jsonTempc, "", "", "°C"};
//component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement

createDiscovery(LM75sensor[0],
LM75TOPIC, LM75sensor[1], (char*)getUniqueId(LM75sensor[1], LM75sensor[2]).c_str(),
will_Topic, LM75sensor[3], LM75sensor[4],
LM75sensor[5], LM75sensor[6], LM75sensor[7],
0, "", "", true, "",
"", "", "", "", false, // device name, device manufacturer, device model, device MAC, retain
stateClassNone //State Class
);
# endif

# ifdef ZsensorAHTx0
# define AHTparametersCount 2
Log.trace(F("AHTx0Discovery" CR));
Expand Down
99 changes: 99 additions & 0 deletions main/ZsensorLM75.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
/*
OpenMQTTGateway Addon - ESP8266 or Arduino program for home automation

Act as a wifi or ethernet gateway between your 433mhz/infrared IR signal and a MQTT broker
Send and receiving command by MQTT

This is a Temperature Addon:
- Measures Temperature
- Generates Values for: Temperature in degrees C and F
- Required Hardware Module: LM75 or NCT75
- Required Library: jeremycole/I2C Temperature Sensors derived from the LM75

Connection Schemata:
--------------------

LM75 ------> Arduino Uno ----------> ESP8266
==============================================
Vcc ---------> 5V -------------------> Vu (5V)
GND ---------> GND ------------------> GND
SCL ---------> Pin A5 ---------------> D1
SDA ---------> Pin A4 ---------------> D2

This file is part of OpenMQTTGateway.

OpenMQTTGateway is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

OpenMQTTGateway is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "User_config.h"

#ifdef ZsensorLM75
# include <stdint.h>

# include "Temperature_LM75_Derived.h"
# include "Wire.h" // Library for communication with I2C / TWI devices
# include "config_LM75.h"

//Time used to wait for an interval before resending measured values
unsigned long timelm75 = 0;

//Global sensor object
Generic_LM75 lm75Sensor;

void setupZsensorLM75() {
delay(10); // Gives the Sensor enough time to turn on
Log.notice(F("LM75 Initialized - begin()" CR));

# if defined(ESP32)
Wire.begin(I2C_SDA, I2C_SCL);
# elif defined(ESP8266)
Wire.begin();
# endif
}

void MeasureTemp() {
if (millis() > (timelm75 + TimeBetweenReadinglm75)) {
Log.trace(F("Read LM75 Sensor" CR));

timelm75 = millis();
static float persisted_lm75_tempc;

float lm75TempC = lm75Sensor.readTemperatureC();

if (lm75TempC >= 998) {
Log.error(F("Failed to read from sensor LM75!" CR));
return;
}

// Check if reads failed and exit early (to try again).
if (isnan(lm75TempC)) {
Log.error(F("Failed to read from sensor HLM75!" CR));
} else {
Log.notice(F("Creating LM75 buffer" CR));
StaticJsonDocument<JSON_MSG_BUFFER> jsonBuffer;
JsonObject LM75data = jsonBuffer.to<JsonObject>();
// Generate Temperature in degrees C
if (lm75TempC != persisted_lm75_tempc || lm75_always) {
float lm75TempF = (lm75TempC * 1.8) + 32;
LM75data["tempc"] = (float)lm75TempC;
LM75data["tempf"] = (float)lm75TempF;
pub(LM75TOPIC, LM75data);
} else {
Log.notice(F("Same Temp. Don't send it" CR));
}
}
persisted_lm75_tempc = lm75TempC;
}
}

#endif
58 changes: 58 additions & 0 deletions main/config_LM75.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/*
OpenMQTTGateway Addon - ESP8266 or Arduino program for home automation

Act as a wifi or ethernet gateway between your 433mhz/infrared IR signal and a MQTT broker
Send and receiving command by MQTT

This is a Temperature Addon:
- Measures Temperature
- Generates Values for: Temperature in degrees C and F
- Required Hardware Module: LM75 or NCT75
- Required Library: jeremycole/I2C Temperature Sensors derived from the LM75

Connection Schemata:
--------------------

LM75 ------> Arduino Uno ----------> ESP8266
==============================================
Vcc ---------> 5V -------------------> Vu (5V)
GND ---------> GND ------------------> GND
SCL ---------> Pin A5 ---------------> D1
SDA ---------> Pin A4 ---------------> D2

This file is part of OpenMQTTGateway.

OpenMQTTGateway is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

OpenMQTTGateway is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef config_LM75_h
#define config_LM75_h

extern void setupLM75();
extern void LM75toMQTT();

#define lm75_always true // if false when the current value of the parameter is the same as previous one don't send it by MQTT
#define TimeBetweenReadinglm75 30000

/*----------------------------USER PARAMETERS-----------------------------*/
/*-------------DEFINE YOUR MQTT PARAMETERS BELOW----------------*/
#define LM75TOPIC "/TEMPtoMQTT/lm75"

#if defined(ESP32)
# if !defined(I2C_SDA) || !defined(I2C_SCL)
# define I2C_SDA 16
# define I2C_SCL 0
# endif
#endif

#endif
10 changes: 10 additions & 0 deletions main/main.ino
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,9 @@ struct GfSun2000Data {};
#ifdef ZsensorHTU21
# include "config_HTU21.h"
#endif
#ifdef ZsensorLM75
# include "config_LM75.h"
#endif
#ifdef ZsensorAHTx0
# include "config_AHTx0.h"
#endif
Expand Down Expand Up @@ -720,6 +723,10 @@ void setup() {
setupZsensorHTU21();
modules.add(ZsensorHTU21);
#endif
#ifdef ZsensorLM75
setupZsensorLM75();
modules.add(ZsensorLM75);
#endif
#ifdef ZsensorAHTx0
setupZsensorAHTx0();
modules.add(ZsensorAHTx0);
Expand Down Expand Up @@ -1429,6 +1436,9 @@ void loop() {
#ifdef ZsensorHTU21
MeasureTempHum(); //Addon to measure Temperature, Humidity, of a HTU21 sensor
#endif
#ifdef ZsensorLM75
MeasureTemp(); //Addon to measure Temperature of an LM75 sensor
#endif
#ifdef ZsensorAHTx0
MeasureAHTTempHum(); //Addon to measure Temperature, Humidity, of an 'AHTx0' sensor
#endif
Expand Down
3 changes: 3 additions & 0 deletions platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ emodbus = miq19/[email protected]
gfSunInverter = https://github.com/BlackSmith/GFSunInverter.git#v1.0.1
decoder = https://github.com/theengs/decoder.git#v0.9.5
ssd1306 = thingpulse/ESP8266 and ESP32 OLED driver for SSD1306 displays@^4.3.0
lm75 = jeremycole/I2C Temperature Sensors derived from the LM75@^1.0.3

[env]
framework = arduino
Expand Down Expand Up @@ -253,6 +254,7 @@ lib_deps =
${libraries.bme280}
${libraries.bmp180}
${libraries.htu21}
${libraries.lm75}
${libraries.ahtx0}
${libraries.unifiedsensor}
${libraries.dht}
Expand Down Expand Up @@ -1014,6 +1016,7 @@ lib_deps =
${libraries.bme280}
${libraries.bmp180}
;${libraries.htu21}
${libraries.lm75}
${libraries.ahtx0}
${libraries.unifiedsensor}
${libraries.dht}
Expand Down