ESP8266 Temperatur über Telegram

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();

}
}

Warum kannst du den Sketch nicht komplett in Code-Tags setzen
Dann wird dieser bestimmt besser lesbar.
Das kannst du auch noch nachträglich machen.

Es gibt eine automatische Funktion um den Code eines kompletten Sketches zu posten
Nur drei Schritte in 30 Sekunden:

In der Arduino-IDE

  • 1.) Drücke Strg-T um den Code automatisch formatieren zu lassen
  • 2.) Mache einen Rechtsklick mit der Maus und wähle die Option Für Forum kopieren
  • 3.) Wechsle zum Posting und drücke Strg-V um den Inhalt der Zwischenablage einzufügen
    fertig

vgs