meta data de esta página
  •  

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
electronica:esp8266:telegram [2016/09/03 18:59] – [Enviar mensajes desde el ESP8266 mediante Telegram] lcelectronica:esp8266:telegram [2023/01/18 14:36] (actual) – editor externo 127.0.0.1
Línea 1: Línea 1:
 +{{tag>esp8266 arduino telegram nodemcu}}
 ===== Enviar mensajes desde el  ESP8266 mediante Telegram ===== ===== Enviar mensajes desde el  ESP8266 mediante Telegram =====
  
Línea 9: Línea 10:
   * Si escribimos algo y enviamos el bot nos responde con lo mismo   * Si escribimos algo y enviamos el bot nos responde con lo mismo
  
 +Una vez que hemos escrito algo en nuestro chat con el bot procederemos a ver como podemos conocer el identificador (chat_id) ya que lo vamos a necesitar posteriormente .
 +Para ello abrimos nuestro navegador y escribimos lo siguiente :
 +<code>https://api.telegram.org/bot<token>/getUpdates?offset=0 </code>
 +donde token es el identificador que nos había enviado el @bootFather.
  
 +Un ejemplo sería :
 +<code>https://api.telegram.org/bot266211256:ABE1X7V2MJSxOVB-iK_a_4dXi6f0Uf405hj/getUpdates?offset=0</code> y en el navegador aparecería un resultado como el siguiente:
 +<code>{"ok":true,"result":[{"update_id":546293813,
 +"message":{"message_id":29,"from":{"id":546293813,"first_name":"Intrusos"},"chat":{"id":204236614,"first_name":"Intrusos","type":"private"},"date":1473372888,"text":"Hola"}}]}</code>
  
 +donde podemos observar que el chat_id es ->204236614
  
 +Una vez creado nuestro bot vamos a utilizar el mismo circuito que utilizamos para el servidor web, pero ahora haremos que nos envié la temperatura y la humedad cuando se lo pidamos mediante telegram
  
 +{{:electronica:esp8266:nodemcudht11_bb.png?600|}}
 +
 +<sxh c>
 +/* Código original de https: //github.com/gusman126/arduino_telegram_bot
 +  Modificado por wiki.intrusos.info
 +*/
 +
 +#include <WiFiClientSecure.h>
 +#include <ESP8266WiFi.h>
 +#include "DHT.h"
 +
 +
 +// Definimos los parámetros de conexión a la WIFI
 +const char *ssid = "intrusos";   // no superior a 32 caracteres
 +const char *pass = "xxxxxxxxxx";   // contraseña wifi
 +int status = WL_IDLE_STATUS;
 +
 +// Datos del Bot de Telegram
 +String BOTtoken = "bot2xxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";  //token Ojo hay que porner bot y seguido el token
 +String Chat_id = "xxxxxxxxx"; // Chat_id
 +String Texto_enviar = "";
 +String Texto_recibido = "";
 +String Update_id = "";
 +String anterior_upd = "";
 +String Nueva_upd = "";
 +String Respuesta = "";
 +
 +// Variables del codigo de tiempo
 +int Inicio;
 +int Termino;
 +int Intervalo = 15000;
 +unsigned long elapsed = 0;
 +unsigned long previous;
 +boolean respondio = false;
 +
 +// Pin del ESP8266 al que está conectado.
 +// El GPIO 4 corresponde al D2 del ESP8266-12E NodeMCU v3
 +#define DHTPIN 4
 +
 +// tipo de sensor DHT
 +#define DHTTYPE DHT11   // DHT 11 
 +
 +// Inicializa el sensor
 +DHT dht(DHTPIN, DHTTYPE);
 +
 +WiFiClientSecure client; // inicio del cliente seguro
 +IPAddress server(149, 154, 167, 200); // IP de api.telegram.org
 +
 +
 +void setup() {
 +
 +  Serial.begin(115200);
 +
 +  // Conecta a la WIFI
 +  WiFi.begin(ssid, pass);
 +  /// }
 +
 +  while (WiFi.status() != WL_CONNECTED) {
 +    delay(500);
 +    Serial.print(".");
 +  }
 +  Serial.println("");
 +  Serial.println("Conectado a la red WiFi");
 +  Serial.println("Dirección IP: ");
 +  Serial.println(WiFi.localIP());
 +
 +  // Comprobamos la conexion a Telegram
 +  if (client.connect(server, 443)) {
 +    Serial.println(".... conectado a Telegram");
 +  }
 +  // y enviamos el texto de inicio
 +  Enviar_texto(" Inicio del Sistema .......");
 +
 +  // Comprobamos el ultimo mensaje
 +  Ultimo_msg();
 +  previous = millis();
 +
 +}
 +
 +
 +void loop() {
 +  elapse();
 +  Leer_msg(); // leemos el ultimo mensaje
 +
 +  // Comprobamos que haya pasado xx seg desde la ultima vez
 +  if (elapsed > 500) {
 +
 +    anterior_upd = Update_id; // Guardamos la anterior Update
 +    Ultimo_msg (); // comprobamos el ultimo mensaje
 +    delay(1000); // Esperamos a recibir los datos
 +    Leer_msg(); // Leemos los datos
 +    busca_upd_id(Respuesta); // buscamos la Update_id y la guardamos
 +    busca_texto(Respuesta); // Buscamos el Texto del mensaje
 +    // Si ha cambiado la Update_id seguimos con el codigo
 +    if (anterior_upd != Nueva_upd) {
 +      //Serial.println("Es diferente Update");
 +      Responder_mensaje(Texto_recibido);
 +    } else {
 +    } // No hacemos nada si es el mismo Upd_id
 +  }
 +} // Fin Loop
 +
 +
 +// Orden para buscar el texto del mensaje
 +void busca_texto( String Rsp ) {
 +  Texto_recibido = "";
 +  int  start = Rsp.indexOf("text") + 7 ; // Buscamos el indice ( numero ) de la palabra "text" y le añadimos 7
 +  int  fin = Rsp.indexOf("}}]}") - 1; // Buscamos el indice del texto }}]} y le restamos uno
 +  Texto_recibido = (Rsp.substring(start, fin)); // Guardamos el resultado en la variable
 +}
 +
 +//Orden para buscar la Update_id
 +void busca_upd_id( String Rsp ) {
 +  anterior_upd = Update_id; // Guardamos la anterior Update_id para comprobar
 +  int  start = Rsp.indexOf("update_id") + 11 ; // Buscamos el indice del texto y le añadimos 11
 +  int  fin = Rsp.indexOf("message") - 2; // Buscamos el indice del texto y le restamos 2
 +  Update_id = Rsp.substring(start, fin); // Guardamos la Update_id
 +  Nueva_upd = Rsp.substring(start, fin); // Volvemos a guardar la Update_id pero en la variable de nueva
 +}
 +
 +// Orden para pedir el ultimo mensaje, vemos que se usa el Offset=-1&limit=1 para mostrar solo el ultimo
 +void Ultimo_msg () {
 +  if (client.connect(server, 443)) {
 +    // client.println("GET /botxxxx/getUpdates?offset=-1&limit=1");
 +    client.println("GET /" + BOTtoken + "/getUpdates?offset=-1&limit=1");
 +  }
 +  previous = millis(); // Guardamos los milisegundos para comprobar que haya pasado X tiempo entre lecturas
 +}
 +
 +//Leemos el mensaje completo y lo añadimos a una variable caracter por caracter
 +void Leer_msg () {
 +  Respuesta = ""; // Vaciamos la variable
 +  while (client.available()) { // Mientras no lo lea todo seguira leyendo
 +    char inChar = client.read(); // Lee el caracter
 +    Respuesta += inChar; // Añadimos caracter a caracter el mensaje
 +  }
 +}
 +
 +//Orden para comprobar el tiempo entre lecturas
 +void elapse() {
 +  elapsed = millis() - previous;
 +}
 +
 +
 +//Orden para enviar cualquier texto a Telegram
 +void Enviar_texto( String Texto_enviar ) {
 +  if (client.connect(server, 443)) {
 +    client.println("GET /" + BOTtoken + "/sendMessage?chat_id=" + Chat_id + "&text=" + Texto_enviar + "");
 +  }
 +}
 +
 +//Aqui añadiremos las ordenes de respuesta del arduino
 +void Responder_mensaje ( String mensaje ) {
 +
 +  if (mensaje == "Estado") {
 +    Enviar_texto("Conectado");
 +    respondio = true;
 +  }
 +  else if (mensaje == "Temperatura") {
 +    float t = dht.readTemperature(); // Obtiene la Temperatura en Celsius
 +    Enviar_texto(String(t) + "ºC");
 +    respondio = true;
 +  }
 +  else if (mensaje == "Humedad") {
 +    float h = dht.readHumidity(); // Obtiene la Humedad
 +    Enviar_texto(String(h) + "%");
 +    respondio = true;
 +  }
 +
 +  if (respondio == true) { // mostramos el texto que se ha entendio
 +    Serial.println("El Texto : " + mensaje + " Lo he entendio perfectamente");
 +  }
 +  else {
 +    Serial.println("El Texto : " + mensaje + " No Lo he entendio");
 +
 +  }
 +  respondio = false ; // Dejamos en falso que entendio el mensaje
 +}
 +
 +////////// Fin del codigo
 +</sxh>
 ==== Referencias  ==== ==== Referencias  ====
 +  * https://github.com/gusman126/arduino_telegram_bot
   * https://github.com/Lstt2005/ESP8266_I.O.Broker/tree/master/Arduino/Telegram/TelegramBot-master   * https://github.com/Lstt2005/ESP8266_I.O.Broker/tree/master/Arduino/Telegram/TelegramBot-master
   * https://github.com/CasaJasmina/TelegramBot-Library   * https://github.com/CasaJasmina/TelegramBot-Library
   * https://create.arduino.cc/projecthub/Arduino_Genuino/telegram-bot-library-ced4d4   * https://create.arduino.cc/projecthub/Arduino_Genuino/telegram-bot-library-ced4d4
   * http://trasteandoarduino.com/2016/03/21/telegram-contronlando-tu-servidor-hablandole-a-un-bot/   * http://trasteandoarduino.com/2016/03/21/telegram-contronlando-tu-servidor-hablandole-a-un-bot/
 +  * http://www.xatakamovil.com/aplicaciones/llegan-los-bots-a-telegram-como-crear-el-tuyo-propio