Based on:
- https://github.com/lucafabbri/HiGrow-Arduino-Esp/blob/master/HiGrowEsp32/HiGrowEsp32.ino
- https://github.com/Syzygianinfern0/Telegram-NodeMCU/blob/5867e792739a368a75aeb43510ba9839f94ad132/Telegram_Bot.ino
Must get ArduinoJSON 5.x
#define SECRET_SSID "" | |
#define SECRET_PASS "" | |
#define SECRET_BOT_TOKEN "" | |
#define SECRET_CHAT_ID "" |
#include "arduino_secrets.h" | |
#include <WiFi.h> | |
#include <DHT.h> | |
#include <ESP.h> | |
#include <esp_deep_sleep.h> | |
#include <WiFiClientSecure.h> | |
#include <UniversalTelegramBot.h> | |
//#define DHTTYPE DHT11 // DHT 11 | |
//#define DHTTYPE DHT21 // DHT 21 (AM2301) | |
#define DHTTYPE DHT11 // DHT 22 (AM2302), AM2321 | |
#define uS_TO_S_FACTOR 1000000LL | |
unsigned long now; | |
int DEEPSLEEP_SECONDS = 86400; | |
uint64_t chipid; | |
long timeout; | |
const int dhtpin = 22; | |
const int soilpin = 32; | |
const int POWER_PIN = 34; | |
const int LIGHT_PIN = 33; | |
// Initialize DHT sensor. | |
DHT dht(dhtpin, DHTTYPE); | |
// Temporary variables | |
static char fahrenheitTemp[7]; | |
static char humidityTemp[7]; | |
// Client variables | |
char linebuf[80]; | |
int charcount=0; | |
const char* ssid = SECRET_SSID; | |
const char* wifiPassword = SECRET_PASS; | |
const char* chatID = SECRET_CHAT_ID; | |
const char BotToken[] = SECRET_BOT_TOKEN; | |
// Initialize Telegram BOT | |
WiFiClientSecure client; | |
UniversalTelegramBot bot(BotToken, client); | |
char deviceid[21]; | |
void setup() { | |
dht.begin(); | |
Serial.begin(115200); | |
while(!Serial) { | |
; // wait for serial port to connect. Needed for native USB port only | |
} | |
esp_deep_sleep_enable_timer_wakeup(1800 * uS_TO_S_FACTOR); | |
esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF); | |
pinMode(16, OUTPUT); | |
pinMode(POWER_PIN, INPUT); | |
digitalWrite(16, LOW); | |
timeout = 0; | |
chipid = ESP.getEfuseMac(); | |
sprintf(deviceid, "%" PRIu64, chipid); | |
Serial.print("DeviceId: "); | |
Serial.println(deviceid); | |
// attempt to connect to Wifi network: | |
Serial.print("Connecting Wifi: "); | |
WiFi.begin(ssid, wifiPassword); | |
while (WiFi.status() != WL_CONNECTED) { | |
delay(500); | |
Serial.print("."); | |
} | |
Serial.println(""); | |
Serial.println("WiFi connected"); | |
} | |
void loop() { | |
digitalWrite(16, LOW); //switched on | |
sendSensorData(); | |
esp_sleep_enable_timer_wakeup(DEEPSLEEP_SECONDS * uS_TO_S_FACTOR); | |
esp_deep_sleep_start(); | |
} | |
void sendSensorData(){ | |
char message[1024]; | |
//This section read sensors | |
timeout = millis(); | |
int waterlevel = analogRead(soilpin); | |
int lightlevel = analogRead(LIGHT_PIN); | |
waterlevel = map(waterlevel, 0, 4095, 0, 1023); | |
waterlevel = constrain(waterlevel, 0, 1023); | |
lightlevel = map(lightlevel, 0, 4095, 0, 1023); | |
lightlevel = constrain(lightlevel, 0, 1023); | |
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) | |
float humidity = dht.readHumidity(); | |
// Read temperature as Fahrenheit | |
float temperature = dht.readTemperature(true); | |
// Check if any reads failed and exit early (to try again). | |
if (isnan(humidity) || isnan(temperature)) { | |
Serial.println(F("Failed to read from DHT sensor!")); | |
return; | |
} | |
float hif = dht.computeHeatIndex(temperature, humidity); | |
dtostrf(hif, 6, 2, fahrenheitTemp); | |
dtostrf(humidity, 6, 2, humidityTemp); | |
Serial.print(F("Humidity: ")); | |
Serial.print(humidity); | |
Serial.print(F("% Temperature: ")); | |
Serial.print(temperature); | |
Serial.print(F("°F Heat index: ")); | |
Serial.print(hif); | |
Serial.println(F("°F")); | |
String did = String(deviceid); | |
String water = String((int)waterlevel); | |
String light = String((int)lightlevel); | |
strcpy(message, "deviceId: "); | |
strcat(message, did.c_str()); | |
strcat(message, "\nwater: "); | |
strcat(message, water.c_str()); | |
strcat(message, "\nlight: "); | |
strcat(message, light.c_str()); | |
strcat(message, "\nhumidity: "); | |
strcat(message, humidityTemp); | |
strcat(message, "\ntemperature: "); | |
strcat(message, fahrenheitTemp); | |
bot.sendMessage(chatID, message, ""); | |
//if(lightlevel<100){ | |
// DEEPSLEEP_SECONDS = 10800; | |
//} | |
} |