Hallo zusammen : )
Ich arbeite gerade an einem Projekt, bei dem ich mir von einem Sensor die Temperatur auslesen und auf Anfrage per Telegram schicken lasse. Bei anderen Codes funktionieren sowohl Sensor, als auch Telegram-Funktion sehr gut. Nur wenn ich beides dann zusammenfüge, klappt es plötzlich nicht mehr.
Ich stelle hier mal meinen Code rein, vielleicht kann mir da ja jemand einen Tipp geben, auch wenn das Thema sehr spezifisch ist.
Wenn ich einen ganz einfachen Befehl ausführen lasse, wie wenn ich "Hallo" schreibe, der Bot "Hallo" antwortet, funktioniert das gut. Sobald ich aber, egal an welcher Stelle im Code, die Temperatur messe, hängt sich der Bot auf, dann funktioniert nicht mal mehr das "Hallo". Im seriellen Monitor wird mir dann außerdem die ganze Zeit nur "Connecting to WiFi" angezeigt.
#ifdef ESP32
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
#include <ESP8266WebServer.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 bme;
const char* ssid = "(Meine SSID)";
const char* password = "(Mein WLAN-Passwort)";
#define BOTtoken "1881464960:AAFRQaoO_T2_YwQ-jH9qh2IfMw4zD0jmBSc"
#define CHAT_ID "(Meine ID)"
#ifdef ESP8266
X509List cert(TELEGRAM_CERTIFICATE_ROOT);
#endif
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
int botRequestDelay = 1000;
unsigned long lastTimeBotRan;
void handleNewMessages(int numNewMessages) {
Serial.println("handleNewMessages");
Serial.println(String(numNewMessages));
for (int i=0; i<numNewMessages; i++) {
// Chat id of the requester
String chat_id = String(bot.messages[i].chat_id);
if (chat_id != CHAT_ID){
bot.sendMessage(chat_id, "Unauthorized user", "");
continue;
}
String text = bot.messages[i].text;
Serial.println(text);
if (text == "Hallo") {
bot.sendMessage(chat_id, "Hallo", "");
}
if (text == "Temperatur") {
float temperature = bme.readTemperature();
String tempstring = String(temperature);
String tempanzeige = "Die Temperatur beträgt gerade" + tempstring + ".\n";
bot.sendMessage(chat_id, tempanzeige, "");
}
}
}
void setup() {
Serial.begin(115200);
#ifdef ESP8266
configTime(0, 0, "pool.ntp.org"); // get UTC time via NTP
client.setTrustAnchors(&cert); // Add root certificate for api.telegram.org
#endif
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
}
void loop() {
if (millis() > lastTimeBotRan + botRequestDelay) {
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while(numNewMessages) {
Serial.println("got response");
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
lastTimeBotRan = millis();
}
}