En este tutorial veremos como hacer un sistema que nos permite encender luces con telegram, desde cualquier parte del mundo, con solo escribir un comando. Para ello un modulo relay, de doble canal encenderá dos focos de 110V/220V, el esp32 se conectará a nuestra red wifi y por medio de comandos, para controlar el encendido o apagado de luces. Enviaremos mensajes a través del servicio de mensajería telegram, donde el bot nos responderá cuando se encendió la luz o apagó y también podremos conocer el estado de cada una de ellas.
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
Circuito
Componentes electrónicos
Cables dupont
Un ESP32
Características del módulo ESP32-T
Conectividad
El módulo ESP32 dispone de todas las variantes del WiFi:
- 802.11 b/g/n/e/i/n
- Wi-Fi Direct (P2P), P2P Discovery, P2P Group Owner mode and P2P Power Management
Esta versión nueva incluye la conectividad mediante Bluethoot de bajo consumo
- Bluetooth v4.2 BR/EDR and BLE
- BLE Beacon
Además, puede comunicarse mediante los protocoles SPI, I2C, UART, MAC Ethernet, Host SD
Prestaciones del microcontrolador
La CPU está formado por un SoC modelo Tensilica LX6 con las siguientes características y memoria
- Doble núcleo de 32 bits con velocidad de 160MHz
- Memoria ROM de 448 kBytes
- Memoria SRAM de 520kBytes
Dispne de 48 Pines
- 18 ADC de 12 bits
- 2 DAC de 8 bits
- 10 pines sensores de contacto
- 16 PWM
- 20 Entradas/salidas digitales
Alimentación y modos de consumo
Para un correcto funcionamiento del ESP32 es necesario subministrar un voltaje de entre 2,8V y 3,6V. La energía que consume depende del modo de funcionamiento. Contiene un modo, el Ultra Low Power Solution (ULP), en que se continúan realizando tareas básicas (ADC, RTC…) en el modo Sleep.
Dos focos
Un pcb
Archivo gerber
Descargar el archivo gerber del siguiente link y mandarlo a fabricar a pcbway https://www.pcbway.com/project/shareproject/How_to_turn_on_lights_with_telegram_and_esp32_from_anywhere_in_the_world.html
o desde aquí Gerber_PCB__ESP32
Pines macho
Módulo relay de doble canal
Caracteristicas
- Tarjeta con relés de 2-5V y 2 canales
- Corriente estatica: 4mA
- Corriente de activación: 2mA
- Corriente de trabajo: 65mA
- Relé de alta Corriente: AC250V 10A; DC30V 10A.
- Interfaz estándar para microcontrolador: Arduino, AVR, PIC, DSP, ARM, etc.
- Optoacoplador PC817 de abordo con capacidad de aislamiento óptico anti-jamming
- Cableado independiente de contacto, seguro y confiable
- Con orificios para tornillos para una fácil instalación
- Tamaño: 44.4×32.4mm
Pinout
Parte de entrada:
- VCC: conectar a potencia positiva (según el rango de tensión del relé)
- GND: conectar a potencia negativa
- IN1: pin del disparador del canal 1 módulo de relé (disparador de nivel alto)
- IN2: pin del disparador del canal 2 módulo de relé (disparador de nivel alto)
Pieza de salida:
- Normalmente abierto (NA): pin de relé normalmente abierto. NO el pin no se conecta al pin COM cuando el relé está apagado. El pin NO se conecta al pin COM cuando el relé está encendido.
- Pin común (COM): pin común del relé.
- Normalmente cerrado (NC): pin de relé normalmente cerrado. El pin NC se conecta al pin COM cuando el relé está apagado. El pin NC no se conecta al pin COM cuando el relé está encendido.
Un zócalo para el esp32
Código Fuente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
#include <WiFi.h> #include <WiFiClientSecure.h> #include <UniversalTelegramBot.h> // Reemplazar con los datos de tu red wifi #define WIFI_SSID "Tu_red_wifi" #define WIFI_PASSWORD "Tu_clave" //Token de Telegram BOT se obtenienen desde Botfather en telegram #define BOT_TOKEN "Tu_token" const unsigned long tiempo = 1000; //tiempo medio entre mensajes de escaneo WiFiClientSecure secured_client; UniversalTelegramBot bot(BOT_TOKEN, secured_client); unsigned long tiempoAnterior; //última vez que se realizó el análisis de mensajes const int led12 = 12; const int led14 = 14; int estadoLed12 = 0; int estadoLed14 = 0; int inicio = 1; String chat_id; #define ID_Chat "tu_id_chat"//ID_Chat se obtiene de telegram void mensajesNuevos(int numerosMensajes) { for (int i = 0; i < numerosMensajes; i++) { String chat_id = bot.messages[i].chat_id; String text = bot.messages[i].text; //////////Luz 1 en el pin 12////// if (text == "Luz1on") { digitalWrite(led12, LOW); // estadoLed12 = 1; bot.sendMessage(chat_id, "Luz 1 encendida", ""); } if (text == "Luz1off") { estadoLed12 = 0; digitalWrite(led12, HIGH); // bot.sendMessage(chat_id, "Luz 1 apagada", ""); } //////////Luz 2 en el pin 14////// if (text == "Luz2on") { digitalWrite(led14, LOW); estadoLed14 = 1; bot.sendMessage(chat_id, "Luz 2 encendida", ""); } if (text == "Luz2off") { estadoLed14 = 0; digitalWrite(led14, HIGH); bot.sendMessage(chat_id, "Luz 2 apagada", ""); } ////////Estado de las luces /////// if (text == "Estado") { ////Estado luz 1//// if (estadoLed12) { bot.sendMessage(chat_id, "Luz 1 encendida", ""); } else { bot.sendMessage(chat_id, "Luz 1 apagada", ""); } ////Estado luz 2//// if (estadoLed14) { bot.sendMessage(chat_id, "Luz 2 encendida", ""); } else { bot.sendMessage(chat_id, "Luz 2 apagada", ""); } } if (text == "Ayuda") { String ayuda = "Bienvenido al sistema de control luces con Esp32, " ".\n"; ayuda += "Estas son tus opciones.\n\n"; ayuda += "Luz1on: para encender la Luz 1 \n"; ayuda += "Luz1off: para apagar la luz 1 \n"; ayuda += "Luz2on: para encender la Luz 2 \n"; ayuda += "Luz2off: para apagar la luz 2 \n"; ayuda += "Estado : devuelve el estado actual de las luces\n"; ayuda += "Ayuda: Imprime este menú \n"; ayuda += "Recuerda el sistema distingue entre mayuculas y minusculas \n"; bot.sendMessage(chat_id, ayuda, ""); } } } void setup() { Serial.begin(115200); pinMode(led12, OUTPUT); //inicializar pin 12 digital como salida. pinMode(led14, OUTPUT); //inicializar pin 14 digital como salida. digitalWrite(led12, HIGH); // digitalWrite(led14, HIGH); // Intenta conectarse a la red wifi Serial.print("Conectando a la red "); Serial.print(WIFI_SSID); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); secured_client.setCACert(TELEGRAM_CERTIFICATE_ROOT); //Agregar certificado raíz para api.telegram.org while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.print("\nConectado a la red wifi. Dirección IP: "); Serial.println(WiFi.localIP()); if(inicio == 1){ Serial.println("Sistema preparado"); bot.sendMessage(ID_Chat, "Sistema preparado!!!, escribe Ayuda para ver las opciones", "");//Enviamos un mensaje a telegram para informar que el sistema está listo inicio = 0; } } void loop() { //Verifica si hay datos nuevos en telegram cada 1 segundo if (millis() - tiempoAnterior > tiempo) { int numerosMensajes = bot.getUpdates(bot.last_message_received + 1); while (numerosMensajes) { Serial.println("Comando recibido"); mensajesNuevos(numerosMensajes); numerosMensajes = bot.getUpdates(bot.last_message_received + 1); } tiempoAnterior = millis(); } } |
Descargar Librería –> Universal-Arduino-Telegram-Bot-master
Crear Bot en Telegram
En telegram buscamos BotFather
Escribimos /start y nos aparecerá algo similar a esto
Escribimos /newbot
Nos apareceré el nombre del bot, y inventamos un nombre para nuestro bot, debe tener el formato “usuario_bot”
Obtendremos un token que vamos a usar en el código fuente
Ahora buscaremos IDBot, y lo iniciamos
Escribimos /getid y nos entregará el user_id que debemos colocar en el código fuente
SUSCRIBETE A NUESTROS BOLETINES, RECIBE EN TU CORREO LAS NOTICIAS MÁS DESTACADAS, SÓLO INGRESANDO TU CORREO ELECTRÓNICO
[wysija_form id=”1″]
PROYECTO RECOMENDADO
hola
me aprarece este error en el IDE
WiFiClientSecure.h: No such file or directory
Me podrias ayudar por favor
Muchas gracias