Es vol controlar la llum de la casa per Internet, fen servir la aplicació Telegram. En aquesta practica es l’encesa de la llum, però pot ser qualsevol dispositiu.
1.- Placa NodeMCU.
2.- Relé.
3.- Bombeta a 220V.
4.- IDE de Arduino.
Per desenvolupar aquesta practica ens hem basat en la pàgina de ESPloradores
/start. Per iniciar el BOT.
/llum_on. Per encendre la llum.
/llum_off. Per apagar la llum.
/estat. Per saber l’estat de la llum ON o OFF.
ENCENEM LA LLUM. Resposta al comando /llum_on.
APAGUEM LA LLUM. Resposta al comando /llum_off.
La llum està encesa o apagada. Resposta al comando /estat.
1.- Crear un BOT de Telegram per el ESP8266.
2.- Circuit elèctric.
3.- Programa a pujar a la placa.
4.- Resultat final.
Primer de tot es te que instal·lar Telegram, per mòbil o per ordinador. Fem servir la versió de ordinador, per poder explicar millor el procés de creació del BOT.
Bot es un programari que corre dins de Telegram i nosaltres podem interactuar amb el BOT de la següent manera:
1.- Enviant missatges des de la nostre placa al BOT.
2.- Escrivint comandos en la conversa en el BOT Telegram, que son enviats al NodeMCU.
En el buscador escrivim botfather per estar en la conversa a ell.

Cliquem en @Manybot i s’obre una interfície amb 4 passos a seguir.

Seguim els 4 passos, cliquem en @Botfather i escrivim /newbot en el xat de botfather.

Posem el nom del nou BOT, en el nostre cas llumBot.

Escrivim el nom del usuari, en el nostre cas userLlumBot.

Guardem el token, que srvira per poder connectar amb el BOT, via HTTP API.
En ManyBot enviem el token copiat.

Telegram User ID, serveix perquè el NodeMCU pugui saber si el missatge que rep correspon verdaderament al nostre usuari i poder acceptar-lo o ignorar-lo.
En el buscador de la pantalla principal de Telegram escrivim IDBot.

Escrivim /getid.

Guardem el UserID, servirà després per inserir en el programa. El UserID es identificador de cada usuari i es el mateix per tots els BOTS de un mateix usuari.
Ja tenim el BOT amb el nom del BOT, el nom del usuari el token i el UserID.
Creada per Brian Lough.
Descarrega la llibreria de github
Anar a Esbós > Inclou biblioteca > Afegeix biblioteca .ZIP i buscar la nova llibreria descarregada.
Important: NO instal·lar la llibreria amb el gestor de biblioteques, perquè la versió no esta actualitzada.
Per instal·lar-la ho fem amb el gestor de biblioteques:
Anar a Esbós > Inclou biblioteca > Gestiona les biblioteques...
Busquem ArduinoJson i la instal·lem.
llum-telegram.ino
#include <ESP8266WiFi.h> #include <WiFiClientSecure.h> // by Brian Lough: https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot #include <UniversalTelegramBot.h> #include <ArduinoJson.h> //WiFi const char* ssid = "mirablau"; const char* password = "XXXXXXXX"; //Telegram BOT token #define BOTtoken "XXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXX" // Usem idbot per obtenir el userID, que es persolal i igual per els diferents tokens #define USER_ID "XXXXXXXXXXXXXX" // Per poder enviar i rebre missatges primer escrivim "/start" en el bot WiFiClientSecure client; UniversalTelegramBot bot(BOTtoken, client); // Missatges cada 1 segon. int intervalPeticions = 1000; unsigned long tempsBotFuncionant; //definim el pin del relay #define llumPin D1 // Estat inicial de la llum apagat bool llumEstat = LOW; // Manipula els nou missatges rebuts void manipulaNousMissatges(int numNousMissatges) { Serial.println("manipulaNousMissatges"); Serial.println(String(numNousMissatges)); for (int i=0; i<numNousMissatges; i++) { // Comprovem el user_id del solicitant. String user_id = String(bot.messages[i].chat_id); if (user_id != USER_ID){ bot.sendMessage(user_id, "Usuari no permés", ""); continue; } // Imprimir el missatge rebut String text = bot.messages[i].text; Serial.println(text); String from_name = bot.messages[i].from_name; if (text == "/start") { String benvinguda = "Benvinguda, " + from_name + ".\n"; benvinguda += "Comandos per controlar la llum.\n\n"; benvinguda += "/llum_on per encendre \n"; benvinguda += "/llum_off per apagar \n"; benvinguda += "/estat per solicitar el estat actual \n"; bot.sendMessage(user_id, benvinguda, ""); } if (text == "/llum_on") { bot.sendMessage(user_id, "ENCENÉM LA LLUM", ""); llumEstat = HIGH; digitalWrite(llumPin, llumEstat); } if (text == "/llum_off") { bot.sendMessage(user_id, "APAGUEM LA LLUM", ""); llumEstat = LOW; digitalWrite(llumPin, llumEstat); } if (text == "/estat") { if (digitalRead(llumPin)){ bot.sendMessage(user_id, "LA LLUM ESTÀ ENCESA", ""); } else{ bot.sendMessage(user_id, "LA LLUM ESTÀ APAGADA", ""); } } } } void setup() { Serial.begin(115200); client.setInsecure(); pinMode(llumPin, OUTPUT); digitalWrite(llumPin, llumEstat); // Connectar a la xarxa Wifi. Mode estació: WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connectan a la WiFi.."); } // Imprimir la IP Local de la placa Serial.println(WiFi.localIP()); } void loop() { if (millis() > tempsBotFuncionant + intervalPeticions) { int numNousMissatges = bot.getUpdates(bot.last_message_received + 1); while(numNousMissatges) { Serial.println("va obtenir resposta "); manipulaNousMissatges(numNousMissatges); numNousMissatges = bot.getUpdates(bot.last_message_received + 1); } tempsBotFuncionant = millis(); } }
Tenim que posar el SSID i la contrasenya de la nostre WiFi. També el Telegram Bot token i el User ID.
Definim les sortides:
//definim el pin del relay #define llumPin D1 // Estat inicial de la llum apagat bool llumEstat = LOW;
Bot token i el IDBot.
//Telegram BOT token #define BOTtoken "XXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXX" // Usem idbot per obtenir el userID, que es persolal i igual per els diferents tokens #define USER_ID "XXXXXXXXX"
Creem un nou WiFi client:
WiFiClientSecure client;
Creem un Bot amb el token i el client:
UniversalTelegramBot bot(BOTtoken, client);
Seguretat. Fem servir:
client.setInsecure();
Pero per información mes important es millor usar: client.setFingerPrint;
Escoltar el enviament de missatges del BOT cada 1 segon.
// Missatges cada 1 segon. int intervalPeticions = 1000; unsigned long tempsBotFuncionant;
Funció manipulaNousMissatges(numNousMissatges):
Mira cada un dels missatges rebuts, amb un bucle.
Obtenim el user_id de cada missatge i el comparem amb el nostre USER_ID, si es diferente enviem missatge de no permis i descartem el missatge.
for (int i=0; i<numNousMissatges; i++) { // Comprovem el user_id del solicitant. String user_id = String(bot.messages[i].chat_id); if (user_id != USER_ID){ bot.sendMessage(user_id, "Usuari no permés", ""); continue; }
Altrament si la comprovació anterior es satisfactori, guardem el missatge rebut i el nom del remitent:
// Imprimir el missatge rebut String text = bot.messages[i].text; Serial.println(text); String from_name = bot.messages[i].from_name;
Si el text es /start, el BOT envia un missatge de benvinguda:
if (text == "/start") { String benvinguda = "Benvinguda, " + from_name + ".\n"; benvinguda += "Comandos per controlar la llum.\n\n"; benvinguda += "/llum_on per encendre \n"; benvinguda += "/llum_off per apagar \n"; benvinguda += "/estat per solicitar el estat actual \n"; bot.sendMessage(user_id, benvinguda, ""); }
Si el text es /llum_on, la placa encén la llum i el BOT envia el missatge de ENCENÉM LA LLUM:
Si el text es /llum_off, la placa apaga la llum i el BOT envia el missatge de APAGUEM LA LLUM:
if (text == "/llum_on") { bot.sendMessage(user_id, "ENCENÉM LA LLUM", ""); llumEstat = HIGH; digitalWrite(llumPin, llumEstat); } if (text == "/llum_off") { bot.sendMessage(user_id, "APAGUEM LA LLUM", ""); llumEstat = LOW; digitalWrite(llumPin, llumEstat); }
Si el text es /estat, llegeix el estat del pin i el BOT envia missatge del seu estat:
if (text == "/estat") { if (digitalRead(llumPin)){ bot.sendMessage(user_id, "LA LLUM ESTÀ ENCESA", ""); } else{ bot.sendMessage(user_id, "LA LLUM ESTÀ APAGADA", ""); } }
loop(), mira si hi ha missatges cada segon:
void loop() { if (millis() > tempsBotFuncionant + intervalPeticions) { int numNousMissatges = bot.getUpdates(bot.last_message_received + 1); while(numNousMissatges) { Serial.println("va obtenir resposta "); manipulaNousMissatges(numNousMissatges); numNousMissatges = bot.getUpdates(bot.last_message_received + 1); } tempsBotFuncionant = millis(); } }
El mar.
Havaneres.
Lloret antic.
Lloret avui.
De cala Morisca a Sa Carabera.
De Sa Carabera a Treumal.
Lloret en kayak.
Vígilancia remota.
Caixa-tpv.
Cambrer-app.
Client webApp.
Relats del banc del si no fos
Històries d'ahir
Vídeos antics de Lloret
El caiac
Contes de l'avi.
Control d’accés amb contrasenya.
Orgue de llums.
Comparativa de editors Arduino.
Projecte bon Nadal.
Control de la qualitat del aire interior (CO2) amb semàfor LED.
NodeMCU-ThingSpeak
ThingSpeak.
NodeMCU com AccessPoint.
Control de la llum de casa per web.
Control de un led per el mòbil.
Sistema de fitxers en ESP8266.
Altura del nivell d'aigua.
Avis d’alarma a Telegram.
Control de la intensitat de llum de un LED per Internet.
Magatzematge de temperatura i humitat en Thinger.
Publicar temperatura i humitat en Google Sheets.
ESP8266 i Firebase.
La bàscula. ESP8266 NodeMCU amb cèl·lula de càrrega.
ESP32-CAM
ESP32-CAM captura fotos per ser vistes en la WEB.
Pujar fotos a un servidor FTP amb ESP32-CAM.
MicroPython en ESP8266.
Visual Estudio Code per Arduino.
Classificador d’imatges.
Instal·lar i configurar Apache en Ubuntu.
Accés a un servidor Linux remotament.
Client i Servidor FTP.
Màquina virtual UBUNTU.
WindowsXP en Virtualbox.
Multisim, simulador de circuits electrònics.
Proteus, simulador de circuits electrònics.
MySQL. Instal·lació.
MySQL. Aplicacions.
Netbeans Maven MySQL.
Java+Netbeans+Maven+EclipseLink+Mysql
Aplicació d’escriptori JavaFX
App JavaFX amb SceneBuilder
App Java-Swing









Noves tecnologies WEB Arduino Domótica MycroPython NodeMCU IoT Java ESP8266 Lora C++ Programació Server-Client