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:
(http://i.imgur.com/wg0Vts5.png)
Lo primero que tenemos que hacer es descargar Telegram. En este link están todas las versiones, para móviles y Desktop.
https://telegram.org/apps
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 https://telegram.me/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.
(http://i.imgur.com/T9FF0lu.png?2)
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.
(http://i.imgur.com/oqutXNP.png?2)
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.
#include "DHT.h" //Incluimos la libreria DHT para el control de el Sensor DHT 11.
#define PinOutDHT 3 //Definimos el Pin 3 para la lectura de el sensor.
#define TypeDHT DHT11 //Definimos el Tipo de Sensor.
DHT dht(PinOutDHT, TypeDHT); //Cramos un objeto dht con las variables definidas anteriormente.
const int led1=12; //Declaramos la variable led1.
const int led2=2; //Declaramos la variable led2.
unsigned int dato; //Declaramos una variable "dato" en donde se guardaran los valores recibidos desde Python.
void setup() {
Serial.begin(9600); //Inicializamos la comunicacion Serial a 9600 Baudios
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT); //Definimos los pines de los leds como Salidas
}
void loop() {
while(Serial.available()>0){ //Comprobamos que la comunicacion serial este disponible.
dato=Serial.read(); //Leemos el puerto serial y guardamos los valores en la variable "dato"
/*En el siguiente codigo se compara el valor de "dato" y segun sea el caso actua de distintas maneras*/
//Enciende o apaga los leds
if(dato=='Y')digitalWrite(led1,HIGH);
if(dato=='N')digitalWrite(led1,LOW);
if(dato=='E')digitalWrite(led2,HIGH);
if(dato=='F')digitalWrite(led2,LOW);
//Manda Temperatura o Humedad segun el caso
if(dato=='T')Serial.println(int(dht.readTemperature())+String("°C"));
if(dato=='H')Serial.println(int(dht.readHumidity())+String("%"));
}
}
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 : https://www.python.org/downloads/
Libreria Telepot: https://github.com/nickoala/telepot
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.
#!/usr/bin/python
import telepot, time, serial, sys
ser = serial.Serial('COM10', 9600)
print('Bot activado.')
print('Esperando comandos...')
def handle(msg):
userName = msg['from']['first_name']
content_type, chat_type, chat_id = telepot.glance(msg)
if (content_type == 'text'):
command = msg['text']
print ('Comando obtenido: %s' % command)
if '/start' in command:
bot.sendMessage(chat_id, "Hola, "+userName+"\n"+"Mi nombre es: BotDuino,Te muestro la lista de comandos que puedo reconocer:"+"\n"
+"/encender_led1"+" -Enciendo el Led 1"+"\n"
+"/apagar_led1"+" -Apago el Led 1"+"\n"
+"/encender_led2"+" -Enciendo el Led 2"+"\n"
+"/apagar_led2"+" -Apago el Led 2"+"\n"
+"/ubicacion"+" -Envio mi ubicacion actual"+"\n"
+"/humedad"+" -Te muestro la Humedad en el ambiente"+"\n"
+"/temperatura"+" -Te muestro la temperatura")
elif '/encender_led1' in command:
ser.write(b'Y')
bot.sendMessage(chat_id, "Led 1 Encendido!")
elif '/apagar_led1' in command:
ser.write(b'N')
bot.sendMessage(chat_id, "Led 1 Apagado!")
elif '/encender_led2' in command:
ser.write(b'E')
bot.sendMessage(chat_id, "Led 2 Encendido!")
elif '/apagar_led2' in command:
ser.write(b'F')
bot.sendMessage(chat_id, "Led 2 Apagado!")
elif '/ubicacion' in command:
bot.sendLocation(chat_id, "cambiar por latitud","cambiar por longitud")
elif '/temperatura' in command:
ser.write(b'T')
linea=ser.readline()
bot.sendMessage(chat_id, "Temperatura: " +linea)
elif '/humedad' in command:
ser.write(b'H')
linea=ser.readline()
bot.sendMessage(chat_id, "Humedad Relativa: " +linea)
else:
bot.sendMessage(chat_id, "Lo siento, no reconozco ese comando!")
bot = telepot.Bot('"cambiar por tu TOKEN"')
bot.message_loop(handle)
# Espera por nuevos mensajes
while 1:
time.sleep(20)
Abran una terminal en Windows y ejecuten el script que acabamos de hacer
python "nombreFihero".py
Si no les ha marcado ningún error verán algo como esto:
(http://i.imgur.com/rNuezGV.png?1)
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:
(http://i.imgur.com/s5Zc07P.png?1)
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.
[/b]
De nada amigo Riojas! Fue un placer hacerte la firma! Muy buen post!
Lo probare y te cuento, se ve interesante ;)
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!!
No tienes permitido ver los links.
Registrarse o Entrar a mi 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.
https://underc0de.org/foro/arduino-raspberry-pi/arduino-snap4arduino-presentacion/
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 :)
No tienes permitido ver los links.
Registrarse o Entrar a mi 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