Comunicación IoT basada en TCP/IP con la plataforma ThingSpeak: IoT Parte 29

En el tutorial anterior, se discutieron las características, ventajas y limitaciones del protocolo TCP/IP. Aunque TCP/IP no es el más adecuado para aplicaciones de IoT debido a la sobrecarga de paquetes, sigue siendo la pila de protocolos más común en Internet y ofrece conectividad ubicua. Se puede hacer que un dispositivo IoT se comunique con una nube o un servidor utilizando el protocolo TCP/IP sin ningún problema de programación y administración de red. En este proyecto, se diseñará un dispositivo IoT que pueda transmitir datos de sensores a la plataforma ThingSpeak utilizando el protocolo TCP/IP.
El dispositivo IoT diseñado en este proyecto se construye utilizando Arduino UNO. El Arduino es sólo una placa de microcontrolador y no puede conectarse a una red de Internet por sí solo. Para la conectividad a Internet, Arduino UNO interactúa con el módulo ESP8266. El módulo Wi-Fi ESP8266 es un SOC independiente con una pila de protocolo TCP/IP integrada que puede acceder a una red Wi-Fi. El módulo ESP permite que la placa Arduino se conecte a un enrutador y acceda a la red de Internet. Arduino está programado para comunicarse con la plataforma en la nube, es decir, ThingSpeak a través del protocolo TCP/IP. Arduino puede implementar el protocolo TCP/IP pasando comandos AT en serie al módulo ESP8266.
El dispositivo IoT diseñado es un contador de visitantes y un monitor de temperatura y humedad. Para funcionar como contador de visitantes, los sensores IR y los fotodiodos están interconectados con la placa Arduino. Para funcionar como monitor de temperatura y humedad, se interconecta un sensor DHT-11 con la placa Arduino. Arduino lee datos de los sensores y los envía a la plataforma ThingSpeak. Un OLED de 128 x 64 de 0,6 pulgadas también interactúa con el Arduino, que recibe datos en serie de la placa a través del protocolo I2C y muestra las lecturas actuales de temperatura y humedad. El usuario puede monitorizar el número de ocupantes de la casa, los valores de temperatura y humedad desde cualquier lugar accediendo a la plataforma ThingSpeak.
La placa Arduino controla todas las funcionalidades del dispositivo IoT como contar visitantes, leer valores de temperatura y humedad del sensor DHT-11, mostrar datos de temperatura y humedad en OLED, implementar el protocolo TCP/IP, conectarse a la plataforma ThingSpeak y enviar datos al servidor en la nube. Para ello, el código Arduino se escribe y compila utilizando Arduino IDE.
Componentes necesarios –
Exibição de dados de sensores baseados em realidade aumentada
Fig. 1: Lista de componentes necesarios para la comunicación IoT basada en TCP/IP con el servidor Thingspeak
Software requerido –
• Servidor ThingSpeak
• IDE de Arduino
Diagrama de bloques -
Exibição de dados de sensores baseados em realidade aumentada
Fig. 2: Diagrama de bloques de la comunicación IoT basada en TCP/IP entre Arduino y el servidor Thingspeak
Conexiones de circuito –
El dispositivo IoT que se comunica con ThingSpeak Cloud está construido sobre Arduino UNO. El sensor DHT-11, el sensor IR, los fotodiodos, el módulo ESP8266 y el módulo OLED interactúan con la placa Arduino para crear el dispositivo IoT.

Circuito monitor de temperatura ThingSpeak Arduino basado en TCP-IP basado en ESP8266

El dispositivo IoT tiene las siguientes conexiones de circuito:
Arduino UNO: Arduino UNO es una de las placas de creación de prototipos más populares. Es una placa controladora basada en Atmega 328 que tiene 14 pines GPIO, 6 pines PWM, 6 entradas analógicas e interfaces UART, SPI y TWI integradas. El Atmega 328 es el MCU instalado en la placa Arduino. El controlador tiene la siguiente configuración de pines:
Tabela listando a configuração dos pinos do Arduino Uno
Fig. 3: Tabla que enumera la configuración de pines de Arduino Uno
Hay dos pines GPIO (pines de interrupción externos INT0 e INT1) de la placa Arduino que se usan para interconectar fotodiodos, los pines TX y RX (pines 3 y 2 respectivamente) se usan para interconectar el módulo ESP, pines SDA y SCL (pines 27 y 28 respectivamente) Se utiliza para interactuar con el módulo OLED.
Módulo OLED: el módulo OLED se utiliza para mostrar información de temperatura y humedad, así como el recuento de visitantes (ocupantes) en la casa. El módulo se comunica con la placa Arduino mediante el protocolo I2C. Este es un protocolo de dos hilos. El módulo tiene cuatro pines: SDA, SCL, VCC y GND. VCC y tierra están conectados a 5 VCC y tierra común respectivamente. Los 5 V CC se pueden suministrar a través de una batería a través del regulador de voltaje IC 7805. Los pines SDA y SCL del módulo OLED están conectados a los pines SDA y SCL ((pines 27 y 28 respectivamente) de la placa Arduino. Los OLED están hechos de materiales compuestos orgánicos a base de carbono, por lo tanto, a diferencia de los monitores LCD, no requieren retroiluminación ni filtros.
Imagem mostrando mensagens iniciais exibidas no display OLED
Fig. 4: Imagen que muestra los mensajes iniciales parpadeando en la pantalla OLED
Módulo ESP8266: el módulo Wi-Fi ESP8266 es un SOC independiente con una pila de protocolo TCP/IP integrada que puede acceder a una red Wi-Fi. El ESP8266 es capaz de alojar una aplicación o descargar todas las funciones de la red Wi-Fi desde otro procesador de aplicaciones. Cada módulo ESP8266 viene preprogramado con el firmware del conjunto de comandos AT. El módulo está disponible en dos modelos: ESP-01 y ESP-12. El ESP-12 tiene 16 pines disponibles para interconexión, mientras que el ESP-01 solo tiene 8 pines disponibles para su uso. El ESP-12 tiene la siguiente configuración de pines:
Tabela de listagem de configuração de pinos do módulo ESP8266 ESP-12
Fig. 5: Tabla que enumera la configuración de pines del módulo ESP8266 ESP-12
En el proyecto se utiliza el modelo ESP-01. El modelo ESP-01 tiene la siguiente configuración de pines:
Tabela de listagem de configuração de pinos do módulo ESP8266 ESP-01
Fig. 6: Tabla que enumera la configuración de pines del módulo ESP8266 ESP-01
Los pines Chip Enable y VCC del módulo están conectados a 3,3 V CC mientras que el pin de tierra está conectado a tierra común. El pin de habilitación del chip está conectado a VCC a través de una resistencia pull-up de 10K. El pin RESET no está conectado. Los pines Tx y Rx del módulo están conectados a los pines RX y TX del Arduino UNO. El pin GPIO-0 del módulo está conectado a VCC mediante una resistencia pull-up de 10K.
El módulo ESP permite que Arduino acceda a Internet conectándose a un enrutador a través de Wi-Fi.
Imagem típica do modem Wi-Fi ESP8266 ESP-01
Fig. 7: Imagen típica del módem Wi-Fi ESP8266 ESP-01
Sensores IR: se utiliza un conjunto de dos LED IR en el circuito para detectar la entrada de cualquier visitante. Estos LED IR se instalan en la entrada de la casa. Un LED IR es un tipo de LED que emite luz en el rango de frecuencia infrarroja. La radiación infrarroja no es visible para el ojo humano, pero puede verse a través de la lente de una cámara. Desde el punto de vista operativo, los LED IR no son muy diferentes de los LED normales. También necesitan 3 VCC para polarización y consumen una corriente de 20 mA. También deben conectarse con una resistencia pull-up en un circuito. En la matriz, los LED IR están conectados con resistencias pull-up de 220 ohmios.
Fotodiodos: los fotodiodos se utilizan como receptores de infrarrojos en el circuito. Un fotodiodo es un tipo de diodo que se polariza directamente cuando la luz incide sobre él. Tiene una alta resistencia cuando no incide sobre él la luz. Cuando la intensidad de la luz que incide sobre él aumenta, comienza a polarizarse y la corriente comienza a fluir a través de él. Por lo tanto, cuando la luz incide sobre él, su resistencia disminuye y hay menos caída de voltaje a través de él. Cuando la luz no incide sobre él, su resistencia aumenta y hay una mayor caída de voltaje a través de él. El fotodiodo se ve exactamente como un LED y puede tener una película azul oscuro o negra en el revestimiento exterior. Los fotodiodos se utilizan en configuración de polarización inversa en el circuito. En el circuito se utiliza un conjunto de dos fotodiodos instalados en línea con transmisores de infrarrojos. Los fotodiodos están conectados a los pines de interrupción externos INT0 e INT1 de la placa Arduino.
Imagem do transmissor IR e da matriz de fotodiodos usados ​​para contagem de visitantes
Fig. 8: Imagen del transmisor de infrarrojos y el conjunto de fotodiodos utilizados para el recuento de visitantes
Sensor DHT-11: DHT-11 es un sensor de temperatura y humedad. El sensor DHT11 consta de dos componentes principales: uno es el componente de detección de humedad y el otro es el sensor de temperatura NTC (o termistor). El termistor es en realidad una resistencia variable que cambia su resistencia con los cambios de temperatura. Ambos detectan la temperatura y la humedad del área y proporcionan salida al IC (que está ubicado en la parte posterior del sensor). El sensor tiene cuatro pines: VCC, Tierra, salida de datos y NC. Los pines VCC y Tierra están conectados al VCC y Tierra comunes respectivamente. El pin Data Out del sensor está conectado al pin PD7 de la placa Arduino a través de una resistencia pull-up de 10K.
Diagrama de pinos do sensor de temperatura e umidade DHT-11
Fig. 9: Diagrama de pines del sensor de temperatura y humedad DHT-11
Servidor ThingSpeak: el servidor ThingSpeak se utiliza para visualizar los datos recibidos desde el dispositivo IoT. Los datos se muestran en forma de gráficos en la plataforma. ThingSpeak genera la clave API de lectura y escritura. La clave Write API se usa para escribir los datos en el canal y Read Channel API se usa para permitir que otros vean feeds y gráficos de canales privados. Los datos también se pueden guardar en la plataforma para referencia futura.
Para configurar la plataforma ThingSpeak para acceder a los datos contenidos en la misma, primero se debe crear una cuenta en la plataforma. Luego se debe crear un canal para los datos de esa cuenta. Esto se puede hacer navegando a la ventana del canal y creando un nuevo canal. La información solicitada deberá cumplimentarse en el formulario disponible en la página web para que se creen los campos necesarios. Para este proyecto, se deben crear tres campos: Total de personas, Temperatura y Humedad. Luego, estos campos se pueden verificar en vivo en el servidor. Después de guardar la configuración del canal, se genera una clave API de escritura y se debe anotar. Esta clave Write API se utiliza en el código del firmware Arduino para acceder al canal privado creado en la cuenta de ThingSpeak.
Protótipo de contador de visitantes Arduino Thingspeak conectado com TCP-IP baseado em ESP8266
10: Prototipo de contador de visitas Arduino Thingspeak conectado con TCP-IP basado en ESP8266
Cómo funciona el circuito –
A medida que el circuito se enciende, la placa Arduino comienza a leer datos de los receptores de infrarrojos y el sensor DHT-11. Los receptores de infrarrojos están conectados en serie con resistencias variables entre VCC y tierra en una configuración de polarización inversa formando un circuito divisor de voltaje. La salida de los receptores de IR (fotodiodos) se toma de la unión de los terminales catódicos del receptor de IR. En condiciones normales, la luz emitida por los transmisores de infrarrojos es recibida continuamente por fotodiodos. Esto mantiene la salida lógica digital de los fotodiodos ALTA. Cuando una persona entra a la casa, la luz de los transmisores de infrarrojos se bloquea y la salida lógica de los fotodiodos cambia a BAJA. Los receptores de IR están conectados a los pines de interrupción externos del Arduino, por lo que se genera una interrupción en los pines INT0 e INT1 del Arduino cuando una persona entra o sale de la casa. Se utilizan dos pares de transmisor y receptor de infrarrojos. La secuencia en la que se generan las interrupciones en los pines INT0 e INT1 indica si una persona entró o salió de la casa. En consecuencia, el número de ocupantes actuales de la casa aumenta o disminuye.
El sensor de temperatura y humedad DHT11 es un sensor digital con sensor de humedad capacitivo integrado y termistor. Transmite una lectura de temperatura y humedad en tiempo real cada 2 segundos. El sensor funciona con una fuente de alimentación de 3,5 a 5,5 V y puede leer temperaturas entre 0° C y 50° C y humedad relativa entre 20% y 95%. El DHT11 detecta vapor de agua midiendo la resistencia eléctrica entre los dos electrodos. El componente sensor de humedad es un sustrato que retiene la humedad con electrodos aplicados a la superficie. Cuando el sustrato absorbe vapores de agua, el sustrato libera iones, lo que aumenta la conductividad entre los electrodos. El cambio de resistencia entre los dos electrodos es proporcional a la humedad relativa. Una humedad relativa más alta disminuye la resistencia entre los electrodos, mientras que una humedad relativa más baja aumenta la resistencia entre los electrodos.
El DHT11 mide la temperatura con un sensor de temperatura NTC (termistor) montado en superficie integrado en la unidad. El Sensor DHT 11 envía datos en formato digital a la placa Arduino en un protocolo de un solo cable que debe implementarse en el lado del firmware. Primero, el pin de datos se configura para la entrada y se le envía una señal de inicio. La señal de inicio comprende un BAJO durante 18 milisegundos seguido de un ALTO durante 20 a 40 microsegundos seguido de un BAJO nuevamente durante 80 microsegundos y un ALTO durante 80 microsegundos. Después de enviar la señal de inicio, el pin se configura para salida digital y se bloquean los datos de 40 bits que consisten en la lectura de temperatura y humedad. De los datos de 5 bytes, los primeros dos bytes son la parte entera y decimal de la lectura de humedad relativa respectivamente, el tercer y cuarto bytes son la parte entera y decimal de la lectura de temperatura y el último es el byte de suma de verificación. El protocolo de un solo cable se implementa en firmware utilizando una biblioteca de código abierto disponible para Arduino. Arduino también se conecta a Ethernet mediante una biblioteca de código abierto. Los valores leídos de temperatura y humedad junto con el número de ocupantes se muestran en el módulo OLED.
Imagem mostrando dados do sensor e contagem de visitantes exibidos no módulo OLED
Fig. 11: Captura de pantalla del gráfico que muestra el número de visitantes en el servidor de Thingspeak
Los mismos datos se pasan al servidor ThingSpeak cada tres segundos accediendo al servidor a través de la clave Write API. Los datos se transmiten a través del protocolo TCP/IP enviando comandos AT al módulo ESP a través de comunicación en serie. Los datos pasados ​​a los tres campos se actualizan cada tres segundos y se muestran en forma de gráficos en el servidor. El recuento de visitantes se muestra de la siguiente manera:
Captura de tela do gráfico mostrando o número de visitantes no servidor Thingspeak
Fig. 11: Captura de pantalla del gráfico que muestra el número de visitantes en el servidor de Thingspeak
De manera similar, la temperatura se muestra en el servidor de la siguiente manera:
Captura de tela do gráfico mostrando a temperatura no servidor Thingspeak
Figura 12: Captura de pantalla del gráfico que muestra la temperatura en el servidor Thingspeak
La humedad también se muestra gráficamente en el servidor de la siguiente manera:
Captura de tela do gráfico mostrando a umidade no servidor Thingspeak
Fig. 13: Captura de pantalla del gráfico que muestra la humedad en el servidor Thingspeak
Guía de programación –
La placa Arduino está cargada con un boceto para contar visitantes, leer valores de temperatura y humedad del sensor DHT-11, mostrar datos de temperatura y humedad en OLED, implementar el protocolo TCP/IP, conectarse a la plataforma ThingSpeak y enviar datos a el servidor de la nube. El código Arduino carga una biblioteca estándar para la interfaz entre el módulo OLED y el sensor DHT-11. Se declaran variables y objetos para almacenar información sobre temperatura, humedad y recuento de visitantes.
La función timer1_init está definida para inicializar temporizadores. Se llama a OLED_Welcome_Message(void) para mostrar mensajes iniciales en el OLED.
Arduino utiliza el módulo ESP para conectarse a la red local y, por tanto, al servidor ThingSpeak. El siguiente código se utiliza para inicializar la conexión al punto de acceso Wi-Fi y configurar la clave Write API para acceder al servidor ThingSpeak.
//ESP866-01 Conexión WIFI
#define SSID “Escribe tu SSID” //”SSID-WiFiname”
#define PASS “contraseña //”contraseña”
#definir IP “184.106.153.149” //thingspeak.com ip
Mensaje de cadena = “GET /update?key=Write_API_Key”; //CLAVE API de nuestro canal
La función connectWiFi se llama para conectarse a puntos de acceso Wi-Fi. Los comandos AT – AT+CWMODE=1 se pasan al módulo ESP para configurar el Wi-Fi en modo estación. El comando AT – AT+CWJAP se pasa al módulo ESP para conectarse al punto de acceso Wi-Fi.
Una vez establecida la conexión con la red local y el servidor ThingSpeak, Arduino lee los datos de los sensores. Las funciones PERSONIN y PERSONOUT se utilizan para aumentar y disminuir el recuento de visitantes. La función Temperature_and_Humidity_Test se utiliza para leer los valores de temperatura y humedad del sensor DHT-11 y formatear la información en una cadena. La función Display_Data_on_OLED puede mostrar datos en el módulo OLED.
Se llama a la función update_Data_To_Server para actualizar los datos del sensor en el servidor ThingSpeak. En la función, el comando AT – AT+CIPSTART se pasa al módulo ESP para iniciar la conexión TCP y luego se pasa el comando AT – AT+CIPSEND para enviar datos al servidor. La conexión TCP se cierra pasando el comando AT – AT+CYPCLOSE al módulo ESP.
Consulte el boceto completo de Arduino en la sección de códigos para una mejor comprensión.
En el próximo tutorial, se analizará el protocolo UDP.

Código fuente del proyecto

 ###



 //Programa para


 /*

 * Nombre del archivo: IR_based_Visitor_counter_and_DHT11_test.ino

 * Creado: 14/02/2017 11:02:11 a.m.

 * Código fuente principal para el contador Visior basado en IR y la prueba DHT11

 * Probado en una placa Arduino basada en ATmega328 que funciona con un oscilador interno a 16 MHz

 */


 /*

 * Pines de entrada/salida del Arduino Baord

 *A5 - Patilla SCL OLED

 *A4 - clavija OLED SDA

 *Transmisión - ESP8266-01 Recepción

 *Rx - ESP8266-01 Transmisión
 
*D2 - Salida IR1 (PERSONINA)

 *D3 - Salida IR2 (PERSONA)

 *D7 - Salida DHT11 (pin2)

 */


 //Biblioteca gráfica universal para pantalla Oled(128x64)

 #incluir "U8glib.h"


 //Biblioteca de sensores de temperatura DHT11 o DHT22

 #incluir "DHT.h"


 //Configurar objeto u8g

 U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE U8G_I2C_OPT_DEV_0);


 //Declarar todas las variables globales

 const int PersonaEn = 2; //Variable para retener la entrada entrante de la persona

 const int PersonaSalida = 3; //Variable para retener la entrada saliente de la persona

 recuento int volátil sin signo = 0; //Variable para mantener el valor del conteo

 temperatura interna; //Variable para mantener la temperatura

 humedad interna; //Variable para mantener la humedad

 temperatura de cadena C; //Variable para contener el valor del carácter


 char cadena (10); //Inicialización de matriz para contener la cadena


 // Declaración de tipo y pin DHT11 o DHT22
 
#define DHTPIN 7 //Salida DHT11 conectada al Pin Digital 7

 #define DHTTYPE DHT11 //DHT TYPE-DHT 11 o 22

 DHT dht(DHTPIN, DHTTYPE); //Declaración DHTPIN y TYPE


 //ESP866-01 CONEXIÓN WIFI

 #define SSID "NO UR WIFI" //"SSID-WiFiname"

 #define PASS "marketing" //"contraseña"

 #definir IP "184.106.153.149" //thingspeak.com ip

 Mensaje de cadena = "GET /update?key=03JHV63FG27FYL3R"; //CLAVE API de nuestro canal


 //Inicializa la variable en la función de configuración

 configuración vacía

 {

 Serie.begin(115200); //Inicializa la comunicación serie a 115200 bps

 Serial.println("EN"); //Cuando la velocidad en baudios coincida, imprima AT en el monitor serie

 retraso(5000);


 //Condición para verificar si Serial encuentra una respuesta Ok de ESP8266 o no

 //Si encuentra una respuesta correcta, llame a la función connectWifi

 si(Serial.find("OK"))

 {

 conectarWiFi;

 }


 pinMode(PersonaEn, ENTRADA); //Inicializa el Pin Digital-2 como entrada
 
pinMode(PersonaSalida, ENTRADA); //Inicializa el Pin-3 digital como entrada



 adjuntarInterrupt(digitalPinToInterrupt (2), PERSONIN, FALLING); //Adjuntar el controlador de interrupciones para D2

 adjuntarInterrupt(digitalPinToInterrupt (3), PERSONOUT, FALLING); //Adjuntar controlador de interrupciones para D3


 //Inicializar la función Timer1

 temporizador1_init;



 //Mostrar mensaje de bienvenida en OLED

 OLED_Mensaje_de_bienvenida;

 }


 // función de bucle

 bucle vacío

 {

 // comprueba si el bit de bandera está activado

 // si está configurado, significa que ha habido una coincidencia de comparación

 // y el cronómetro se ha borrado

 // aprovecha esta oportunidad para actualizar los datos en OLED y Thingspeak

 si (TIFR1 y (1 << OCF1A))

 {

 //Obtener el valor de temperatura y humedad del sensor DHT11

 Prueba_de_temperatura_y_humedad;



 //Actualiza la temperatura, la humedad y el total de personas en el servidor (Thingspeak)

 actualizar_Datos_Al_Servidor;



 //Muestra la temperatura, la humedad y la persona total en OLED
 
Mostrar_datos_en_OLED;

 }

 // ¡esperar! tenemos una cosa más que hacer

 // borra el bit de bandera manualmente ya que no hay ningún ISR para ejecutar

 // borrarlo escribiendo '1' (según la hoja de datos)

 TIFR1 = (1 << OCF1A);

 }


 /*

 * Nombre de la función: OLED_Welcome_messgage

 * Para mostrar el texto cuando se inicia OLED

 * Parámetro de entrada - anulado

 * Devolución - nula

 */

 anular OLED_Mensaje_de_bienvenida(anular)

 {

 u8g_uint_t x = 0;

 u8g_uint_t y = 20;

 const char *s = "¡CONTADOR DE VISORES!";

 //Dibuja la cadena "¡CONTADOR DE VISITANTES!" en OLED con puntos de referencia dados

 u8g.primeraPágina;

 del

 {

 u8g.setFont(u8g_font_unifont);

 u8g.drawStr(x,y,s);

 }

 mientras (u8g.nextPage);

 }


 /*

 * Función de interrupción externa INT0-PERSONIN

 * Para contar la persona que entra a la habitación.

 */

 PERSONINA VACÍA

 {

 contar++;

 }


 /*

 * Función de interrupción externa INT1-PERSONOUT

 * Para contar la persona que sale de la habitación.

 */

 persona vacía

 {

 contar--;

 si (cuenta <= 0)

 contar = 0;

 }


 /*
 
*Nombre de la función: Prueba_de_temperatura_y_humedad

 *Lea el valor de temperatura y humedad del sensor DHT

 */

 void Prueba_de_temperatura_y_humedad

 {

 //Leer la temperatura y la humedad del sensor DHT

 temperatura = dht.readTemperature;

 humedad = dht.readHumedad;

 buffer(10);


 //Hay una función c útil llamada dtostrf que convertirá un flotante en una matriz de caracteres para que
 Luego se puede imprimir fácilmente.

 //El formato es: dtostrf(floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);

 tempC = dtostrf(temperatura, 4, 1, buffer);

 }


 /*

 *Nombre de la función= Display_Data_on_OLED

 *Para mostrar los datos en OLED con un formato particular

 */

 anular Display_Data_on_OLED

 {

 //Para mostrar en OLED

 u8g.primeraPágina;

 del

 {

 //Establece la fuente de visualización

 u8g.setFont(u8g_font_helvB08);



 //Dibuja la cadena "Persona total" con puntos de referencia especificados (x,y)

 u8g.drawStr( 0, 15, "TOTAL Persona:");

 //establece el valor de conteo en puntos especificados OLED

 u8g.drawStr( 80, 15, dtostrf(cuenta, 5, 2, cadena));

 
//Dibuja la cadena "Humedad" con puntos de referencia especificados (x,y)

 u8g.drawStr( 0, 30, "Humedad:");

 //establece el valor de humedad en los puntos especificados por OLED

 u8g.drawStr( 80, 30, dtostrf(humedad, 5, 2, str));

 u8g.drawStr(120, 30, "%");



 //Dibuja la cadena "Temperatura" con puntos de referencia especificados (x,y)

 u8g.drawStr( 0, 45, "Temperatura:");

 //establece el valor de temperatura en los puntos especificados OLED

 u8g.drawStr( 80, 45, dtostrf(temperatura, 5, 2, str));

 u8g.drawStr(120, 45, "260C");

 }

 mientras (u8g.nextPage);

 }


 /*

 * Nombre de la función: update_Data_To_Server

 * Establecer conexión TCP y enviar los datos actualizados al servidor (Thingspeak)

 */

 anular update_Data_To_Server

 {

 //Especifique en qué canal de conexión desea conectarse (0 - 4),

 //el tipo de protocolo (TCP/UDP), la dirección IP (o dominio si tiene acceso DNS)

 //y el número de puerto usando el comando CIPSART:

 Cadena cmd = "AT+CIPSTART="TCP","";

 cmd += IP;

 cmd += "",80";

 Serie.println(cmd);



 si(Serial.find("Error"))

 {
 
devolver;

 }


 cmd = mensaje;

 cmd += "&field1="; //Crea el campo1 para el total de personas en la habitación

 cmd += Cadena(recuento); //Subir datos de conteo a thingspeak

 cmd += "&field2="; //Crea el campo2 para Temperatura

 cmd += tempC; //Subir datos de temperatura a Thingspeak

 cmd += "&field3="; //Crea el campo3 para Humedad

 cmd += String(humedad); //Subir datos de humedad a Thingpeak

 cmd += "rnrn";


 //Enviar longitud de datos

 Serial.print("AT+CIPSEND=");

 Serial.println(cmd.longitud);


 //Si todo funciona bien, obtenemos ">"

 si(Serial.find(">"))

 {

 //El monitor serial imprime el comando Get con la clave API y los campos especificados

 Serie.print(cmd);

 }

 demás

 {

 //cerrar la conexión TCP

 Serial.println("AT+CYPCLOSE");

 Prueba_de_temperatura_y_humedad;

 contar;

 }

 }


 /*

 *Nombre de la función: conectarWifi

 *Establece la conexión entre el ESP8266 y Wifi
 
*Parámetro de entrada nulo

 *Tipo de retorno: booleano

 */

 conexión booleanaWiFi

 {

 //Habilitamos el módulo para que actúe como estación y punto de acceso

 Serial.println("AT+CWMODE=1");

 retraso(2000);



 //Únete al punto de acceso WIFI

 Cadena cmd="AT+CWJAP="";

 cmd+=SSID;

 cmd+="","";

 cmd+=PASAR;

 cmd+=""";



 //Imprime el SSID y la contraseña de Wifi en el monitor serie

 Serie.println(cmd);

 retraso(5000);



 si(Serial.find("OK"))

 {

 devolver verdadero;

 }

 demás

 {

 falso retorno;

 }

 }


 /*

 *Nombre de la función: timer1_init

 Timer1 (16 bits) crea el período de tiempo de retraso

 para mostrar los datos en OLED y el servidor (Thingpeak)

 */

 temporizador vacío1_init

 {

 //Inicializar registros

 TCCR1A = 0; //establece todo el registro TCCR1A a 0

 TCCR1B = 0; //establece todo el registro TCCR1B a 0



 //Inicializa el contador

 TCNT1 = 0;



 // Establece el valor de comparación igual a count_value_for_Delay_time que

 // se calculó para generar un período de tiempo de retardo
 
// Esto actualiza la temperatura, la humedad y el total de personas después de cada período de retraso.

 OCR1A = 46874;



 //Iniciar temporizador1

 //Configurar temporizador con preescalador = 1024 y modo CTC

 TCCR1B = (1 << WGM12) (1 << CS12) (1 << CS10);

 }


 ### 

Vídeo del proyecto

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.