viernes, 16 de diciembre de 2022

Recogiendo datos en una tarjeta SD

Para realizar este proyecto utilizamos una placa ESP32 Plus STEAMaker sobre la que montamos una placa Imagina TDR STEAM. El programa realizado con Arduino Blocks permite controlar a través de Telegram la pequeña estación meteorológica que mide temperatura y humedad y además encender o apagar uno de los leds que lleva incorporados. 

Enviando diversas palabras clave led, info, thing, clima, reset o sd, conseguimos poder acceder a la manera de encender o apagar el led, poner en marcha o parar el envío de los datos de temperatura y humedad a ThingSpeak, la información sobre esos mismos comandos, los valores de la temperatura y la humedad en ese momento, borrar los valores guardados en la tarjeta SD relativos al estado del led y de la comunicación con ThingSpeak y acceder a los valores de temperatura y humedad guardados en la tarjeta SD. Si enviamos cualquier otra palabra cuando hemos acabado de modificar el estado del led D12 o de la conexión a ThingSpeak nos envía la información sobre los comandos.


En este primer grupo inicializar se incluyen los bloques de la conexión wifi, de ThingSpeak, la configuración del Bot, la configuración del reloj de tiempo real NTP y la de la tarjeta SD. Además se declaran y asignan valores a las diferentes variables.


En el grupo de los mensajes recibidos de Telegram se introduce lo que va llegando por Telegram a la variable entrada1 y posteriormente a la variable entrada2. El condicional que hay entre los dos bloques permite saber si acaba de recibirse un nuevo mensaje. En el caso de que sea así se asigna a la variable info1 el calor 0, lo que permitirá, en principio, entrar en el condicional que envía la información de los comandos al recibir un mensaje sin sentido. Esto será así si no se esta realizándose otro proceso.

A continuación una serie de condicionales asignan valor a la variable operacion siempre y cuando se haya recibido la palabra led o info o thing o clima o reset o sd. Al mismo tiempo se asigna valor a la variable info1, de forma que se aguarda un 1 en todos los casos salvo en el de info, en que se guarda un 0


En el siguiente condicional se entra si la variable operacion es diferente de led, thing, clima, reset y sd, y a la vez el valor de info1 es 0. Al entrar se asigna a la variable info el valor "Para encender o apagar el led D13 se ha de enviar primero la palabra led y despues la palabra encender o apagar. Para obtener informacion se ha enviar la palabra info. Para poner en marcha ThingSpeak se ha de enviar la palabra thing y despues si o no. Para obtener los datos de temperatura y humedad se ha de enviar la palabra clima. Para poner a cero todos los registros de la tarjeta SD se ha de enviar la palabra reset. Para el registro horario de temperatura y humedad de la tarjeta SD se ha de enviar la palabra sd. " y también la hora obtenida de NTP.

A continuación se envía el valor de info por Telegram, se cambia el valor de info1 a 1, para no volver a entrar en este condicional mientras no sea necesario y se cambia el valor de la variable operacion a "o".

En el siguiente condicional si la variable operacion tiene el valor led y además el valor de entrada2 es diferente de led, es decir ya le hemos enviado otro mensaje por Telegram, entonces guardará ese nuevo mensaje en el archivo de texto estado.txt en la tarjeta SD. Para no añadir ese nuevo texto a continuación de lo que ya estuviese escrito en ese archivo previamente lo eliminamos, para volver a escribirlo de nuevo.

En el siguiente condicional si la variable operacion tiene el valor thing y además el valor de entrada2 es diferente de thing, es decir ya le hemos enviado otro mensaje por Telegram, entonces guardará ese nuevo mensaje en el archivo de texto thing.txt en la tarjeta SD. Para activar el envío de datos a ThingSpeak después de thing hemos de enviar si, pero para dejar de enviar datos podemos enviar no o cualquier otra palabra, es decir basta con que el archivo thing.txt guarde cualquier cosa diferente de si.


En el grupo del bucle correspondiente al bucle leemos lo que haya escrito en el archivo estado.txt  y el thing.txt de la tarjeta SD y lo introducimos en las variables estado y ThingSpeak.  A continuación se asignan los valores de temperatura y humedad a las variables correspondientes

A continuación los dos condicionales nos permiten hacer alguna cosa con el valor de la variable estado. Si su valor es encender encendemos el led conectado en el pin D12 y si su valor es apagar lo apagamos. Las palabras encender y apagar son los mensajes que enviamos al Bot por Telegram después de haber enviado la palabra led

La siguiente estructura condicional permite poner en marcha o parar el envío de los datos de temperatura y humedad a ThingSpeak. la condición es que el valor de la variable ThingSpeak sea si.

La última estructura condicional, cuando el valor de la variable operacion es clima, asigna a la variable clima la información sobre la temperatura y humedad y posteriormente los envía a Telegram.


En el primer condicional si el valor de operacion es reset, se asignan a los archivos estado.txt y thing.txt los valores apagar y no, con lo cual el led pasará a estar apagado y se cerrara la comunicación con ThingSpeak.

Los seis condicionales siguientes van a ir creando el archivo datos.txt en donde se guardan los valores de temperatura y humedad durante una hora, seis valores en total. Al cambiar de hora se borra el archivo y se vuelve a comenzar.



En este último condicional cuando el valor de la variable operacion es sd se lee el contenido del archivo datos.txt, se asigna a la variable sd y se envía por Telegram.



















No hay comentarios: