ChatBot con Telegram y Arduino usando Nodejs

Les quiero compartir un proyecto que es muy divertido y muestra la facil que es hacer proyecto en arduino, un chatbot es un sistema automatizado en mensajeria, que responde mensaje o manda dependiento del codigo, lo genial es poder mandar ordenes a nuestro arduino por nuestro celular y que nos informe si algo pasa; hay muchos programa de mensajería como Facebook Masenger o whatsapp o skype y esta ves les mostrá con un programa libre que es muy similar a Whatsapp que es telegram. este es mi primera ves que comparto algo por aqui en el foto de Arduino espero les guste :slight_smile:

Video Youtube

si quieren este proyecto pero en video aqui esta la playlist:

IDEA

Tendremos nuestro Arduino, una PC o RasberryPi y conexiona a Internet , conectando el Arduino usando cable usb; desde nuestro celular por medio de Telegram podramos mandar el mensaje "Encender" se encendera el led; si mandamos "Apagar" se apaga el LED, al precionar un boton en nuestro arduino nos manda un mensaje a nuestro celular :slight_smile:

Diagrama:

Codigo de Arduino:

int Boton = 2;
int Led = 9;

void setup() {
  Serial.begin(9600);
  pinMode(Boton, INPUT_PULLUP);
  pinMode(Led, OUTPUT);
}

void loop() {
  if (digitalRead(Boton) == 0) {
    Serial.println("H");
    delay(500);
  }

  if (Serial.available()) {
    char Letra = Serial.read();
    if (Letra == 'H') {
      digitalWrite(Led, HIGH);
    }
    else if (Letra == 'L') {
      digitalWrite(Led, LOW);
    }
  }
}

Crear Bot

Necesitamos crear un bot, desde nuestra aplicasion de Telegram o pagina web en nuestra PC, hablamos con, botfather y le mandamos el comando:

/newbot

y nos pregunta el nombre del bot y el username (este tiene que terminar con bot, el usuario debe ser unico), nos dara un token que usaremos para automedicarnos cuando usemos el nodejs

Nodejs

Descargar Nodejs: Node.js

Nodejs es una heramienta que se utiliza en terminal por lo cual abre tu terminal ya sea cmd o la linux terminal o la de mac, crearemos un folder para el proyecto y entramos a esa carpeta por lo cual puede hacer el siquiente comando

mkdir chatbot
cd chatbot

y como creamos un nuevo paquete nodejs para esto ejecutamos el comando

npm init

nos pregunta algunas pregunta, nombre del proyecto, vercion, creador y otras; todas le damos enter o escribimos otro valor si lo deseamos

para instalar las librerias usamos este codigo:

npm i node-telegram-bot-api
npm i serialport

por ultimo en nuestro arduino ide veremos en que puerto esta el arduino como COM5 o /dev/ttyUSB0
y ponemos el token

dentro de nuestra carpeta creamos un archivo llamado index.js con el siquiente codigo

const TelegramBot = require('node-telegram-bot-api');

const token = 'xxx';//Cambiar por el token de telegram
const bot = new TelegramBot(token, {
  polling: true
});
var IdMiChat = 000;//cambiar por tu ID del chat

var SerialPort = require('serialport');
var MiPuerto = new SerialPort('PuertoArduino', {
  baudRate: 9600,
  autoOpen: true
});

bot.on('message', (msg) => {
  const chatId = msg.chat.id;
  console.log("El ID del char" + chatId);
  var Mensaje = msg.text;
  if (Mensaje == "Encender") {
    console.log("encendiendo el led");
    bot.sendMessage(chatId, 'Encendere el led');
    MiPuerto.write("H");
  } else if (Mensaje == "Apagar") {
    console.log("apagar el led");
    bot.sendMessage(chatId, 'Apagare el led');
    MiPuerto.write("L");
  }
});

MiPuerto.setEncoding('utf8');

MiPuerto.on('data', function(data) {
  console.log("Lo que entro es " + data);
  if (data[0] == 'H') {
    console.log("Boton Precionado");
    bot.sendMessage(IdMiChat, "Se preciono el boton");
  }
});

para ejecutarlo usamos

node index.js

y para matarlo usamos Ctrl + c

Hoy podemos mandar el mensaje Encender o Apagar, se encendera el led Yeah.....

para recivir el mensaje cuando mandamos nos muestra un terminal, un numero que es el ID con nuesro chat copiamos y lo pegamos en IdMiChat y con eso la poxima ves que lo ejecutemos el codigo si precionamos el boton nos enviaran un mensjae.

Espero que esta media explicasion les ayude a entender, si desea mas a profundidas les recomiendo ver el video.
Esta es mi primera ves, nos vemos en otro foro :smiley:

Buen aporte!!!

Pero quizás sea más sencillo aún si se utiliza Node-Red instalado por ejemplo en una Raspberry, en lugar de nodejs.

Saludos!!

Es muy facil hacerlo con nodejs, también lo es con Node-Red pero recuerda que Node-Red se base en nodejs de modo que decir que será mas facil es solo porque la interfaz grafica te resulta mas cómoda pero si tienes que programar algo vuelves a node.