Прошу помощи.
Решил я сделать термометр на ESP8266, что бы удаленно следить за температурой через телеграмм бота, и в случае отклонения температуры мне бы в телегу приходило сообщение. Програмированием ни когда не занимался, делаю все в первый раз, используя примеры с разных проектов. В прицепе все работает но при критическом изменение температуры сообщение приходит только после того как ты спрашиваешь у бота "какая температура"
Решил я сделать термометр на ESP8266, что бы удаленно следить за температурой через телеграмм бота, и в случае отклонения температуры мне бы в телегу приходило сообщение. Програмированием ни когда не занимался, делаю все в первый раз, используя примеры с разных проектов. В прицепе все работает но при критическом изменение температуры сообщение приходит только после того как ты спрашиваешь у бота "какая температура"
C++:
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
float DS18b20 = 0;
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // sharing Arduino reset pin
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWireBus(2);
DallasTemperature sensors(&oneWireBus);
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#define WIFI_SSID "TP-LINK_E00C92"
#define WIFI_PASSWORD "71660905"
#define BOT_TOKEN "XXXXXXXXXXXXXXXXXXXXXXXXX"
const unsigned long BOT_MTBS = 100;
X509List cert(TELEGRAM_CERTIFICATE_ROOT);
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
unsigned long bot_lasttime;
int ledStatus = 0;
void handleNewMessages(int numNewMessages)
{
for (int i = 0; i < numNewMessages; i++)
{
String chat_id = bot.messages[i].chat_id;
String text = bot.messages[i].text;
String from_name = bot.messages[i].from_name;
if (DS18b20 > 26){
bot.sendMessage(chat_id, (String("Внимание температура ") + String(String(DS18b20)) + String(" С")), "");
}
if (from_name == "")
from_name = "Guest";
if(text == "Какая температура"){
bot.sendMessage(chat_id, (String("Температура ") + String(String(DS18b20)) + String(" С")), "");
}
}
}
void setup() {
sensors.begin();
Serial.begin(9600);
Serial.println();
configTime(0, 0, "pool.ntp.org");
secured_client.setTrustAnchors(&cert);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
}
Serial.print("WiFi connected. IP address: ");
Serial.println(WiFi.localIP());
Serial.print("Retrieving time: ");
time_t now = time(nullptr);
while (now < 24 * 3600)
{
delay(100);
now = time(nullptr);
}
display.setRotation(0);
}
void loop() {
Wire.begin(1, 3); //(SDA = GPIO1, SCL = GPIO3)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.display();
sensors.requestTemperatures();
DS18b20 = sensors.getTempCByIndex(0);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(15, 3);
display.println("-TEMPERATURA-");
display.display();
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(0, 35);
display.println(DS18b20);
display.display();
delay(1000);
sensors.requestTemperatures();
DS18b20 = sensors.getTempCByIndex(0);
if (millis() - bot_lasttime > BOT_MTBS)
{
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while (numNewMessages)
{
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
bot_lasttime = millis();
}
}
Изменено: