Last active
September 21, 2023 07:59
-
-
Save kakopappa/1ceed5e5a1cfdfa2c1d044a3d117deb7 to your computer and use it in GitHub Desktop.
DS18B20 with Sinric Pro. Complete tutorial at https://help.sinric.pro/pages/tutorials/temperature-sensors/DS18B20
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifdef ENABLE_DEBUG | |
#define DEBUG_ESP_PORT Serial | |
#define NODEBUG_WEBSOCKETS | |
#define NDEBUG | |
#endif | |
#include <Arduino.h> | |
#if defined(ESP8266) | |
#include <ESP8266WiFi.h> | |
#elif defined(ESP32) | |
#include <WiFi.h> | |
#endif | |
#if defined(ESP8266) | |
#define DS18B20_PIN D5 | |
#elif defined(ESP32) | |
#define DS18B20_PIN 16 | |
#endif | |
#include "SinricPro.h" | |
#include "SinricProTemperaturesensor.h" | |
#include <OneWire.h> | |
#include <DallasTemperature.h> // https://github.com/milesburton/Arduino-Temperature-Control-Library | |
#define WIFI_SSID "" // Your WiFI SSID name | |
#define WIFI_PASS "" // Your WiFi Password. | |
#define APP_KEY "" // Should look like "de0bxxxx-1x3x-4x3x-ax2x-5dabxxxxxxxx" (Get it from Portal -> Secrets) | |
#define APP_SECRET "" // Should look like "5f36xxxx-x3x7-4x3x-xexe-e86724a9xxxx-4c4axxxx-3x3x-x5xe-x9x3-333d65xxxxxx" (Get it from Portal -> Secrets) | |
#define TEMP_SENSOR_ID "" // Should look like "5dc1564130xxxxxxxxxxxxxx" (Get it from Portal -> Devices) | |
#define BAUD_RATE 115200 // Change baudrate to your need (used for serial monitor) | |
#define EVENT_WAIT_TIME 60000 // send event every 60 seconds | |
OneWire oneWire(DS18B20_PIN); | |
DallasTemperature sensors(&oneWire); | |
float temperature; // actual temperature | |
float humidity; // actual humidity | |
float lastTemperature; // last known temperature (for compare) | |
void handleTemperaturesensor() { | |
if (SinricPro.isConnected() == false) { | |
Serial.printf("Not connected to Sinric Pro...!\r\n"); | |
return; | |
} | |
static unsigned long last_millis; | |
unsigned long current_millis = millis(); | |
if (last_millis && current_millis - last_millis < EVENT_WAIT_TIME) return; | |
last_millis = current_millis; | |
sensors.requestTemperatures(); | |
temperature = sensors.getTempCByIndex(0); | |
//temperature = sensors.getTempFByIndex(0); // in °F | |
Serial.printf("Temperature: %2.1f °C\r\n", temperature); | |
if (isnan(temperature)) { // reading failed... | |
Serial.printf("DS18B20 reading failed!\r\n"); // print error message | |
return; // try again next time | |
} | |
if (temperature == lastTemperature) { | |
Serial.printf("Temperature did not changed. do nothing...!\r\n"); | |
return; | |
} | |
SinricProTemperaturesensor &mySensor = SinricPro[TEMP_SENSOR_ID]; // get temperaturesensor device | |
bool success = mySensor.sendTemperatureEvent(temperature, -1); // send event | |
if (success) { | |
Serial.printf("Sent!\r\n"); | |
} else { | |
Serial.printf("Something went wrong...could not send Event to server!\r\n"); // Enable ENABLE_DEBUG to see why | |
} | |
lastTemperature = temperature; // save actual temperature for next compare | |
} | |
// setup function for WiFi connection | |
void setupWiFi() { | |
Serial.printf("\r\n[Wifi]: Connecting"); | |
#if defined(ESP8266) | |
WiFi.setSleepMode(WIFI_NONE_SLEEP); | |
WiFi.setAutoReconnect(true); | |
#elif defined(ESP32) | |
WiFi.setSleep(false); | |
WiFi.setAutoReconnect(true); | |
#endif | |
WiFi.begin(WIFI_SSID, WIFI_PASS); | |
while (WiFi.status() != WL_CONNECTED) { | |
Serial.printf("."); | |
delay(250); | |
} | |
IPAddress localIP = WiFi.localIP(); | |
Serial.printf("connected!\r\n[WiFi]: IP-Address is %d.%d.%d.%d\r\n", localIP[0], localIP[1], localIP[2], localIP[3]); | |
} | |
bool onPowerState(const String &deviceId, bool &state) { | |
return true; // request handled properly | |
} | |
// setup function for SinricPro | |
void setupSinricPro() { | |
// add device to SinricPro | |
SinricProTemperaturesensor &mySensor = SinricPro[TEMP_SENSOR_ID]; | |
mySensor.onPowerState(onPowerState); | |
// setup SinricPro | |
SinricPro.onConnected([](){ Serial.printf("Connected to SinricPro\r\n"); }); | |
SinricPro.onDisconnected([](){ Serial.printf("Disconnected from SinricPro\r\n"); }); | |
//SinricPro.restoreDeviceStates(true); // Uncomment to restore the last known state from the server. | |
SinricPro.begin(APP_KEY, APP_SECRET); | |
} | |
// main setup function | |
void setup() { | |
Serial.begin(BAUD_RATE); Serial.printf("\r\n\r\n"); | |
Serial.print("DallasTemperature Library version: "); | |
Serial.println(DALLASTEMPLIBVERSION); | |
sensors.begin(); | |
setupWiFi(); | |
setupSinricPro(); | |
} | |
void loop() { | |
SinricPro.handle(); | |
handleTemperaturesensor(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment