✅ Práctica 35
▷ #TSCLab #TCLab #ESP32 #Arduino #Control #MACI
En el siguiente blog se presenta la vigésima sextapráctica del laboratorio de control de temperatura y velocidad de un motor.
Objetivo general:
- Recibir los valores sensados de temperatura del TSC-Lab a Telegram.
Materiales:
- Node-Red
- TSC-Lab
Introducción:
En la práctica anterior se aprendió a información del TSC-Lab a Node-Red mediante Wi-Fi con protocolo HTTP. Ahora a mas de enviar dicha información se pretende recibirla y monitoreada desde Telegram, la cual es una aplicación enfocada en la mensajería instantánea, el envío de varios archivos y la comunicación en masa. Se la puede descargar desde la tienda de Google Play o App Store. También se la puede utilizar desde su sitio web o versión de escritorio. En esta práctica se crearrá un bot en Telegram el cual al recibir un comando en específico, enviará de manera instantanea el valor de temperatura solicitado.
Procedimiento:
Nota: se asume que está instalado Node-Red, que está familiarizado con el entorno y que sabe instalar librerías. En caso de no ser así, puede revisar la practica 24 dando clic aquí.
- Descargar y crearse una cuenta en Telegram en caso de no tenerla. Busque en la tienda de su dispositivo móvil.
- En el buscador de Telegram escriba BotFather. Tenga en cuenta que tenga la verificación (visto azul) e imagen de perfil que se muestra a continuación. Y abra su chat.
- Escriba el comando /start
- Seleccione o escriba el comando /newbot y colóquele un nombre a su bot, tal y como se muestra en la imagen.
- Abra el entorno de Node-Red e instale la librería node-red-contrib-telegrambot.
- Importar el proyecto que se encuentra disponible aquí. En caso de tener proyectos anteriores abiertos, deshabilite los dashboard y msg.payload.
- Dar doble clic en el bloque de Telegram que está conectado al payload, en bot seleccionar Add new telegram bot ... y seleccionar el lápiz.
- Para mayor facilidad de trabajo, recomendaría abrir Telegram en la versión web ya que se necesita colocar el nombre y el token que se generó previamente con BotFather tal cual como en la imagen que se muestra a continuación. Para posteriormente dar clic en Add y en done.
- A modo de prueba se debe dar Deploy al proyecto y en el buscador de telegram se debe colocar el nombre del bot, en mi caso TSC-Lab-kechica para iniciar chat y se procede a enviar cualquier mensaje y si la configuración se la realizó de manera correcta en el debug se podrá ver dicho mensaje. Mientras se vea el mensaje, omitir cualquier tipo de error que se muestre.
Debug de Node-Red - A todos los bloques de telegram se le debe asiganar el bot creado tal cual como se lo hizo anteriormente.
- Del mensaje que se envió y se vió en el debug hay una variable llamada chatId, a esta se la debe copiar y pegar en el código que aparece cuando se da doble clic en el bloque de las funciones tal cual como se ve en las imágenes.
- Dar deploy al proyecto, cargar el código al TSC-Lab, el cual es el mismo que el de la práctica anterior.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
****************************** TSC-Lab ******************************* | |
***************************** PRACTICE 25 ***************************** | |
This practice is aboutNode-Red (with wi-fi) | |
By: Kevin E. Chica O | |
More information: https://tsc-lab.blogspot.com/ | |
*/ | |
#include <OneWire.h> | |
#include <DallasTemperature.h> | |
//GPIO pin 0 is set as OneWire bus | |
OneWire ourWire1(4); | |
//GPIO pin 4 is set as OneWire bus | |
OneWire ourWire2(0); | |
//A variable or object is declared for our sensor 1 | |
DallasTemperature sensors1(&ourWire1); | |
//A variable or object is declared for our sensor 2 | |
DallasTemperature sensors2(&ourWire2); | |
#include <WiFi.h> | |
#include <PubSubClient.h> | |
// WiFi | |
const char* ssid = "your_ssid"; | |
const char* password = "your_password"; | |
//Your Domain name with URL path or IP address with path | |
const char* mqtt_server = "test.mosquitto.org"; | |
const char *topic = "tsclab/your_name"; //cambiar "your_name" por su nombre o usuario | |
WiFiClient espClient; | |
PubSubClient client(espClient); | |
String msg; | |
String temperatura1 = ""; | |
String temperatura2 = ""; | |
float temp1; | |
float temp2; | |
void setup() { | |
//sensors | |
sensors1.begin(); //Sensor 1 starts | |
sensors2.begin(); //Sensor 2 starts | |
// Set software serial baud to 115200; | |
Serial.begin(115200); | |
// connecting to a WiFi network | |
//wifi | |
WiFi.mode(WIFI_STA); | |
connect_wifi(); | |
client.setServer(mqtt_server, 1883); | |
client.setCallback(callback); | |
} | |
void loop() { | |
connect_wifi(); | |
readData(); | |
publicMQTT(); | |
delay(1000); | |
} | |
void readData() { | |
//The command is sent to read the temperature | |
sensors1.requestTemperatures(); | |
//Obtain the temperature in ºC of sensor 1 | |
temp1 = sensors1.getTempCByIndex(0); | |
temperatura1 = String(temp1); | |
//The command is sent to read the temperature | |
sensors2.requestTemperatures(); | |
//Obtain the temperature in ºC of sensor 2 | |
temp2 = sensors2.getTempCByIndex(0); | |
temperatura2 = String(temp2); | |
//print to display the temperature change | |
} | |
void connect_wifi(){ | |
// Connect or reconnect to WiFi | |
if(WiFi.status() != WL_CONNECTED){ | |
Serial.print("Attempting to connect to SSID: "); | |
Serial.println(ssid); | |
while(WiFi.status() != WL_CONNECTED){ | |
WiFi.begin(ssid, password); // Connect to WPA/WPA2 network. Change this line if using open or WEP network | |
Serial.print("."); | |
delay(5000); | |
} | |
Serial.println("\nConnected."); | |
} | |
} | |
void callback(char* topic, byte* payload, unsigned int length) { | |
Serial.print("Message arrived ["); | |
Serial.print(topic); | |
Serial.print("] "); | |
for (int i = 0; i < length; i++) { | |
Serial.print((char)payload[i]); | |
} | |
Serial.println(); | |
} | |
void reconnect() { | |
// Loop until we're reconnected | |
while (!client.connected()) { | |
Serial.print("Attempting MQTT connection..."); | |
// Attempt to connect | |
if (client.connect("TSCLABClient")) { | |
Serial.println("connected"); | |
} else { | |
Serial.print("failed, rc="); | |
Serial.print(client.state()); | |
Serial.println(" try again in 5 seconds"); | |
// Wait 5 seconds before retrying | |
delay(5000); | |
} | |
} | |
} | |
void publicMQTT() { | |
if (!client.connected()) { | |
reconnect(); | |
} | |
client.loop(); | |
msg = temperatura1+","+temperatura2; | |
client.publish(topic, msg.c_str()); | |
} |
Repositories: https://github.com/vasanza/TSC-Lab/tree/main/Practice25
- En telegram, al bot creado escribirle los comandos temp1 y temp2 y la respuesta será inmediata.
Comments
Post a Comment