Groupe de télégrammes : contrôle des sorties ESP32/ESP8266 (Arduino IDE)

Groupe de télégrammes : contrôle des sorties ESP32/ESP8266 (Arduino IDE)

Ce tutoriel montre comment contrôler vos cartes ESP32 ou ESP8266 via un groupe Telegram. L’utilisation d’un groupe Telegram pour contrôler vos forums peut être utile si vous souhaitez que plusieurs personnes interagissent avec un bot sur le même chat et que vous souhaitez que toutes ces personnes reçoivent des notifications du bot.

Groupe de télégrammes : contrôle des sorties ESP32/ESP8266 (Arduino IDE)

Nous avons d’autres tutoriels sur Telegram que nous vous recommandons de lire :

Aperçu du projet

Contrôlez les cartes ESP32 et ESP8266 à l'aide d'un groupe de télégrammes avec plusieurs membres
  • Dans ce didacticiel, vous allez créer un bot de télégramme pour interagir avec les cartes ESP32 ou ESP8266 ;
  • Vous allez créer un groupe où vous pourrez ajouter plusieurs personnes que vous souhaitez contrôler et recevoir des notifications du bot ;
  • Le bot sera ajouté au groupe afin que les membres puissent interagir avec lui ;
  • À titre d’exemple, nous vous montrerons comment envoyer des commandes pour contrôler les sorties et comment envoyer des réponses du bot au groupe.

Présentation du télégramme

Télégramme Messenger est un service de messagerie instantanée et de voix sur IP basé sur le cloud. Vous pouvez facilement l’installer sur votre smartphone (Android et iPhone) ou votre ordinateur (PC, Mac et Linux). C’est gratuit et sans publicité. Telegram vous permet de créer des bots avec lesquels vous pouvez interagir.

« Les bots sont des applications tierces qui s’exécutent dans Telegram. Les utilisateurs peuvent interagir avec les bots en leur envoyant des messages, des commandes et des requêtes en ligne. Vous contrôlez vos bots à l’aide de requêtes HTTPS vers l’API Telegram Bot“.

L’ESP32/ESP8266 interagira avec le bot Telegram pour recevoir et gérer les messages, et envoyer des réponses au groupe Telegram.

Installer le télégramme

Allez sur Google Play ou App Store, téléchargez et installez Télégramme.

Installer et télécharger Telegram

Création d’un bot télégramme

Les étapes suivantes sont plus faciles à suivre sur votre ordinateur. Ouvrez un navigateur, accédez au Application Web de télégramme et connectez-vous à votre compte.

Si vous avez suivi des projets précédents et que vous avez déjà un robot télégramme, vous pouvez ignorer cette section.

Dans le coin supérieur gauche, recherchez « botpère » et cliquez sur le BotFather comme indiqué ci-dessous.

Rechercher l'application Web Botfather Telegram

Une nouvelle fenêtre devrait s’ouvrir et vous serez invité à cliquer sur le début bouton. Taper /nouveaubot et suivez les instructions pour créer votre bot. Donnez-lui un nom et un nom d’utilisateur.

Si votre bot est créé avec succès, vous recevrez un message avec un lien pour accéder au bot et le jeton de robot. Enregistrez le jeton du bot car vous en aurez besoin pour que l’ESP32/ESP8266 puisse interagir avec le bot.

Créer un bot Telegram sur l'application Web Telegram

Création d’un groupe de télégrammes

L’étape suivante consiste à créer le groupe Telegram. Dans le coin supérieur gauche, cliquez sur Nouveau groupe.

Créer un nouveau télégramme Web de groupe

Ajoutez des membres à votre groupe et donnez-lui un nom.

Donner un nom à un groupe Telegram

Ajouter le bot au groupe

Une fois le groupe créé, cliquez sur le nom du groupe pour ajouter votre bot.

1643238013 914 Groupe de telegrammes controle des sorties ESP32ESP8266 Arduino IDE

Recherchez le nom de votre bot et ajoutez-le au groupe.

Ajouter un bot au groupe de télégrammes

Obtenir l’identifiant du groupe

Pour interagir avec le groupe de télégrammes, l’ESP32 doit connaître l’ID du groupe de télégrammes. Dans votre compte Telegram, ouvrez votre groupe. L’ID de groupe doit figurer sur l’URL, comme indiqué ci-dessous.

Obtenir l'ID de groupe Telegram

Enregistrez l’ID de groupe, car vous en aurez besoin plus tard.

Préparation de l’IDE Arduino

Nous programmerons le ESP32 et ESP8266 cartes utilisant l’IDE Arduino, alors assurez-vous de les avoir installées dans votre IDE Arduino.

Bibliothèque universelle de robots Telegram

Pour interagir avec le bot Telegram, nous utiliserons le Bibliothèque universelle de robots Telegram créé par Brian Lough qui fournit une interface simple pour l’API Telegram Bot.

Suivez les étapes suivantes pour installer la dernière version de la bibliothèque.

  1. Cliquez ici pour télécharger la bibliothèque Universal Arduino Telegram Bot.
  2. Aller à Esquisser > Inclure la bibliothèque > Ajouter.Bibliothèque ZIP...
  3. Ajoutez la bibliothèque que vous venez de télécharger.

Et c’est tout. La bibliothèque est installée.

Important: n’installez pas la bibliothèque via le gestionnaire de bibliothèque Arduino car il pourrait installer une version obsolète.

Pour tous les détails sur la bibliothèque, jetez un œil à la bibliothèque Universal Arduino Telegram Bot GitHub page.

Bibliothèque ArduinoJson

Vous devez également installer le ArduinoJson bibliothèque. Suivez les étapes suivantes pour installer la bibliothèque.

  1. Aller à Esquisse > Inclure la bibliothèque > Gérer les bibliothèques.
  2. Recherchez « ArduinoJson ».
  3. Installez la bibliothèque.

Nous utilisons la version 6.15.2 de la bibliothèque ArduinoJson.

1643238013 149 Groupe de telegrammes controle des sorties ESP32ESP8266 Arduino IDE

Pièces requises

Pour cet exemple, vous avez juste besoin d’une carte ESP32 ou ESP8266.

Vous pouvez utiliser les liens précédents ou accéder directement à MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

1643238013 292 Groupe de telegrammes controle des sorties ESP32ESP8266 Arduino IDE

Contrôler ESP32/ESP8266 à l’aide de Telegram Group – Sketch

Le code suivant vous permet de contrôler vos GPIO ESP32 ou ESP8266 NodeMCU en envoyant des messages à un groupe dont votre Telegram Bot est membre.

Pour que cette esquisse fonctionne pour vous, vous devez insérer vos informations d’identification réseau (SSID et mot de passe), le Telegram Bot Token et votre ID de groupe Telegram.

/*
  Rui Santos
  Complete project details at https://Raspberryme.com/telegram-group-esp32-esp8266/
  
  Project created using Brian Lough's Universal Telegram Bot Library: https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot
*/

#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 == "/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());

  bot.sendMessage(CHAT_ID, "Bot Started", "");
}

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

Afficher le code brut

Le code est compatible avec les cartes ESP32 et ESP8266 NodeMCU (il est basé sur la bibliothèque Universal Arduino Telegram Bot Exemple). Le code chargera les bonnes bibliothèques en fonction de la carte sélectionnée.

Comment fonctionne le code

Commencez par importer les bibliothèques requises.

#ifdef ESP32
  #include <WiFi.h>
#else
  #include <ESP8266WiFi.h>
#endif
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>

Informations d’identification réseau

Insérez vos informations d’identification réseau dans les variables suivantes.

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

Jeton de robot de télégramme

Insérez votre jeton Telegram Bot que vous avez reçu de Botfather sur le BOTtoken variable.

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

ID de groupe de télégrammes

Insérez votre identifiant de groupe Telegram. Il devrait commencer par un signal « -« .

#define CHAT_ID "-XXXXXXXXXX"

Créez un nouveau client WiFi avec WiFiClientSécurisé.

WiFiClientSecure client;

Créer un robot avec le jeton et le client définis précédemment.

UniversalTelegramBot bot(BOTtoken, client);

le botRequestDelay et lastTimeBotRan sont utilisés pour vérifier les nouveaux messages Telegram toutes les x nombre de secondes. Dans ce cas, le code vérifiera les nouveaux messages toutes les secondes (1000 millisecondes). Vous pouvez modifier ce délai dans le botRequestDelay variable.

int botRequestDelay = 1000;
unsigned long lastTimeBotRan;

Définir la sortie

Définissez le GPIO que vous souhaitez contrôler. Dans notre cas, nous allons contrôler GPIO 2 (LED intégrée) et son état est MEUGLER par défaut.

const int ledPin = 2;
bool ledState = LOW;

Noter: si vous utilisez un ESP8266, la LED intégrée fonctionne avec une logique inversée. Vous devez donc envoyer un MEUGLER signal pour allumer la LED et un HAUT signal pour l’éteindre.

handleNouveauxMessages()

le handleNouveauxMessages() La fonction gère ce qui se passe lorsque de nouveaux messages arrivent.

void handleNewMessages(int numNewMessages) {
  Serial.println("handleNewMessages");
  Serial.println(String(numNewMessages));

Il vérifie les messages disponibles :

for (int i=0; i<numNewMessages; i++) {

Obtenez l’ID de chat pour ce message particulier et stockez-le dans le chat_id variable. L’ID de chat nous permet d’identifier qui a envoyé le message.

String chat_id = String(bot.messages[i].chat_id);

Si la chat_id est différent de votre identifiant de groupe de chat (CHAT_ID), cela signifie que quelqu’un (qui n’est pas dans le groupe) a envoyé un message à votre bot. Si tel est le cas, ignorez le message et attendez le message suivant.

if (chat_id != CHAT_ID) {
  bot.sendMessage(chat_id, "Unauthorized user", "");
  continue;
}

Sinon, cela signifie que le message a été envoyé par quelqu’un de votre groupe, nous allons donc l’enregistrer dans le texte variable et vérifiez son contenu.

String text = bot.messages[i].text;
Serial.println(text);

le from_name La variable enregistre le nom de l’expéditeur.

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

S’il reçoit le /conduit sur message, allumez la LED et envoyez un message confirmant que nous avons reçu le message. Aussi, mettez à jour le étatled variable avec le nouvel état.

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

Envoyer un message au bot est très simple. Il vous suffit d’utiliser le envoyer le message() méthode sur la robot objet et passez comme arguments l’ID de chat du destinataire, le message et le mode d’analyse.

bool sendMessage(String chat_id, String text, String parse_mode = "")

Faites quelque chose de similaire pour le /led_off message.

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

Noter: si vous utilisez un ESP8266, la LED intégrée fonctionne avec une logique inversée. Vous devez donc envoyer un MEUGLER signal pour allumer la LED et un HAUT signal pour l’éteindre.

Enfin, si le message reçu est /Etat, vérifiez l’état GPIO actuel et envoyez un message en conséquence.

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

mettre en place()

Dans le mettre en place(), initialisez le moniteur série.

Serial.begin(115200);

Si vous utilisez l’ESP8266, vous devez utiliser la ligne suivante :

#ifdef ESP8266
  client.setInsecure();
#endif

Dans les exemples de bibliothèque pour l’ESP8266, ils disent : « C’est le moyen le plus simple pour que cela fonctionne. Si vous transmettez des informations sensibles ou contrôlez quelque chose d’important, veuillez utiliser certStore ou au moins client.setFingerPrint“.

Définissez la LED comme sortie et réglez-la sur LOW lorsque l’ESP démarre pour la première fois :

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

Initialiser le Wi-Fi

Initialisez le Wi-Fi et connectez l’ESP à votre réseau local avec le SSID et le mot de passe définis précédemment.

WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.println("Connecting to WiFi..");
}

boucler()

Dans le boucler(), vérifiez l’arrivée de nouveaux messages toutes les secondes.

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

Lorsqu’un nouveau message arrive, appelez le handleNouveauxMessages() une fonction.

while(numNewMessages) {
  Serial.println("got response");
  handleNewMessages(numNewMessages);
  numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}

C’est à peu près comme ça que le code fonctionne.

Manifestation

Téléchargez le code sur votre carte ESP32 ou ESP8266. N’oubliez pas d’aller à Outils > Conseil et sélectionnez la carte que vous utilisez. Aller à Outils > Port et sélectionnez le port COM auquel votre carte est connectée.

Après avoir téléchargé le code, appuyez sur le bouton EN/RST embarqué ESP32/ESP8266 pour qu’il commence à exécuter le code. Ensuite, vous pouvez ouvrir le moniteur série pour vérifier ce qui se passe en arrière-plan.

Accédez à votre compte Telegram et ouvrez le groupe.

Envoyez les commandes suivantes et voyez le bot répondre :

  • /conduit sur allume la LED.
  • /led_off éteint la LED.
  • /Etat demande l’état actuel de la LED.
Contrôlez ESP32 ESP8266 à l'aide de la démonstration de groupe de télégrammes

La LED embarquée doit s’allumer et s’éteindre en conséquence (la LED embarquée ESP8266 fonctionne en sens inverse, elle s’éteint lorsque vous envoyez /conduit sur et quand vous envoyez /led_off).

Lorsque vous ajoutez votre bot de télégramme à un groupe, tous les membres du groupe peuvent interagir avec le bot et recevoir des messages du bot. Par exemple, dans ce cas, nous pouvons tous les deux (Sara et Rui) contrôler le bot et voir les commandes que l’autre envoie. De plus, dans un projet avec des notifications, nous serions tous les deux informés sur le groupe.

Vous pouvez ajouter d’autres personnes au groupe, par exemple tous les membres de la famille.

Carte ESP32 LED intégrée allumée HIGH

Sur le moniteur série, vous devriez voir que l’ESP reçoit les messages.

Control ESP32 ESP8266 Sorties Telegram Serial Monitor Démonstration

Conclusion

Dans ce didacticiel, vous avez appris à recevoir et à envoyer des messages à l’ESP32 ou à l’ESP8266 à l’aide d’un groupe Telegram. L’utilisation d’un groupe Telegram pour contrôler votre ESP32 peut être avantageuse par rapport à un seul chat, si vous souhaitez que plusieurs personnes puissent contrôler et surveiller le même tableau.

Nous vous avons montré un exemple simple sur la façon de contrôler une sortie. L’idée est de modifier le projet pour ajouter plus de commandes pour exécuter d’autres tâches. Par exemple, vous pouvez demander des lectures de capteur ou envoyer un télégramme lorsqu’un mouvement est détecté.

L’avantage d’utiliser Telegram pour contrôler vos cartes ESP, c’est que tant que vous avez une connexion Internet (et vos cartes aussi), vous pouvez les contrôler et les surveiller de n’importe où dans le monde.

Nous espérons que vous avez trouvé ce projet intéressant.

Apprenez-en plus sur l’ESP32 et l’ESP8266 avec nos ressources :

Merci d’avoir lu.