Tech: Telegram - Manual

by S00F in Craft > Digital Graphics

155 Views, 0 Favorites, 0 Comments

Tech: Telegram - Manual

Schermafbeelding 2022-10-11 om 17.43.21.png

Bestuur je leds met Telegram - niet alleen aan/uit

Supplies

- Telegram

- LED strip

- Arduino IDE

- Wifi connection (not 5GHz)

Download Telegram

Eerst heb ik Telegram gedownload.

Vervolgens ging ik de stappen volgen van: https://randomnerdtutorials.com/telegram-control-esp32-esp8266-nodemcu-outputs/

Botfather

Schermafbeelding 2022-10-11 om 17.19.19.png

Zoek "botfather" in je chats.

Start het gesprek door "/start"

Stuur vervolgens "/newbot"

Kies een naam voor je bot en een username voor je bot.

Je krijgt vervolgens een token voor je bot > deze heb je later voor je code nodig.



IDbot

Zoek vervolgens weer in de chats, deze keer de naam "IDBot"

Zelf heb ik deze keer gebruik gemaakt van de link "https://t.me/myidbot"

App "/getid" om je persoonlijke ID te krijgen.


Installeer Universal Telegram Bot Library

Schermafbeelding 2022-10-11 om 17.18.07.png

Download Universal Telegram Bot Library met deze link: https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot/archive/master.zip.

Ga naar Sketch > Include Library > Add.ZIP Library

Kies vervolgens de Zip die je net gedownload hebt.


Installeer ArduinoJson Library

Schermafbeelding 2022-10-11 om 17.17.11.png

Ga naar Sketch > Include Library > Amanage Libraries

Zoek "ArduinoJson" en installeer het.



Code Voor in Arduino IDE

/*
Rui Santos
Complete project details at https://RandomNerdTutorials.com/telegram-control-esp32-esp8266-nodemcu-outputs/

Project created using Brian Lough's Universal Telegram Bot Library: https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot
Example based on the Universal Arduino Telegram Bot Library: https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot/blob/master/examples/ESP8266/FlashLED/FlashLED.ino
*/

#ifdef ESP32
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h> // Universal Telegram Bot Library written by Brian Lough: https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot
#include <ArduinoJson.h>

// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

// Initialize Telegram BOT
#define BOTtoken "XXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" // your Bot Token (Get from Botfather)

// Use @myidbot to find out the chat ID of an individual or a group
// Also note that you need to click "start" on a bot before it can
// message you
#define CHAT_ID "XXXXXXXXXX"

#ifdef ESP8266
X509List cert(TELEGRAM_CERTIFICATE_ROOT);
#endif

WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);

// Checks for new messages every 1 second.
int botRequestDelay = 1000;
unsigned long lastTimeBotRan;

const int ledPin = 2;
bool ledState = LOW;

// Handle what happens when you receive new messages
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;
}

// Print the received message
String text = bot.messages[i].text;
Serial.println(text);

String from_name = bot.messages[i].from_name;

if (text == "/start") {
String welcome = "Welcome, " + from_name + ".\n";
welcome += "Use the following commands to control your outputs.\n\n";
welcome += "/led_on to turn GPIO ON \n";
welcome += "/led_off to turn GPIO OFF \n";
welcome += "/state to request current GPIO state \n";
bot.sendMessage(chat_id, welcome, "");
}

if (text == "/led_on") {
bot.sendMessage(chat_id, "LED state set to ON", "");
ledState = HIGH;
digitalWrite(ledPin, ledState);
}

if (text == "/led_off") {
bot.sendMessage(chat_id, "LED state set to OFF", "");
ledState = LOW;
digitalWrite(ledPin, ledState);
}

if (text == "/state") {
if (digitalRead(ledPin)){
bot.sendMessage(chat_id, "LED is ON", "");
}
else{
bot.sendMessage(chat_id, "LED is OFF", "");
}
}
}
}

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

pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, ledState);

// Connect to Wi-Fi
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
#ifdef ESP32
client.setCACert(TELEGRAM_CERTIFICATE_ROOT); // Add root certificate for api.telegram.org
#endif
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
// Print ESP32 Local IP Address
Serial.println(WiFi.localIP());
}

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


Chat With Bot

Schermafbeelding 2022-10-11 om 17.30.15.png

Zoek de bot username bij je chats.

Typ vervolgens "/start"

Volgens krijg je het bericht:


Welcome, [Name].

Use the following commands to control your outputs.

/led_on to turn GPIO ON 

/led_off to turn GPIO OFF 

/state to request current GPIO state


Vervolgens kan je de codes gebruiken om je led lampen te besturen.

Fouten

Ik heb op de plekken waar LOW staat veranderen naar HIGH en andersom, want anders werkte de aan commando en uit commando op telegram andersom.

Ik had soms ook dat de bot niet reageerde, maar dat kwam doordat ik mijn hotspot niet goed aan had staan.


Eigenlijk wilde ik de lamp van mijn Ledstrip besturen, maar ik ben er niet achter gekomen hoe ik de juiste lampjes kon linken aan de bot.