El control de bomba de agua por Telegram y ESP32 es un sistema automatizado que permite controlar remotamente una bomba de agua mediante el uso de un microcontrolador ESP32 y la plataforma de mensajería Telegram.
El ESP32 es un microcontrolador de bajo costo y de bajo consumo de energía que permite conectarse a Internet mediante Wi-Fi, lo que lo hace ideal para proyectos de IoT. Por otro lado, Telegram es una plataforma de mensajería instantánea que se puede utilizar para enviar y recibir mensajes, fotos, videos y otros tipos de archivos.
El ESP32 se encarga de recibir los comandos enviados por Telegram a través de un BOT y procesarlos para controlar el relé que activa la bomba de agua. El usuario puede enviar comandos de encendido o apagado de la bomba.
En resumen, el control de bomba de agua por Telegram y ESP32 permite una gestión eficiente y sencilla del suministro de agua en tiempo real, con la posibilidad de controlar la bomba de agua desde cualquier lugar con acceso a Internet.
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
Componentes electrónicos
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.
Pines hembra
Bomba de agua sumergible
Cables dupont
Módulo ky-004
Módulo Relay
ESPECIFICACIONES TÉCNICAS
- Voltaje de Operación: 5V DC
- Señal de Control: TTL (3.3V o 5V)
- Nº de Relays (canales): 1 CH
- Capacidad máx: 10A/250VAC, 10A/30VDC
- Corriente máx: 10A (NO), 5A (NC)
- Tiempo de acción: 10 ms / 5 ms
- Para activar salida NO: 0 Voltios
PCB
Descargar archivo gerber –> Gerber_esp32
Un protoboard
Una fuente para el esp32 y otra para la bomba de agua
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 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
#include <WiFi.h> #include <WiFiClientSecure.h> #include <UniversalTelegramBot.h> // Reemplazar con los datos de tu red wifi #define WIFI_SSID "Mi_red_wifi" #define WIFI_PASSWORD "Mi_clave" //Token de Telegram BOT se obtenienen desde Botfather en telegram #define BOT_TOKEN "Mi_token" #define ID_Chat "Mi_ID_Chat"//ID_Chat se obtiene de telegram const unsigned long tiempo = 1000; //tiempo medio entre escaneo de mensajes String datos; String chat_id; WiFiClientSecure secured_client; UniversalTelegramBot bot(BOT_TOKEN, secured_client); unsigned long tiempoAnterior; //última vez que se realizó el análisis de mensajes const int pin22 = 22;//Pin de la bomba de agua const int pin23 = 23;//Pin del pulsador int bombaStatus = 0; int estadoM = 1; int inicio = 1; void mensajesNuevos(int numerosMensajes) { for (int i = 0; i < numerosMensajes; i++) { chat_id = bot.messages[i].chat_id; String text = bot.messages[i].text; //////////Activa la Bomba de agua activada indefinidamente ////// if (text == "/Activar") { digitalWrite(pin22, HIGH); bombaStatus = 1; bot.sendMessage(chat_id, "Bomba de agua activada indefinidamente", ""); } //////////Activa la Bomba de agua activada x 1 segundo////// if (text == "/Activar1") { digitalWrite(pin22, HIGH); bombaStatus = 1; bot.sendMessage(chat_id, "Bomba de agua activada x 1 segundo", ""); delay(1000); digitalWrite(pin22, LOW); bombaStatus = 0; bot.sendMessage(chat_id, "Bomba de agua desactivada después de 1 Segundos", ""); } //////////Activa la Bomba de agua activada x 2 segundos////// if (text == "/Activar2") { digitalWrite(pin22, HIGH); bombaStatus = 1; bot.sendMessage(chat_id, "Bomba de agua activada x 2 segundos", ""); delay(2000); digitalWrite(pin22, LOW); bombaStatus = 0; bot.sendMessage(chat_id, "Bomba de agua desactivada después de 2 Segundos", ""); } //////////Activa la Bomba de agua activada x 3 segundos////// if (text == "/Activar3") { digitalWrite(pin22, HIGH); bombaStatus = 1; bot.sendMessage(chat_id, "Bomba de agua activada x 3 segundos", ""); delay(3000); digitalWrite(pin22, LOW); bombaStatus = 0; bot.sendMessage(chat_id, "Bomba de agua desactivada automaticamente después de 3 Segundos", ""); } //////////Activa la Bomba de agua activada x 4 segundos////// if (text == "/Activar4") { digitalWrite(pin22, HIGH); bombaStatus = 1; bot.sendMessage(chat_id, "Bomba de agua activada x 4 segundos", ""); delay(4000); digitalWrite(pin22, LOW); bombaStatus = 0; bot.sendMessage(chat_id, "Bomba de agua desactivada automaticamente después de 4 Segundos", ""); } //////////Activa la Bomba de agua activada x 5 segundos////// if (text == "/Activar5") { digitalWrite(pin22, HIGH); bombaStatus = 1; bot.sendMessage(chat_id, "Bomba de agua activada x 5 segundos", ""); delay(5000); digitalWrite(pin22, LOW); bombaStatus = 0; bot.sendMessage(chat_id, "Bomba de agua desactivada automaticamente después de 5 Segundos", ""); } ///////////Desactiva la bomba de agua/////////////////////////// if (text == "/Apagar") { digitalWrite(pin22, LOW); bombaStatus = 0; bot.sendMessage(chat_id, "Bomba de agua apagada", ""); } ////////Estado de la bomba de agua///////// if (text == "/Estado") { if (bombaStatus) { bot.sendMessage(chat_id, "Estado actual: Bomba de agua encendida", ""); } else { bot.sendMessage(chat_id, "Estado actual: Bomba de agua apagada", ""); } } ////////Imprime el menú de ayuda////////// if (text == "/Ayuda") { String ayuda = "Bienvenido al sistema de Internet de las cosas, con ESP32 " ".\n"; ayuda += "Estas son tus opciones.\n\n"; ayuda += "/Activar: Activa el la bomba de agua en forma indefinida \n"; ayuda += "/Apagar: Desactiva el la bomba de agua \n"; ayuda += "/Activar1: Activa el la bomba de agua durante 1 segundo \n"; ayuda += "/Activar2: Activa el la bomba de agua durante 2 segundos \n"; ayuda += "/Activar3: Activa el la bomba de agua durante 3 segundos \n"; ayuda += "/Activar4: Activa el la bomba de agua durante 4 segundos \n"; ayuda += "/Activar5: Activa el la bomba de agua durante 5 segundos \n"; ayuda += "/Estado : devuelve el estado actual si la bomba de agua está encendidad o apagada\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); // dht.begin();//Inicializar el sensor DHT pinMode(pin22, OUTPUT); //Inicializar pin 22 como salida para en control de la bomba de agua. pinMode(pin23, INPUT); //Se configura como entrada para el pulsador digitalWrite(pin22, LOW);// La colocamos en estado bajo // 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() { //Lectura del pulsador int lecturaPin23 = digitalRead(pin23); if(lecturaPin23 == LOW){ Serial.println("Botón activado"); bombaManual(); } //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(); } } void bombaManual(){ int lecturaPin22 = digitalRead(pin22);//Leemos el estado del pin de la bomba de agua if(lecturaPin22 == LOW ){ digitalWrite(pin22, HIGH);//Activamos la bomba de agua bombaStatus = 1; delay(200); bot.sendMessage(ID_Chat, "Bomba de agua activada manualmente", ""); } if(lecturaPin22 == HIGH ){ digitalWrite(pin22, LOW);//Desactiva la bomba de agua bombaStatus = 0; delay(200); bot.sendMessage(ID_Chat, "Bomba de agua desactivada manualmente", ""); } } |
No te pierdas ningún video más suscríbete a nuestro canal de telegram https://t.me/carlosvolt_electronica_robotica
PROYECTO RECOMENDADO
Muy bueno el proyecto pero me sale error de compilacion para trarjeta esp32 devkit v1
Ya me funcionó, me faltaba instalar una librería .