{"id":343,"date":"2022-12-12T12:07:46","date_gmt":"2022-12-12T12:07:46","guid":{"rendered":"https:\/\/blogsaverroes.juntadeandalucia.es\/industria4\/?p=343"},"modified":"2022-12-12T12:07:46","modified_gmt":"2022-12-12T12:07:46","slug":"documentacion-del-medidor-de-co2-funcionando-con-thingspeak","status":"publish","type":"post","link":"https:\/\/blogsaverroes.juntadeandalucia.es\/industria4\/2022\/12\/12\/documentacion-del-medidor-de-co2-funcionando-con-thingspeak\/","title":{"rendered":"Documentaci\u00f3n del medidor de CO2 funcionando con ThingSpeak"},"content":{"rendered":"<h1 class=\"western\">SETUP del entorno de programaci\u00f3n con Arduino IDE<\/h1>\n<p>Tras las instalaci\u00f3n del Arduino IDE, es necesario indicarle al entorno que se va a trabajar con placas del fabricante Espressif, en concreto con la Wemos D1 mini Lite. Para ello<b>:<\/b><\/p>\n<p>Ir a Archivo, Preferencias, Gestor de URLs adicionales de tarjetas y a\u00f1adir la l\u00ednea:<\/p>\n<ul>\n<li>http:\/\/arduino.esp8266.com\/stable\/package_esp8266com_index.json<\/li>\n<\/ul>\n<p>Luego ir a Herramientas, Gestor de tarjetas y seleccionar la D1 mini Lite.<\/p>\n<h2 class=\"western\"><b>Librer\u00edas<\/b> necesarias para el medidor de CO2<\/h2>\n<ul>\n<li>Thingspeak (incluido el c\u00f3digo fuente).<\/li>\n<li>Adafruit_SSD1306 (con todas sus dependencias).<\/li>\n<li>Adafruit_NeoPixel.<\/li>\n<li>DHT sensor library by Adafruit (con todas sus dependencias).<\/li>\n<li>Incluir como librer\u00eda .ZIP: WiFiManager-master by tzapu.<\/li>\n<\/ul>\n<h2 class=\"western\">En caso de usar entorno Linux<\/h2>\n<p><b>Para poder utilizar el puerto USB asignado a la placa Arduino en Linux <\/b>debemos agregar a nuestro usuario el grupo especial creado para el acceso al device tty asignado al puerto USB del Arduino,el grupo es el <b>dialout<\/b> de otra manera no podremos subir el c\u00f3digo a la placa, obteniendo errores asociados a denegaci\u00f3n de acceso al puerto por no tener los permisos requeridos.<\/p>\n<p>Conectamos la placa y desde el IDE verificamos el puerto asignado Tools &gt; Port, en mi caso el device es el <b>\/dev\/tty\/ACM0<\/b><\/p>\n<p>verificamos el grupo asociado al dispositivo:<\/p>\n<blockquote><p>$ ls -all \/dev\/tty\/ACM0<br \/>\ncrw-rw&#8212;- 1 root <b>dialout<\/b> 166, 0 Feb 21 19:57 \/dev\/ttyACM0<\/p><\/blockquote>\n<p>agregamos a nuestro usuario al grupo dialout:<\/p>\n<blockquote><p>$ sudo usermod -a -G dialout $USER<\/p><\/blockquote>\n<p>debemos hacer logout para que el sistema tome los cambios y as\u00ed poder acceder al puerto sin tener que levantar el IDE como usuario root.<\/p>\n<p>&nbsp;<\/p>\n<h1 class=\"western\">Organizaci\u00f3n del c\u00f3digo<\/h1>\n<p>El c\u00f3digo actual funcionando con el servidor de Thingspeak tira de varias librer\u00edas incluidas de diferente forma, como se comentaba anteriormente:<\/p>\n<ul>\n<li>WiFiManager-master.zip.<\/li>\n<li>ThingSpeak.cpp y ThingSpeak.h como archivos de c\u00f3digo y cabecera de C++. Pr\u00e1cticamente todo el c\u00f3digo est\u00e1n en el archivo de cabecera, ligeramente modificado respecto a la versi\u00f3n original para apuntar al servidor del Polit\u00e9cnico. Esto est\u00e1 documentado en las primeras l\u00edneas del archivo.<\/li>\n<\/ul>\n<p>Adem\u00e1s cuenta con varios archivos que completan la funcionalidad:<\/p>\n<ul>\n<li>medidor-v4-Thingspeak.ino. Este es el archivo principal de c\u00f3digo, con amplia documentaci\u00f3n interna.<\/li>\n<li>secrets.h. Este es el archivo que contiene las claves para abrir los canales junto con las APIKEY, algo as\u00ed como el login para poder enviar los datos.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h1 class=\"western\">C\u00f3digo principal para conectar con Thingspeak<\/h1>\n<p>A continuaci\u00f3n se incluye el contenido de los archivos realizados para programar los medidores comenzando por la modificaci\u00f3n del c\u00f3digo fuente de la librer\u00eda ThingSpeak.<\/p>\n<p>&nbsp;<\/p>\n<h2 class=\"western\">ThingSpeak.h<\/h2>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ #define PRINT_DEBUG_MESSAGES<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ #define PRINT_HTTP<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#ifndef<\/span> ThingSpeak_h<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">#define ThingSpeak_h<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">#define TS_VER <\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"2.0.0\"<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">#include <\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"Arduino.h\"<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">#include &lt;Client.h&gt;<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Servidor Thingspeak por defecto: \"api.thingspeak.com\" || Servidor del Polit\u00e9cnico:\"thingspeak.politecnicomalaga.com\"<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Puerto &nbsp; Thingspeak por defecto: \"80\" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; || Puerto del Polit\u00e9cnico: &nbsp;\"8080\" &nbsp; &nbsp; &nbsp; &nbsp; <\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Puerto HTTPS Thingspeak por defecto: \"443\" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|| Puerto HTTPS del Polit\u00e9cnico: &nbsp;\"8443\" <\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/Aqu\u00ed hay que pegar lo que corresponda de los comentarios de arriba<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">#define THINGSPEAK_URL <\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"thingspeak.politecnicomalaga.com\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">#define THINGSPEAK_PORT_NUMBER <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">8080<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">#define THINGSPEAK_HTTPS_PORT_NUMBER <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">8443<\/span><\/span><\/span><\/span><\/code><\/p>\n<h2 class=\"western\">medidor-v4-Thingspeak.ino<\/h2>\n<p>Con comentarios dentro del propio c\u00f3digo, esta es la fuente principal de la que tiran los medidores de CO2.<\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#include<\/span> <span style=\"color: #0000ff\">&lt;<\/span><span style=\"color: #a31515\">SoftwareSerial.h<\/span><span style=\"color: #0000ff\">&gt;<\/span> &nbsp; &nbsp; <span style=\"color: #727c81\">\/\/Librer\u00eda para crear puerto serie software en otros pines<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#include<\/span> <span style=\"color: #0000ff\">&lt;<\/span><span style=\"color: #a31515\">Wire.h<\/span><span style=\"color: #0000ff\">&gt;<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\">\/\/ Librer\u00eda para comunicar la placa arduino con dispositivos que trabajan mediante el protocolo I2C\/TWI<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#include<\/span> <span style=\"color: #0000ff\">&lt;<\/span><span style=\"color: #a31515\">Adafruit_SSD1306.h<\/span><span style=\"color: #0000ff\">&gt;<\/span> &nbsp; <span style=\"color: #727c81\">\/\/ Librer\u00eda para controlar la OLED mon\u00f3croma de Adafruit basada en los drivers SSD1306 &nbsp;https:\/\/github.com\/adafruit\/Adafruit_SSD1306<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#include<\/span> <span style=\"color: #0000ff\">&lt;<\/span><span style=\"color: #a31515\">Adafruit_GFX.h<\/span><span style=\"color: #0000ff\">&gt;<\/span> &nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\">\/\/ Librer\u00eda con para control de funciones gr\u00e1ficas de la OLED https:\/\/github.com\/adafruit\/Adafruit-GFX-Library<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#include<\/span> <span style=\"color: #0000ff\">&lt;<\/span><span style=\"color: #a31515\">Adafruit_NeoPixel.h<\/span><span style=\"color: #0000ff\">&gt;<\/span> &nbsp;<span style=\"color: #727c81\">\/\/ Librer\u00eda para controlar el led RGB WS2812B<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#include<\/span> <span style=\"color: #0000ff\">&lt;<\/span><span style=\"color: #a31515\">DHT.h<\/span><span style=\"color: #0000ff\">&gt;<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/ Librer\u00eda del sensor de temperatura y humedad DHT22 basado en el AM2302<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#include<\/span> <span style=\"color: #0000ff\">&lt;<\/span><span style=\"color: #a31515\">ESP8266WiFi.h<\/span><span style=\"color: #0000ff\">&gt;<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/ Librer\u00eda de control de la WiFi para el ESP<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#include<\/span> <span style=\"color: #0000ff\">&lt;<\/span><span style=\"color: #a31515\">DNSServer.h<\/span><span style=\"color: #0000ff\">&gt;<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/ Librer\u00eda para montar lo relativo al DNS en la conexi\u00f3n a la red<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#include<\/span> <span style=\"color: #0000ff\">&lt;<\/span><span style=\"color: #a31515\">WiFiManager.h<\/span><span style=\"color: #0000ff\">&gt;<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/ Librer\u00eda para manejar la WiFi de forma sencilla con el m\u00f3vil por ejemplo y no tener hardcoded los datos de la red https:\/\/github.com\/tzapu\/WiFiManager<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> TS_ENABLE_SSL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\">\/\/ Para hacer el env\u00edo seguro de datos<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#include<\/span> <span style=\"color: #0000ff\">\"<\/span><span style=\"color: #a31515\">ThingSpeak.h<\/span><span style=\"color: #0000ff\">\"<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\">\/\/ Librer\u00eda para subir los datos a la nube IoT de ThingSpeak.com<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#include<\/span> <span style=\"color: #0000ff\">\"<\/span><span style=\"color: #a31515\">secrets.h<\/span><span style=\"color: #0000ff\">\"<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/ Archivo a\u00f1adido al proyecto para no tener las contrase\u00f1as en el mismo archivo de c\u00f3digo. Con la WiFi s\u00f3lo lo he usado al principio con una red fija<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Con las credenciales para subir a la nube IoT es necesario mantenerlo.<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/PAR\u00c1METROS SUSCEPTIBLES DE MODIFICARSE. Hay que tocar aqu\u00ed en funci\u00f3n de lo que hay en el archivo secrets.h y tambi\u00e9n al inicio de la librer\u00eda ThingSpeak.h para escoger URL y puerto\/\/ <\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> INDICE_MEDIDOR <span style=\"color: #098658\">0<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/ Mediante este valor elijo uno de los medidores cuyos datos est\u00e1n almacenados en el archivo &nbsp;secrets.h<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> DELTA_CO2 <span style=\"color: #098658\">0<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\">\/\/ Marco un offset (+16 en abril de 2021) a sumar al m\u00ednimo de CO2 medido, ya que el sensor toma 400 como base y realmente la base es superior. Datos de https:\/\/gml.noaa.gov\/ccgg\/trends\/global.html<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> FACTOR_CORRECCION <span style=\"color: #098658\">0<\/span> &nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\">\/\/ Factor de offset a sumar para los medidores que se vean que difieren del valor correcto. Por ahora solo el medidor 4 tiene un offset de -90<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> MIN_CO2 <span style=\"color: #098658\">400<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\">\/\/ Marco el m\u00ednimo v\u00e1lido del sensor para filtrar datos err\u00f3neos<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> MAX_CO2 <span style=\"color: #098658\">5000<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/ Marco el m\u00e1ximo v\u00e1lido del sensor para filtrar datos err\u00f3neos<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> NIVEL_1 <span style=\"color: #098658\">500<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\">\/\/ Primer nivel de CO2 a considerar<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> NIVEL_2 <span style=\"color: #098658\">600<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\">\/\/ Segundo nivel de CO2 a considerar<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> NIVEL_3 <span style=\"color: #098658\">700<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\">\/\/ Tercer nivel de CO2 a considerar<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Definir constantes<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> ANCHO_PANTALLA <span style=\"color: #098658\">128<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/ Ancho pantalla OLED<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> ALTO_PANTALLA <span style=\"color: #098658\">64<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/ Alto pantalla OLED<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> DHTTYPE DHT22 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\">\/\/ DHT 22 &nbsp;(AM2302), AM2321<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> NUMPIXELS <span style=\"color: #098658\">1<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\">\/\/ Modificamos este numero seg\u00fan los LEDs con los que contemos<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> UPDATE_TIME_LOCAL <span style=\"color: #098658\">5000<\/span> &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/ Intervalo en ms para pedir datos a sensores<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> UPDATE_TIME_REMOTE <span style=\"color: #098658\">60000<\/span> &nbsp;<span style=\"color: #727c81\">\/\/ Intervalo en ms para enviar datos a la nube de Thingspeak<\/span><\/span><\/span><\/span><\/code><\/p>\n<p>&nbsp;<\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> PINDHT D4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\">\/\/ Pin D4 al que conecto el sensor de temperatura y humedad (GPIO2)<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> PINLEDRGB D3 &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/ Pin D3 al que conecto el DIN del primer led en la cadena (GPIO0)<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> PINBUZZER D8 &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/ Pin D8 al que conecto el buzzer pasivo (GPIO15)<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> PINTXSENSOR D6 &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/ Pin D6 al que conecto el RX del micro cruzado con el TX del sensor (GPIO12)<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">#define<\/span> PINRXSENSOR D7 &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/ Pin D7 al que conecto el TX del micro cruzado con el RX del sensor (GPIO13)<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/El pin D1 (GPIO5) es SCL y el pin D2 (GPIO4) es SDA y van conectados a esas conexiones de la OLED. La encuentra por la direcci\u00f3n f\u00edsica I2C<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">unsigned<\/span> <span style=\"color: #0000ff\">long<\/span> myChannelNumber = medidoresCanales[INDICE_MEDIDOR]; &nbsp; <span style=\"color: #727c81\">\/\/canal a usar<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">const<\/span> <span style=\"color: #0000ff\">char<\/span> * myWriteAPIKey = medidoresAPIKEY[INDICE_MEDIDOR]; &nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\">\/\/APIKEY del canal a usar<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">char<\/span> ssid[] = SECRET_SSID; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/mi SSID (nombre de la red)<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">char<\/span> pass[] = SECRET_PASS; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/el password de mi red<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">byte<\/span> mac[<span style=\"color: #098658\">6<\/span>]; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/la direcci\u00f3n f\u00edsica (MAC) del interfaz WiFi<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">unsigned<\/span> <span style=\"color: #0000ff\">long<\/span> tiempo = <span style=\"color: #098658\">0<\/span>; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\">\/\/ Variable para controlar el tiempo de ejecuci\u00f3n<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/WiFiClient client; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\/\/ Cliente de WiFi<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">WiFiClientSecure client; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/ Cliente seguro de WiFi<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">DHT dht(PINDHT, DHTTYPE); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\">\/\/ Objeto para refenciar al sensor de temperatura y humedad de la clase DHT<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">Adafruit_SSD1306 display(ANCHO_PANTALLA, ALTO_PANTALLA, &amp;<span style=\"color: #e97366\"><b>Wire<\/b><\/span>, -<span style=\"color: #098658\">1<\/span>); &nbsp; <span style=\"color: #727c81\">\/\/ Objeto para refenciar a la pantalla OLED de la clase Adafruit_SSD1306<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">Adafruit_NeoPixel pixels(NUMPIXELS, PINLEDRGB, NEO_GRB + NEO_KHZ800); <span style=\"color: #727c81\">\/\/ Objeto para refenciar al RGB de la clase Adafruit_NeoPixel<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">SoftwareSerial sensor(PINTXSENSOR, PINRXSENSOR); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/ Objeto para crear un puerto serie virtual de la clase SoftwareSerial<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Usamos el pin 12 (D6) para Rx del micro y el pin 13 (D7) para Tx del micro. Est\u00e1n cruzados con la UART del sensor<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">byte<\/span> readCO2[] = {<span style=\"color: #3030c0\">0xFE<\/span>, <span style=\"color: #3030c0\">0X44<\/span>, <span style=\"color: #3030c0\">0X00<\/span>, <span style=\"color: #3030c0\">0X08<\/span>, <span style=\"color: #3030c0\">0X02<\/span>, <span style=\"color: #3030c0\">0X9F<\/span>, <span style=\"color: #3030c0\">0X25<\/span>}; &nbsp;<span style=\"color: #727c81\">\/\/Command packet to read Co2 (see app note)<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">byte<\/span> response[] = {<span style=\"color: #098658\">0<\/span>, <span style=\"color: #098658\">0<\/span>, <span style=\"color: #098658\">0<\/span>, <span style=\"color: #098658\">0<\/span>, <span style=\"color: #098658\">0<\/span>, <span style=\"color: #098658\">0<\/span>, <span style=\"color: #098658\">0<\/span>}; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/create an array to store the response<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">int<\/span> valMultiplier = <span style=\"color: #098658\">1<\/span>; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/multiplier for value. default is 1. set to 3 for K-30 3% and 10 for K-33 ICB<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">int<\/span> nivelAlarma = <span style=\"color: #098658\">0<\/span>; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #727c81\">\/\/ Sirve para establecer el color del led RGB y el pitido del zumbador si se superan unos ciertos umbrales<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">WiFiManager wm; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\">\/\/ Creamos una instancia de la clase WiFiManager para controlar el acceso a una red cualquiera.<\/span><\/span><\/span><\/span><\/code><\/p>\n<p>&nbsp;<\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">void<\/span> <span style=\"color: #5e6d03\">setup<\/span>()<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><b>Serial<\/b><\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">begin<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">115200<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">delay<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">200<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Para conectar a la WiFi se puede hacer \"a saco\" con la clase WiFi o usando la librer\u00eda WiFiManager (wm), que crea un portal en el que configurar el acceso<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ y se puede hacer desde el m\u00f3vil por ejemplo<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">WiFi.mode(WIFI_STA); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Establecemos el modo STATION expl\u00edcitamente, ya que el ESP lo pone por defecto a STA+AP<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/wm.resetSettings(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Reseteo settings - limpiar credenciales para testeo; Si descomento esta l\u00ednea habr\u00eda que meter los datos de la WiFi cada vez que arranca<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">wm.setConfigPortalBlocking(<\/span><\/span><span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">false<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">); &nbsp;<\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ lo marcamos como no bloqueante; es decir, se puede configurar o no la WiFi, pero el resto sigue funcionando<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Automaticamente se conecta usando las credenciales salvadas por defecto (si antes se hab\u00eda conectado)<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Si la conexi\u00f3n falla arranca un AP con el nombre que se especifica<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Si no salta el inicio de sesi\u00f3n hay que abrir en el navegador la IP 192.168.4.1<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Si salta, est\u00e1s directamente en el mismo punto. Ah\u00ed solo queda seleccionar tu red y meter tu contrase\u00f1a<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Esto s\u00f3lo hay que hacerlo una vez, luego se queda guardado<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">if<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> (wm.autoConnect(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"Medidor 4.0.1\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">)) {<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><b>Serial<\/b><\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">println<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"Conectado a la red\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">else<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> {<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><b>Serial<\/b><\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">println<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"Configportal running\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Begin WiFi. Esto ser\u00eda para una conexi\u00f3n fija y que no haya que configurarla<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ &nbsp;WiFi.begin(ssid, pass); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/Arranco WiFi<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Connecting to WiFi...<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ &nbsp;Serial.print(\"Connecting to \");<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ &nbsp;Serial.println(ssid);<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">client.setInsecure(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/El cliente no verifica al servidor<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">ThingSpeak.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">begin<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(client); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/Arranco cliente de Thingspeak<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><b>Serial<\/b><\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">println<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"Iniciando pantalla OLED\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">); &nbsp; &nbsp;<\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/Arranco OLED<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Iniciar pantalla OLED en la direcci\u00f3n 0x3C<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">if<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> (!display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">begin<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(SSD1306_SWITCHCAPVCC, <\/span><\/span><span style=\"color: #3030c0\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0x3C<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">)) {<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><b>Serial<\/b><\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">println<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"No se encuentra la pantalla OLED\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">while<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> (<\/span><\/span><span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">true<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">sensor.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">begin<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">9600<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">); &nbsp; &nbsp; <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/Arranco sensor de CO2<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">dht.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">begin<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/Arranco DHT22<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">pixels.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">begin<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(); &nbsp; &nbsp; &nbsp; &nbsp; <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/Arranco led RGB<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">tiempo = <\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">millis<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(); &nbsp; &nbsp; &nbsp;<\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/Tomo referencia inicial de tiempo<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">void<\/span> <span style=\"color: #5e6d03\">loop<\/span>()<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">wm.process(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Portal Web para gestionar la conexi\u00f3n a la red<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">sendRequest(readCO2); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Mando petici\u00f3n al sensor para medir CO2<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">int<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> valCO2 = getValue(response); &nbsp;<\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Recojo la respuesta del sensor<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">valCO2 += DELTA_CO2 + FACTOR_CORRECCION; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ A\u00f1ado el offset necesario para tener datos m\u00e1s reales<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">float<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> h = dht.readHumidity(); &nbsp; &nbsp; <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Lectura de humedad del sensor. Toma unos 250 ms<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">float<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> t = dht.readTemperature(); &nbsp;<\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Lectura de temperatura del sensor. Toma unos 250 ms<\/span><\/span><\/span><\/span><\/code><\/p>\n<p>&nbsp;<\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">valCO2 = (valCO2 &gt; MAX_CO2) ? MAX_CO2 : valCO2; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/Saturo el m\u00e1ximo del valor de CO2 para filtrar posibles errores en los que se va al fondo de escala del tipo de dato<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">valCO2 = ((valCO2 &gt; MIN_CO2 * <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0.97<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">) &amp;&amp; (valCO2 &lt; MIN_CO2)) ? MIN_CO2 : valCO2; <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/Saturo el m\u00ednimo del valor de CO2 para filtrar posibles errores (margen del sensor de +-50ppm \/ +-3%)<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">actualizoLedRGB(valCO2);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">mostrarEnDisplay(valCO2, h, t);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">actualizoSonidosAlarma(valCO2,nivelAlarma);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">delay<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(UPDATE_TIME_LOCAL);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><br \/>\n<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/*<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp; &nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">Funci\u00f3n para mandar los datos al display OLED<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">*\/<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">void<\/span> mostrarEnDisplay(<span style=\"color: #0000ff\">int<\/span> nivelCO2, <span style=\"color: #0000ff\">float<\/span> hum, <span style=\"color: #0000ff\">float<\/span> tem)<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Limpiar buffer<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.clearDisplay();<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Color del texto<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.setTextColor(SSD1306_WHITE);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Tama\u00f1o del texto<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.setTextSize(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">1<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Escribir texto<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">if<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> (!isnan(tem)) {<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Posici\u00f3n del texto<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.setCursor(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">); <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/distancia en pixeles empezando por la izquierda \/ &nbsp;distancia en pixeles empezando por arriba<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">print<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(tem);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">print<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\" C \"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">if<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> (!isnan(hum)) {<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.setCursor(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">80<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">); <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/distancia en pixeles empezando por la izquierda \/ &nbsp;distancia en pixeles empezando por arriba<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">print<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(hum);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">println<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\" %\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Tama\u00f1o del texto<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.setTextSize(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">2<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Posici\u00f3n del texto<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.setCursor(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">20<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">16<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Actualiza datos en display si est\u00e1 dentro de los m\u00e1rgenes. El margen inferior tiene un 3% extra para cubrir un margen de error<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">if<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> ((nivelCO2 &gt;= MIN_CO2) &amp;&amp; (nivelCO2 &lt; MAX_CO2))<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">print<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(nivelCO2);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">println<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\" ppm\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">else<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">println<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"Midiendo\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ La MAC se puede escribir en cualquier caso por si tenemos un filtrado MAC en la red, aqu\u00ed la veremos f\u00e1cilmente<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.setTextSize(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">1<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.setCursor(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">56<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">print<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"MAC:\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">print<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(WiFi.macAddress());<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Datos que dependen de que exista conexi\u00f3n<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">if<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> ((WiFi.status() == WL_CONNECTED))<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Conectado a la WiFi. Aqu\u00ed ya puedo escribir la IP y mandar datos a la nube<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.setCursor(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">8<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">48<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Tama\u00f1o del texto<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.setTextSize(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">1<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">print<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"IP: \"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">println<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(WiFi.localIP().toString());<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">if<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> ( (<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">millis<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">() - tiempo &gt; UPDATE_TIME_REMOTE) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/s\u00f3lo mando actualizaciones cada 30 segundos (para pruebas)<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">&amp;&amp; (nivelCO2 &gt;= MIN_CO2) &amp;&amp; (nivelCO2 &lt; MAX_CO2) ) &nbsp; <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/s\u00f3lo se mandan si est\u00e1 dentro de los mismos m\u00e1rgenes definidos para el display<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">subirInternet(nivelCO2, hum, tem); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ subo los datos a la nube<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/* Esto era cuando hab\u00eda buzzer para controlar la informaci\u00f3n del dispositivo<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">if (digitalRead(PINBUZZER)==HIGH)<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp; &nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">mostrarInfoDispositivo();<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">*\/<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Enviar a pantalla<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.display();<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/*<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp; &nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">Funci\u00f3n para mostrar datos del dispositivo al cortocircuitar el pin 8 (el del buzzer) con Vcc<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">*\/<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">void<\/span> mostrarInfoDispositivo()<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Limpiar buffer<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.clearDisplay();<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Color del texto<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.setTextColor(SSD1306_WHITE);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Tama\u00f1o del texto<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.setTextSize(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">1<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.setCursor(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">); <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/distancia en pixeles empezando por la izquierda \/ &nbsp;distancia en pixeles empezando por arriba<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">println<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"Info del dispositivo\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">println<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(medidoresNombres[INDICE_MEDIDOR]); <\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">print<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"U:\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">); display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">print<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(THINGSPEAK_URL);display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">print<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\": \"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">); display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">println<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(THINGSPEAK_PORT_NUMBER);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">print<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"Canal: \"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">); display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">println<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(medidoresCanales[INDICE_MEDIDOR]);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">print<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"KEY: \"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">); display.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">println<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(medidoresAPIKEY[INDICE_MEDIDOR]);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">delay<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">3000<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p>&nbsp;<\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/*<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp; &nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">Funci\u00f3n para subir datos a la nube<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">*\/<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">void<\/span> subirInternet(<span style=\"color: #0000ff\">int<\/span> nivelCO2, <span style=\"color: #0000ff\">float<\/span> hum, <span style=\"color: #0000ff\">float<\/span> tem)<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">if<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> (myChannelNumber == <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">)<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><b>Serial<\/b><\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">println<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"S\u00f3lo muestra datos en local. No se sube nada\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">else<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><b>Serial<\/b><\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">println<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"Mando datos a la nube\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">tiempo = <\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">millis<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">();<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Carga los valores a enviar<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">ThingSpeak.setField(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">1<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, nivelCO2);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">ThingSpeak.setField(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">2<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, tem);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">ThingSpeak.setField(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">3<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, hum);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Escribe todos los campos a la vez.<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">int<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> respuestaServidor = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">if<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> (respuestaServidor==<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">200<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">)<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><b>Serial<\/b><\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">println<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"Datos en la nube correctamente\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/*<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp; &nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">Funci\u00f3n para llamar al buzzer seg\u00fan el nivel de alarma (defcon) que haya<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">*\/<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">void<\/span> actualizoSonidosAlarma(<span style=\"color: #0000ff\">int<\/span> nivelCO2, <span style=\"color: #0000ff\">int<\/span> defcon)<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">if<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> ((nivelCO2 &gt;= MIN_CO2) &amp;&amp; (nivelCO2 &lt; MAX_CO2)) &nbsp; &nbsp;<\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/Suenan alarmas si est\u00e1 dentro de los m\u00e1rgenes l\u00f3gicos, pero por encima del nivel deseado<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">switch<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> (defcon) {<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">case<\/span><\/span><\/span> <span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">2<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">:<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">tonoCorto();<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">break<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">;<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">case<\/span><\/span><\/span> <span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">3<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">:<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">tonoLargo();<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">break<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">;<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">default<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">:<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">break<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">;<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/*<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp; &nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">Funci\u00f3n para actualizar el color del led RGB<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">*\/<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">void<\/span> actualizoLedRGB(<span style=\"color: #0000ff\">int<\/span> nivelCO2)<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">pixels.clear(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Al principio apagamos el(los) LED<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">int<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> indicePixel = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Me fijo en el \u00fanico que tengo<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">int<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> red = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">; <\/span><\/span><span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">int<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> green = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">; <\/span><\/span><span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">int<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> blue = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">100<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/Inicialmente en azul<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">if<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> (nivelCO2 &lt;= NIVEL_1) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/verde<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">red = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">; green = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">255<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">; blue = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">;<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">nivelAlarma = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">;<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">else<\/span><\/span><\/span> <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">if<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> ((nivelCO2 &gt; NIVEL_1) &amp;&amp; (nivelCO2 &lt;= NIVEL_2)) <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/amarillo<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">red = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">150<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">; green = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">150<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">; blue = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">;<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">nivelAlarma = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">1<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">;<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">else<\/span><\/span><\/span> <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">if<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> ((nivelCO2 &gt; NIVEL_2) &amp;&amp; (nivelCO2 &lt;= NIVEL_3)) <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/naranja<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">red = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">200<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">; green = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">150<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">; blue = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">;<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">nivelAlarma = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">2<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">;<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">else<\/span><\/span><\/span> <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">if<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> (nivelCO2 &gt; NIVEL_3) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/rojo<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">red = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">255<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">; green = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">; blue = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">;<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">nivelAlarma = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">3<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">;<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">pixels.setPixelColor(indicePixel, pixels.Color(red, green, blue));<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">pixels.show(); &nbsp; <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/ Mandamos todos los colores con la actualizaci\u00f3n hecha<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/*<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp; &nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">Funci\u00f3n que genera un par de tonos cortos<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">*\/<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">void<\/span> tonoCorto() {<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/generar tono de 440Hz durante 200 ms<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">tone<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(PINBUZZER, <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">440<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">delay<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">200<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/detener tono durante 100ms<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">noTone<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(PINBUZZER);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">delay<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">100<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/generar tono de 523Hz durante 300ms, y detenerlo durante 200ms.<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">tone<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(PINBUZZER, <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">523<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">300<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">delay<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">200<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/*<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp; &nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">Funci\u00f3n que genera un par de tonos largos<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">*\/<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">void<\/span> tonoLargo() {<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/generar tono de 440Hz durante 1000 ms<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">tone<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(PINBUZZER, <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">440<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">delay<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">1000<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/detener tono durante 500ms<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">noTone<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(PINBUZZER);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">delay<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">500<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/generar tono de 523Hz durante 1000ms, y detenerlo durante 500ms.<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">tone<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(PINBUZZER, <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">523<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">1000<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">delay<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">500<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/*<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp; &nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">Funci\u00f3n que realiza la petici\u00f3n de datos al sensor de CO2<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">*\/<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">void<\/span> sendRequest(<span style=\"color: #0000ff\">byte<\/span> packet[])<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">while<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> (!sensor.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">available<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">()) &nbsp; &nbsp; <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/keep sending request until we start to get a response<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">sensor.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">write<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(readCO2, <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">7<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">delay<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">50<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">int<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> timeout = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">; <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/set a timeoute counter<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">while<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> (sensor.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">available<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">() &lt; <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">7<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> ) <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/Wait to get a 7 byte response<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">timeout++;<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">if<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> (timeout &gt; <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">10<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/if it takes to long there was probably an error<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">while<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> (sensor.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">available<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">()) &nbsp;<\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/flush whatever we have<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">sensor.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">read<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">();<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">break<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/exit and try again<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">delay<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">(<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">50<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">);<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">for<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> (<\/span><\/span><span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">int<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> i = <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">0<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">; i &lt; <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">7<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">; i++)<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">response[i] = sensor.<\/span><\/span><span style=\"color: #e97366\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">read<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">();<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/*<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp; &nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">Funci\u00f3n que recibe los datos del sensor de CO2<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">*\/<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">unsigned<\/span> <span style=\"color: #0000ff\">long<\/span> getValue(<span style=\"color: #0000ff\">byte<\/span> packet[])<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">{<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">int<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> high = packet[<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">3<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">]; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/high byte for value is 4th byte in packet in the packet<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">int<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> low = packet[<\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">4<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">]; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/low byte for value is 5th byte in the packet<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">unsigned<\/span><\/span><\/span> <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">long<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> val = high * <\/span><\/span><span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">256<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> + low; &nbsp; &nbsp; &nbsp; &nbsp;<\/span><\/span><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/\/Combine high byte and low byte with this formula to get value<\/span><\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; <span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">return<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> val * valMultiplier;<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">}<\/span><\/span><\/span><\/code><\/p>\n<p>&nbsp;<\/p>\n<h2 class=\"western\">secrets.h<\/h2>\n<p>En este archivo se meten todas las claves que <b>NO<\/b> deben ser p\u00fablicas. Es por ello que no es exactamente el contenido del archivo, pero s\u00ed est\u00e1n todas las indicaciones para ponerlo a funcionar.<\/p>\n<p>Se omiten los n\u00fameros de canal y las APIKEY correspondientes a cada canal sustituidas por \u201c<span style=\"color: #098658\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">NUMERO_DE_CANAL_XX<\/span><\/span><\/span>\u201d, que deber\u00eda ser un n\u00famero y por \u201c<span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">APIKEY_XX<\/span><\/span><\/span>\u201d que deber\u00eda ser un c\u00f3digo alfanum\u00e9rico.<\/p>\n<p><code><span style=\"color: #727c81\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\/*Tanto los nombres de los dispositivos como los canales y las APIKEYS quedan definidas en arrays para poder a\u00f1adir nuevos dispositivos f\u00e1cilmente.<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">* Esto se configura en el archivo principal eligiendo el \u00edndice del medidor. Actualmente est\u00e1n definidos los siguientes:<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">* 0: Medidor tipo que no manda datos a la nube<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">* 1: Medidor usado como prototipo; m\u00e1s quemado que la pipa de un hippie, pero ah\u00ed est\u00e1 el t\u00edo<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">* 2-4: Medidores 001, 002, 003 conectados al servidor externo de ThingSpeak.com <\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">* 5-10: Medidores 001-006 conectados al servidor propio del Polit\u00e9cnico Jes\u00fas Mar\u00edn<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">* \u00cdndice 5: Medidor 001-Polithing - AULA 10 ADMINISTRATIVO.<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">* \u00cdndice 6: Medidor 002-Polithing - T2 ELECTRONICA.<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">* \u00cdndice 7: Medidor 003-Polithing - AULA 5 INF.<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">* \u00cdndice 8: Medidor 004-Polithing - AULA 25.<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">* \u00cdndice 9: Medidor 005-Polithing - AULA TEORIA EDIF.<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">* \u00cdndice 10: Medidor 006-Polithing - AULA PRAC EDIF - servidor externo - test prototipo.<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #727c81\">&nbsp;<span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">*\/<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">String<\/span> medidoresNombres[] &nbsp; &nbsp; &nbsp; &nbsp;= {<span style=\"color: #a31515\">\"00X sin-nube\"<\/span>, &nbsp; &nbsp; &nbsp; <span style=\"color: #a31515\">\"Prototipo serv-ext\"<\/span>, <span style=\"color: #a31515\">\"001 serv-ext\"<\/span>, &nbsp; &nbsp; &nbsp; <span style=\"color: #a31515\">\"002 serv-ext\"<\/span>, &nbsp; &nbsp; &nbsp;<span style=\"color: #a31515\">\"003 serv-ext-EDIFIC.\"<\/span>,<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"001 serv-Polithing\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"002 serv-Polithing\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"003 serv-Polithing\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"004 serv-Polithing\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">,<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"005 serv-Polithing\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">,<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"006 serv-Polithing\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">};<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"><span style=\"color: #0000ff\">unsigned<\/span> <span style=\"color: #0000ff\">long<\/span> medidoresCanales[] = {<span style=\"color: #098658\">NUMERO_DE_CANAL_0<\/span>, <span style=\"color: #098658\">NUMERO_DE_CANAL_1<\/span>, <span style=\"color: #098658\">NUMERO_DE_CANAL_2<\/span>, <span style=\"color: #098658\">NUMERO_DE_CANAL_3<\/span>, <span style=\"color: #098658\">NUMERO_DE_CANAL_4<\/span>, <span style=\"color: #098658\">NUMERO_DE_CANAL_5<\/span>, <span style=\"color: #098658\">NUMERO_DE_CANAL_6<\/span>, <span style=\"color: #098658\">NUMERO_DE_CANAL_7<\/span>, <span style=\"color: #098658\">NUMERO_DE_CANAL_8<\/span>, <span style=\"color: #098658\">NUMERO_DE_CANAL_9<\/span>, <span style=\"color: #098658\">NUMERO_DE_CANAL_10<\/span>};<\/span><\/span><\/span><\/code><\/p>\n<p><code><span style=\"color: #000000\"><span style=\"color: #0000ff\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">char<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\"> * medidoresAPIKEY[] &nbsp; &nbsp; &nbsp; &nbsp; = {<\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">APIKEY_0<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">APIKEY_1<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">APIKEY_2<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">APIKEY_3<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">APIKEY_4<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">,<\/span><\/span> <span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">APIKEY_5<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">APIKEY_6<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">APIKEY_7<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">APIKEY_8<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">APIKEY_9<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">, <\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">APIKEY_10<\/span><\/span><\/span><span style=\"color: #a31515\"><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">\"<\/span><\/span><\/span><span style=\"font-family: Consolas, Courier New, monospace\"><span style=\"font-size: small\">};<\/span><\/span><\/span><\/code><\/p>\n<p>Con todo esto, m\u00e1s el esquema el\u00e9ctrico correspondiente y la instalaci\u00f3n del servidor ThingSpeak (o usando el servicio gratuito de la <a href=\"https:\/\/thingspeak.com\/\">Web<\/a>) es f\u00e1cil reproducir los medidores realizados.<\/p>\n<h1 class=\"western\">Esquema el\u00e9ctrico<\/h1>\n<p>Esto a\u00fan necesita una revisi\u00f3n, porque el dise\u00f1o es muy mejorable, pero el siguiente esquema indicado con etiquetas es totalmente funcional.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-345\" src=\"https:\/\/blogsaverroes.juntadeandalucia.es\/industria4\/files\/2022\/12\/esquema-electrico-medidor-v4.png\" alt=\"\" width=\"750\" height=\"595\" srcset=\"https:\/\/blogsaverroes.juntadeandalucia.es\/industria4\/files\/2022\/12\/esquema-electrico-medidor-v4.png 750w, https:\/\/blogsaverroes.juntadeandalucia.es\/industria4\/files\/2022\/12\/esquema-electrico-medidor-v4-300x238.png 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/p>\n<p>Con ese dise\u00f1o, un posible conexionado de la PCB es como sigue:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone  wp-image-344\" src=\"https:\/\/blogsaverroes.juntadeandalucia.es\/industria4\/files\/2022\/12\/esquema-fisico-medidor-v4.png\" alt=\"\" width=\"508\" height=\"621\" srcset=\"https:\/\/blogsaverroes.juntadeandalucia.es\/industria4\/files\/2022\/12\/esquema-fisico-medidor-v4.png 632w, https:\/\/blogsaverroes.juntadeandalucia.es\/industria4\/files\/2022\/12\/esquema-fisico-medidor-v4-245x300.png 245w\" sizes=\"(max-width: 508px) 100vw, 508px\" \/><\/p>\n<!--themify_builder_content-->\n<div id=\"themify_builder_content-343\" data-postid=\"343\" class=\"themify_builder_content themify_builder_content-343 themify_builder tf_clear\">\n    <\/div>\n<!--\/themify_builder_content-->\n","protected":false},"excerpt":{"rendered":"<p>SETUP del entorno de programaci\u00f3n con Arduino IDE Tras las instalaci\u00f3n del Arduino IDE, es necesario indicarle al entorno que se va a trabajar con placas del fabricante Espressif, en concreto con la Wemos D1 mini Lite. Para ello: Ir a Archivo, Preferencias, Gestor de URLs adicionales de tarjetas y a\u00f1adir la l\u00ednea: http:\/\/arduino.esp8266.com\/stable\/package_esp8266com_index.json Luego [&hellip;]<\/p>\n","protected":false},"author":13840,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[1],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/blogsaverroes.juntadeandalucia.es\/industria4\/wp-json\/wp\/v2\/posts\/343"}],"collection":[{"href":"https:\/\/blogsaverroes.juntadeandalucia.es\/industria4\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogsaverroes.juntadeandalucia.es\/industria4\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogsaverroes.juntadeandalucia.es\/industria4\/wp-json\/wp\/v2\/users\/13840"}],"replies":[{"embeddable":true,"href":"https:\/\/blogsaverroes.juntadeandalucia.es\/industria4\/wp-json\/wp\/v2\/comments?post=343"}],"version-history":[{"count":2,"href":"https:\/\/blogsaverroes.juntadeandalucia.es\/industria4\/wp-json\/wp\/v2\/posts\/343\/revisions"}],"predecessor-version":[{"id":347,"href":"https:\/\/blogsaverroes.juntadeandalucia.es\/industria4\/wp-json\/wp\/v2\/posts\/343\/revisions\/347"}],"wp:attachment":[{"href":"https:\/\/blogsaverroes.juntadeandalucia.es\/industria4\/wp-json\/wp\/v2\/media?parent=343"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogsaverroes.juntadeandalucia.es\/industria4\/wp-json\/wp\/v2\/categories?post=343"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogsaverroes.juntadeandalucia.es\/industria4\/wp-json\/wp\/v2\/tags?post=343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}