-
Notifications
You must be signed in to change notification settings - Fork 7
/
telegram-esp32.ino
148 lines (128 loc) · 4.16 KB
/
telegram-esp32.ino
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
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h> //Version Instalada: 1.3.0 depende de ArduinoJson instalar version 6.15.2
// Reemplazar con los datos de tu red wifi
#define WIFI_SSID "xxxxxx"
#define WIFI_PASSWORD "xxxxx"
//Token de Telegram BOT se obtenienen desde Botfather en telegram
#define BOT_TOKEN "xxxx"
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 led1 = 05;
const int led2 = 18;
int estadoLed1 = 0;
int estadoLed2 = 0;
int inicio = 1;
String chat_id;
#define ID_Chat "xxxxx"//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 5//////
if (text == "Luz1on")
{
digitalWrite(led1, HIGH); //
estadoLed1 = 1;
bot.sendMessage(chat_id, "Luz 1 encendida", "");
}
if (text == "Luz1off")
{
estadoLed1 = 0;
digitalWrite(led1, LOW); //
bot.sendMessage(chat_id, "Luz 1 apagada", "");
}
//////////Luz 2 en el pin 14//////
if (text == "Luz2on")
{
digitalWrite(led2, HIGH);
estadoLed2 = 1;
bot.sendMessage(chat_id, "Luz 2 encendida", "");
}
if (text == "Luz2off")
{
estadoLed2 = 0;
digitalWrite(led2, LOW);
bot.sendMessage(chat_id, "Luz 2 apagada", "");
}
////////Estado de las luces ///////
if (text == "Estado")
{
////Estado luz 1////
if (estadoLed1)
{
bot.sendMessage(chat_id, "Luz 1 encendida", "");
}
else
{
bot.sendMessage(chat_id, "Luz 1 apagada", "");
}
////Estado luz 2////
if (estadoLed2)
{
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(led1, OUTPUT); //inicializar pin 05 digital como salida.
pinMode(led2, OUTPUT); //inicializar pin 18 digital como salida.
digitalWrite(led1, LOW); //Apagamos el foco
digitalWrite(led2, LOW); //Apagamos el foco
// 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();
}
}