comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Arduino + Telegram BOT + Python

  • 6 Respuestas
  • 4379 Vistas

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado Riojas

  • *
  • Underc0der
  • Mensajes: 54
  • Actividad:
    0%
  • Reputación 4
  • -RIOJAS
    • Ver Perfil
    • Arduino Center
    • Email
« en: Marzo 07, 2017, 04:56:42 pm »

Que tal underc0ders!!!
Ahora les traigo este aporte en el que aprenderemos a hacer un "bot" de Telegram que interactue con Arduino. Espero les guste y manos a la obra!!

Materiales necesarios:
1 Arduino UNO.
1 Sensor de Temperatura y Humedad DHT11.
2 Leds cualquier color.
1 Protoboard.
Cables para conexión.

Les dejo la conexión de los componentes en la siguiente imagen:


Lo primero que tenemos que hacer es descargar Telegram. En este link están todas las versiones, para móviles y Desktop.
No tienes permisos para ver links. Registrate o Entra con tu cuenta
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 No tienes permisos para ver links. Registrate o Entra con tu cuenta 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.


Código: C
  1. #include "DHT.h" //Incluimos la libreria DHT para el control de el Sensor DHT 11.
  2.  
  3. #define PinOutDHT 3 //Definimos el Pin 3 para la lectura de el sensor.
  4. #define TypeDHT DHT11 //Definimos el Tipo de Sensor.
  5. DHT dht(PinOutDHT, TypeDHT); //Cramos un objeto dht con las variables definidas anteriormente.
  6.  
  7. const int led1=12; //Declaramos la variable led1.
  8. const int led2=2; //Declaramos la variable led2.
  9.  
  10. unsigned int dato; //Declaramos una variable "dato" en donde se guardaran los valores recibidos desde Python.
  11.  
  12. void setup() {
  13.   Serial.begin(9600); //Inicializamos la comunicacion Serial a 9600 Baudios
  14.   pinMode(led1,OUTPUT);
  15.   pinMode(led2,OUTPUT); //Definimos los pines de los leds como Salidas
  16.  
  17. }
  18.  
  19. void loop() {
  20.     while(Serial.available()>0){  //Comprobamos que la comunicacion serial este disponible.
  21.       dato=Serial.read(); //Leemos el puerto serial y guardamos los valores en la variable "dato"
  22.      
  23.       /*En el siguiente codigo se compara el valor de "dato" y segun sea el caso actua de distintas maneras*/
  24.       //Enciende o apaga los leds
  25.         if(dato=='Y')digitalWrite(led1,HIGH);
  26.         if(dato=='N')digitalWrite(led1,LOW);
  27.         if(dato=='E')digitalWrite(led2,HIGH);
  28.         if(dato=='F')digitalWrite(led2,LOW);
  29.  
  30.       //Manda Temperatura o Humedad segun el caso
  31.         if(dato=='T')Serial.println(int(dht.readTemperature())+String("°C"));
  32.         if(dato=='H')Serial.println(int(dht.readHumidity())+String("%"));
  33.        
  34.     }
  35.  
  36. }


Después de haber cargado el programa a Arduino nos iremos a programar en Python, yo he usado Python 2.7 y corre sin ningun problema.
Aquí los links para descargar las herramientas:
Python : No tienes permisos para ver links. Registrate o Entra con tu cuenta
Libreria Telepot: No tienes permisos para ver links. Registrate o Entra con tu cuenta

Nota: Al ejecutar el código de Python háganlo desde la terminal, asi no les marcara ningun error relacionado con el puerto COM de Arduino.
Nota 2: Antes de ejecutar el código de Python asegúrense de tener cerrado el monitor serial en Arduino.
Aclarados estos puntos les dejo el código en Python.

Código: Python
  1. #!/usr/bin/python
  2. import telepot, time, serial, sys
  3. ser = serial.Serial('COM10', 9600)
  4.  
  5. print('Bot activado.')
  6. print('Esperando comandos...')
  7.    
  8. def handle(msg):
  9.  
  10.         userName = msg['from']['first_name']
  11.  
  12.         content_type, chat_type, chat_id = telepot.glance(msg)
  13.  
  14.         if (content_type == 'text'):
  15.                 command = msg['text']
  16.                 print ('Comando obtenido: %s' % command)
  17.  
  18.                 if  '/start' in command:
  19.                         bot.sendMessage(chat_id, "Hola, "+userName+"\n"+"Mi nombre es: BotDuino,Te muestro la lista de comandos que puedo reconocer:"+"\n"
  20.                                         +"/encender_led1"+" -Enciendo el Led 1"+"\n"
  21.                                         +"/apagar_led1"+" -Apago el Led 1"+"\n"
  22.                                         +"/encender_led2"+" -Enciendo el Led 2"+"\n"
  23.                                         +"/apagar_led2"+" -Apago el Led 2"+"\n"
  24.                                         +"/ubicacion"+" -Envio mi ubicacion actual"+"\n"
  25.                                         +"/humedad"+" -Te muestro la Humedad en el ambiente"+"\n"
  26.                                         +"/temperatura"+" -Te muestro la temperatura")
  27.  
  28.                 elif '/encender_led1' in command:
  29.                         ser.write(b'Y')
  30.                         bot.sendMessage(chat_id, "Led 1 Encendido!")
  31.  
  32.                 elif '/apagar_led1' in command:
  33.                         ser.write(b'N')
  34.                         bot.sendMessage(chat_id, "Led 1 Apagado!")
  35.        
  36.                 elif '/encender_led2' in command:
  37.                         ser.write(b'E')
  38.                         bot.sendMessage(chat_id, "Led 2 Encendido!")
  39.  
  40.                 elif '/apagar_led2' in command:
  41.                         ser.write(b'F')
  42.                         bot.sendMessage(chat_id, "Led 2 Apagado!")
  43.  
  44.                 elif '/ubicacion' in command:
  45.                         bot.sendLocation(chat_id, "cambiar por latitud","cambiar por longitud")
  46.  
  47.                 elif '/temperatura' in command:
  48.                         ser.write(b'T')
  49.                         linea=ser.readline()
  50.                         bot.sendMessage(chat_id, "Temperatura: " +linea)
  51.  
  52.  
  53.                 elif '/humedad' in command:
  54.                         ser.write(b'H')
  55.                         linea=ser.readline()
  56.                         bot.sendMessage(chat_id, "Humedad Relativa: " +linea)
  57.                 else:
  58.                     bot.sendMessage(chat_id, "Lo siento, no reconozco ese comando!")
  59.  
  60. bot = telepot.Bot('"cambiar por tu TOKEN"')
  61.  
  62. bot.message_loop(handle)
  63.  
  64. # Espera por nuevos mensajes
  65. while 1:
  66.         time.sleep(20)
  67.  

Abran una terminal en Windows y ejecuten el script que acabamos de hacer
Código: Bash
  1. python "nombreFihero".py
Si no les ha marcado ningún error verán algo como esto:

Este sera nuestro "monitor" en el cual se mostraran los mensajes que mande el usuario a nuestro Bot.

Para iniciar la conversación tenemos que enviar el comando "/start", y nos contestara de esta manera mostrando los comandos a los que puede reaccionar. Así se vera en Telegram y en la terminal:


Aquí un vídeo del resultado:


Cabe señalar que esto es solo el comienzo ya que con este método podrán controlar infinidad de dispositivos en Arduino, como relevadores para prender o apagar dispositivos de 120 v o lo que se les venga a la mente.

Hasta aquí este post, espero les guste y les sea de utilidad.

PD: Muchas gracias a @xcivix o @Panda por mi nueva firma!!!

Hasta el próximo post underc0ders.

Desconectado Panda

  • *
  • Underc0der
  • Mensajes: 11
  • Actividad:
    0%
  • Reputación 0
  • Saludos
    • Ver Perfil
    • Email
« Respuesta #1 en: Marzo 07, 2017, 05:28:24 pm »
De nada amigo Riojas! Fue un placer hacerte la firma! Muy buen post!

Desconectado rush

  • *
  • Underc0der
  • Mensajes: 377
  • Actividad:
    0%
  • Reputación 7
    • Ver Perfil
  • Skype: iruxh1773
« Respuesta #2 en: Marzo 07, 2017, 07:17:31 pm »
Lo probare y te cuento, se ve interesante ;)
No tienes permisos para ver links. Registrate o Entra con tu cuenta


Desconectado rob01_alo06

  • *
  • Underc0der
  • Mensajes: 50
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #3 en: Marzo 07, 2017, 07:58:32 pm »
Holaa Riojas, soy nuevo en este mundillo pero me parece muy interesante, estoy en 4 ESO y estamos con Arduino y el S4

Muy interesante el aporte!!
Un saludo!!

Desconectado Riojas

  • *
  • Underc0der
  • Mensajes: 54
  • Actividad:
    0%
  • Reputación 4
  • -RIOJAS
    • Ver Perfil
    • Arduino Center
    • Email
« Respuesta #4 en: Marzo 08, 2017, 01:13:18 pm »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Holaa Riojas, soy nuevo en este mundillo pero me parece muy interesante, estoy en 4 ESO y estamos con Arduino y el S4

Muy interesante el aporte!!
Un saludo!!

Hola, pasate por este post de Snap4Arduino.
No tienes permisos para ver links. Registrate o Entra con tu cuenta

Desconectado Bubupi27

  • *
  • Underc0der
  • Mensajes: 1
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #5 en: Julio 13, 2018, 05:04:44 am »
Hey si aun sigues vivo quizas me puedas ayudarme... Me sale este error:
C:\Python27>python bot.py
Traceback (most recent call last):
  File "bot.py", line 3, in <module>
    ser = serial.Serial('COM3', 9600)
AttributeError: module 'serial' has no attribute 'Serial'

Tienes alguna idea de como solucionarlo????

Gracias :)

Desconectado hielasangre

  • *
  • Underc0der
  • Mensajes: 124
  • Actividad:
    5%
  • Reputación 0
    • Ver Perfil
« Respuesta #6 en: Agosto 27, 2018, 03:24:31 am »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Hey si aun sigues vivo quizas me puedas ayudarme... Me sale este error:
C:\Python27>python bot.py
Traceback (most recent call last):
  File "bot.py", line 3, in <module>
    ser = serial.Serial('COM3', 9600)
AttributeError: module 'serial' has no attribute 'Serial'

Tienes alguna idea de como solucionarlo????

Gracias :)
pip install serial

 

¿Te gustó el post? COMPARTILO!



Arduino + Snap4Arduino "Hola Mundo"

Iniciado por Riojas

Respuestas: 1
Vistas: 1657
Último mensaje Febrero 19, 2017, 09:31:50 pm
por rreedd
Arduino + Snap4Arduino "Juego PONG" [Final]

Iniciado por Riojas

Respuestas: 0
Vistas: 758
Último mensaje Marzo 15, 2017, 02:33:08 pm
por Riojas
Arduino + Snap4Arduino "Juego PONG" [Parte1]

Iniciado por Riojas

Respuestas: 0
Vistas: 1115
Último mensaje Febrero 24, 2017, 04:59:07 pm
por Riojas
Arduino + Snap4Arduino "Juego PONG" [Parte2]

Iniciado por Riojas

Respuestas: 0
Vistas: 939
Último mensaje Marzo 03, 2017, 07:07:08 pm
por Riojas
Creando librerías en Arduino #2: Clases, métodos y propiedades... [ITMK Blog]

Iniciado por fermino

Respuestas: 0
Vistas: 2082
Último mensaje Febrero 18, 2015, 10:57:00 pm
por fermino