Bueno basta de bla, bla, bla y vamos con la practica.
Si bien ya habia hecho un post en donde desarrollabamos un BOT de Telegram para Arduino, aqui traigo una actualizacion. Si recuerdan en el post que les comento usamos Python para crear un script que se encargaba de enviar comandos a el BOT, en esta ocasion vamos a hacerlo todo desde el mismo IDE de Arduino peeeeeeero ahora usando la placa NODEMCU que tiene integrado el chip ESP8266, les dejo informacion de esta aplaca en este enlace, (http://nodemcu.com/index_en.html).
Para esta practica usaremos los siguientes materiales:
1 NODEMCU (yo en concreto uso la version 1.0).
1 LED cualquier color.
1 Sensor magnetico. (como este!)
Conexion WIFI.
Manos a la obra...
Descarga Telegram.
En mi caso usare la aplicación para Windows.
Una vez instalada y que ya se registraron tienen que iniciar una conversación con @BotFather(es como el jefe de todos los Bots) para hacerlo solo tienen que seguir este link BotFather o bien buscarlo dentro de sus contactos en Telegram.
Cuando se abra la ventana de conversación tienen que escribir el comando /start y así iniciara la conversación con @BotFather. Enseguida les mostrara una lista de comandos.
Ahora enviaremos el comando /newbot para empezar a crear el Bot. Después de introducir este comando nos preguntara el nombre y el nickname que aparecerá en los chats, en caso de que ya exista un Bot llamado igual lo dirá y tendremos que elegir otro.
Si todo ha ido bien ya hemos creado nuestro Bot satisfactoriamente.
En el mensaje de respuesta nos dara el "TOKEN" para accesar a nuestro Bot desde la API, hay que guardarlo para su posterior uso.
Bien, dejemos a un lado Telegram para ir a programar Arduino.
El código es muy sencillo, de todas formas se los dejo explicado linea por linea.
Antes tendremos que instalar 3 librerias externas a el IDE de Arduino en caso de no tenerlas, estas son:
ESP8266WiFi.h
WiFiClientSecure.h
UniversalTelegramBot.h
Para hacerlo ve a ESTE LINK donde explico en unos cuantos pasos como lograrlo.
Diagrama de conexion:
Despues de tener las librerias instaladas vamos a cargar el siguiente sketch a nuestra placa.
Hay que asegurarnos de poner las credenciales de tu conexion WIFI asi como el Token de el BOT que se genero al momento de crearlo.
Si todo ha salido bien ya podemos empezar a interactuar con nuestro BOT.
Para empezar a hacerlo primero tenemos que escribir /start en telegram y veremos la respuesta de el BOT.
Seguido de esto escribimos /opciones para que el BOT nos muestre las opciones disponibles. El BOT nos desplegara unos botones con las opciones disponibles como se muestra en la siguiente imagen.
Otra caracteristica es que en el momento en el que el sensor magnetico se despegue, el BOT nos mandara un mensaje de advertencia.
Pueden modificar los textos que el BOT nos envia e incluso agregar mas opciones modificando el codigo.
No duden en compartir su experiencia con esta practica.
Hasta aqui este aporte, espero haberme explicado bien y recuerden que si les surge alguna duda escribanla en los comentarios para resolverla juntos.
PD: Les debo el video de demostracion!!! XD
Buenisima, saludos desde el grupo de whatsapp!
ResponderBorrarGracias brother
BorrarGenial!! excelente propuesta de trabajo para adaptar a la necesidad. 1000 Gracias
ResponderBorrarGracias por comentar!!
BorrarExcelente tutorial. Estoy interesado en encender un led con ifttt usando el nodeMCU. Investigando en la web, ifttt se puede configurar fácilmente para publicar un twit con esp8266.
ResponderBorrarCon ésa info. y habiendo visto éste excelente tutoríal pensé en que quizá podían solventar la idea de encender un led cuando un usuario ingresa a un área determinada mediante las recetas de localización ifttt. ¿es posible?
¡Gracias por la atención!
Hola. Gracias por comentar.
BorrarTe comento que recien me ha llegado esta maravillosa placa.
Es por eso que hare una serie de tutoriales relacionados con el IoT.
En los cuales se encuentran practicas con IFTTT, App Inventor, Firebase, Blynk y algunas otras plataformas.
Este atento a las siguientes entradas.
Hola. empecé a probar tu aporte pero no logro ver/entender la ultima parte. Cargue el skecth en mi placa, con los datos de mi red y el token del bot pero no veo como seguir, donde pone /start u /opciones. donde debo poner eso? Veo que lo escribiste en arduino center. Yo debo hacer en mi propia cuenta? Cuando va a hacer algún video practico? Debo seguir a ArduinoCenter?
ResponderBorrarHola Alejandro!
BorrarTienes razon tal vez omiti ese paso, despues de haber creado el BOT tienes que empezar una conversacion con el, buscandolo en tu lista de contactos de Telegram y enviando el comando /start
Hola amigos exelente si funciona,eso si cuando tengan todo configurado y cargado en la placa nodemcu y el telegram tienen que buscar el bot que ustedes crearon ejemplo Botlaura y luego escribir /start automaticamente contesta arduino center aclara aqui en los comentarios...ojo con eso cualquier inquietud dejen su mensaje en https://electronicadelfuturo2020.jimdo.com/contacto/
ResponderBorrary congusto les colaboramos gracias a arduino center buena por esa...
Este comentario ha sido eliminado por el autor.
ResponderBorrarPorque no puedo ver el código ?
ResponderBorrarHola. Es raro.
BorrarAqui te dejo el link de donde esta hospedado el codigo.
https://pastebin.com/SSVtEjRy
No me aparece :/
BorrarAqui lo tienes
Borrar/* Adaptado de el ejemplo original por Cesar Riojas
www.arduinocentermx.blogspot.mx
* */
#include
#include
#include
// Inicializamos la conexion WIFI con el Router
char ssid[] = "TUSSID"; // el nombre de tu Red
char password[] = "TUPASSWORD"; // la clave de tu Red
// Inicializar Telegram BOT
#define BOTtoken "TUTOKEN" // el token de tu BOT, lo obtenemos de BotFather
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
int Bot_mtbs = 50; //Tiempo medio entre el escaneo de mensajes
long Bot_lasttime; //exploracion de el ultimo mensaje
bool Start = false;
String chat_id2;
bool flag = false;
void handleNewMessages(int numNewMessages) {
Serial.println("handleNewMessages");
Serial.println(String(numNewMessages));
for (int i = 0; i < numNewMessages; i++) {
String chat_id = String(bot.messages[i].chat_id);
chat_id2 = chat_id;
String text = bot.messages[i].text;
String from_name = bot.messages[i].from_name;
if (from_name == "") from_name = "Guest";
if (text == "/start") {
String welcome = "Bienvenido a el BOT de Arduino Center, " + from_name + ".\n";
welcome += "Escribe /opciones si quieres ver lo que puedo hacer.\n\n";
//welcome += "/send_test_action : to send test chat action message\n";
bot.sendMessage(chat_id, welcome);
}
if (text == "/opciones") {
String keyboardJson = "[[\"/ledOn\", \"/ledOff\"],[\"/sensor\"]]";
bot.sendMessageWithReplyKeyboard(chat_id, "Selecciona una de las siguientes opciones:", "", keyboardJson, true);
}
if (text == "/ledOn") {
digitalWrite(13, HIGH);
bot.sendMessage(chat_id, "Led Encendido!");
}
if (text == "/ledOff") {
digitalWrite(13, LOW);
bot.sendMessage(chat_id, "Led Apagado!");
}
if (text == "/sensor") {
if (digitalRead(4) == 0) {
bot.sendMessage(chat_id, "Sensor en Reposo!");
} else {
bot.sendMessage(chat_id, "Sensor Activado!!");
}
}
}
}
void setup() {
Serial.begin(115200);
// Establecer el modo WiFi y desconectarse de un AP si fue Anteriormente conectada
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
// Intentar conectarse a la red
Serial.print("Conectando al Wifi: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi conectada");
pinMode(13, OUTPUT);
pinMode(4, INPUT_PULLUP);
}
void loop() {
if (millis() > Bot_lasttime + Bot_mtbs) {
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);
}
if (digitalRead(4) == 1) {
if (flag == false) {
bot.sendMessage(chat_id2, "Se Activo el Sensor!!!");
flag = true;
}
} else {
flag = false;
}
Bot_lasttime = millis();
}
}
Gran tutorial!!! Pregunta: En la ultima imagen, la del chat con el bot, veo tres botones grises con las leyendas /ledOn , /ledOff y /Sensor. Como se habilitan las mismas dado que son muy prácticas para evitar tipear los comandos? Gracias por el aporte
ResponderBorrarHola gracias por comentar!!
BorrarEsos botones se habilitan escribiendo el comando /opciones
Las mismas que puedes modificar a tu gusto desde el codigo del NodeMCU
Saludos
me aprarece esto al compilarlo
ResponderBorrarexit status 1
Error compilación en tarjeta NodeMCU 1.0 (ESP-12E Module).
A mi me pasa lo mismo, me dice el fichero o archivo UniversalTelegramBot no existe
ResponderBorrarHola amigo, gracias pro el post, he intentado ejecutar el codigo que presentas pero no compila tengo un PhotonH 8266 y me salen estos errores en la compilacion jsonBuffer y KeyboardBuffer, alguna idea para encontrar alguna solucion gracias
ResponderBorrarO meu só apresenta este erro.
ResponderBorrarIn file included from /home/pi/Desktop/telegramBotNodemcu/telegramBotNodemcu.ino:6:0:
/home/pi/Arduino/libraries/UniversalTelegramBot/src/UniversalTelegramBot.h:26:25: fatal error: ArduinoJson.h: No such file or directory
#include
^
compilation terminated.
exit status 1
Erro compilando para a placa NodeMCU 1.0 (ESP-12E Module)
Hola, cambia la libreria a una anterior , a mi me pasaba lo mismo
Borraralguna libreria de tipo 5.13.2
BorrarTranquilo já resolvi estava faltando incluir a biblioteca ArduinoJson.h
ResponderBorrarestá rodando tranquilo, mas fiz a comunicação com a automação do meu aquário partindo da sketch de exemplo da biblioteca FlashLed.
De qualquer forma muito obrigado pelo tutorial.
Otra falla puede ser la versión del ArduinoJson, evitar la beta
ResponderBorrarel loop no me funciona. no me envia mensaje si esta en high
ResponderBorrarNo empieza a mandar mensajes el bot hasta que no se inicie una conversación con el, es decir alimento el bot y pulso el pulsador y no manda ningún mensaje, despues de tener el chat creado /start el teclado con la opciones en el telefono cargado, si no le mando algun comando no empieza a mandarme las alarmas del pulsador?
ResponderBorrarx2 luego de un corte de energía , no envía la información del sensor...
Borrarhola buenas noches, quiero preguntarte como podría hacer para modificar el scketch para poder leer 2 sensores y que depende del sensor oprimido me muestre un mensaje en particular
ResponderBorrarEste comentario ha sido eliminado por el autor.
ResponderBorrarEste comentario ha sido eliminado por el autor.
ResponderBorrarHola. Que buen tutorial...comprare el modulo para realizar este proyecto y les comentare.
ResponderBorrarSaludos
Hola, buen dia, tengo inconveniente para que me envie mensaje a mi telegram. No se si me falta definir algo. te copio el codigo. El chat_id que puse es de un canal
ResponderBorrar/* Adaptado de el ejemplo original por Cesar Riojas
www.arduinocentermx.blogspot.mx
* */
#include
#include
#include
// Inicializamos la conexion WIFI con el Router
char ssid[] = "Wifiarduino"; // el nombre de tu Red
char password[] = "Nico5691"; // la clave de tu Red
String chat_id = "-1001367444876";
// Initialize Telegram BOT
#define BOTtoken "xxxxxxxxxxxxxxxxxx" // el token de tu BOT, lo obtenemos de BotFather
// SENSOR DE GAS:
int redLed = D7; // Output pin for LED
int greenLed = D6; // Output pin for LED
int buzzer = D3; // Output pin for Buzzer
int smokeA0 = A0;
int sensorPin = D5; // Pin de entrada de Sensor de incendio
// Tu valor limite
int sensorThres = 500;
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
void setup() {
Serial.begin(9600);
// Establecer el modo WiFi y desconectarse de un AP si fue Anteriormente conectada
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
// Intentar conectarse a la red
Serial.print("Conectando al Wifi: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi conectada");
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(smokeA0, INPUT);
pinMode(sensorPin, INPUT);
}
void loop() {
int analogSensor = analogRead(smokeA0);
Serial.print("************Medicion de GAS: ************");
Serial.println(analogSensor);
// Comprueba si ha alcanzado el valor limite
if (analogSensor > sensorThres){
Serial.println("GAS DETECTADO! ");
//digitalWrite(redLed, HIGH);
digitalWrite(greenLed, HIGH);
tone(buzzer, 70000, 2000);
// bot.getUpdates(bot.last_message_received + 1);
bot.sendMessage("-1001367444876", "Se Activo el Sensor!!!");
delay(1000);
}
else
{
digitalWrite(greenLed, LOW);
noTone(buzzer);
}
delay(300);
// aca termina el codigo del sensor de gas
Serial.println("************Medicion de INCENDIO: ************");
int digitalSensor = digitalRead(sensorPin);
Serial.println(digitalSensor);
if (digitalSensor == LOW)
{
digitalWrite(redLed, HIGH);
Serial.println("FUEGO DETECTADO");
// digitalWrite(greenLed, LOW);
tone(buzzer, 70000, 2000);
//bot.getUpdates(bot.last_message_received + 1);
bot.sendMessage("-1001367444876", "Se Activo el Sensor!!!");
delay(1000);
}
else
{
digitalWrite(redLed, LOW);
noTone(buzzer);
}
// aca termina el codigo del sensor de incendio*/
delay(300);// prepare for next data ...
}
no esta funcionando la librería :(
ResponderBorrarLa libreria ArduinoJson debes terner instala la version 5.13.2
ResponderBorrarNunca pensé usar telegram para eso, muy buen artículo, gracias.
ResponderBorrarQue buena, me servirá de mucha ayuda, gracias y un saludo
ResponderBorrar