La humitat i la temperatura són paràmetres molt comuns per mesurar en molts llocs, com ara granja, hivernacle, serveis mèdics, indústries i oficines. Ja hem tractat la mesura de la humitat i la temperatura mitjançant Arduino i hem mostrat les dades a la pantalla LCD.
En aquest projecte IoT, controlarem la humitat i la temperatura a través d’Internet mitjançant ThingSpeak, on mostrarem les dades actuals d’humitat i temperatura a través d’Internet mitjançant el servidor ThingSpeak. S'aconsegueix mitjançant les comunicacions de dades entre Arduino, el mòdul de sensor DHT11, el mòdul WIFI ESP8266 i el LCD. El termòmetre d’escala Celsius i el mesurador d’humitat percentual mostren la temperatura i la humitat ambientals a través d’una pantalla LCD i també l’envien al servidor ThingSpeak per a la supervisió en directe des de qualsevol part del món.

Funcionament i configuració de ThingSpeak:
Aquest projecte basat en IoT té quatre seccions, en primer lloc el sensor d’humitat i temperatura DHT11 detecta les dades d’humitat i temperatura . En segon lloc, Arduino Uno extreu les dades del sensor DHT11 com a nombre adequat en percentatge i escala Celsius i les envia al mòdul Wi-Fi. En tercer lloc , el mòdul Wi-Fi ESP8266 envia les dades al Sever de ThingSpeak. I finalment ThingSpeak analitza les dades i les mostra en forma de gràfic. La pantalla LCD opcional també s’utilitza per mostrar la temperatura i la humitat.

ThingSpeak proporciona una molt bona eina per a projectes basats en IoT per Arduino. Mitjançant l’ús del lloc ThingSpeak, podem controlar les nostres dades a través d’Internet des de qualsevol lloc i també podem controlar el nostre sistema a través d’Internet mitjançant els canals i les pàgines web proporcionades per ThingSpeak. ThingSpeak "Recopila" les dades dels sensors, "Analitza i visualitza" les dades i "Actua" desencadenant una reacció. Aquí expliquem com enviar dades al servidor ThingSpeak mitjançant el mòdul WIFI ESP8266:
1. Primer de tot, l'usuari ha de crear un compte a ThingSpeak.com, després iniciar la sessió i fer clic a Començar.

2. Ara aneu al menú "Canals" i feu clic a l' opció Canal nou a la mateixa pàgina per continuar el procés.

3. Ara veureu un formulari per crear el canal, empleneu el nom i la descripció segons la vostra elecció. A continuació, empleneu "Humitat" i "Temperatura" a les etiquetes del camp 1 i del camp 2, marqueu les caselles de selecció dels dos camps. Marqueu també la casella de selecció de l'opció "Fes públic" que hi ha a continuació al formulari i, finalment, Desa el canal. Ara s'ha creat el vostre nou canal.

4. Ara feu clic a la pestanya "Claus de l'API" i deseu les claus de l'API d'escriptura i lectura, aquí només estem utilitzant la tecla d'escriptura. Heu de copiar aquesta clau en el codi char * api_key .

5. Després, feu clic a "Importació / Exportació de dades" i copieu l'URL de sol·licitud GET del canal d'actualització del feed, que és:
api.thingspeak.com/update?api_key=SIWOYBX26OXQ1WMS&field1=0

6. Ara l'usuari ha d'obrir "api.thingspeak.com" mitjançant la funció httpGet amb el postUrl com a "update? Api_key = SIWOYBX26OXQ1WMS & field1 = 0" i, a continuació, enviar dades mitjançant el feed de dades o l'adreça de sol·licitud d'actualització.
Abans d’enviar les dades, l’usuari ha d’editar aquesta cadena de consulta o postUrl amb camps de dades de temperatura i humitat, com es mostra a continuació. Aquí hem afegit tots dos paràmetres a la cadena que hem d’enviar mitjançant la sol·licitud GET al servidor, després d’haver utilitzat httpGet per enviar les dades al servidor. Consulteu el codi complet a continuació.
Sprintf (postUrl, "update? Api_key =% s & field1 =% s & field2 =% s", api_key, humidStr, tempStr); httpGet ("api.thingspeak.com", postUrl, 80);
Tot el procés es mostra a la secció Vídeo, al final d’aquest article.
El treball d’aquest projecte es basa en la comunicació en sèrie d’un cable per obtenir dades de DHT11. Primer Arduino envia un senyal d’inici al mòdul DHT i després DHT dóna un senyal de resposta amb dades que contenen. Arduino recopila i extreu les dades en dues parts: primer, la humitat i la segona, la temperatura, i després les envia al servidor LCD ThingSpeak de 16 x 2. ThingSpeak mostra les dades en forma de gràfic de la manera següent:

Podeu obtenir més informació sobre el sensor DHT11 i la seva interfície amb Arduino aquí.
Descripció del circuit:
Les connexions per a aquest projecte de control de temperatura i humitat de ThingSpeak són molt senzilles. Aquí s’utilitza una pantalla de cristall líquid per mostrar la temperatura i la humitat, que es connecta directament a Arduino en mode de 4 bits. Els pins de la pantalla LCD, RS, EN, D4, D5, D6 i D7, estan connectats al pin digital Arduino número 14, 15, 16, 17, 18 i 19. Aquesta pantalla LCD és opcional.

El mòdul de sensor DHT11 està connectat al pin digital 12 d'Arduino. Els pins Vcc i GND del mòdul Wi-Fi ESP8266 estan connectats directament a 3,3 V i GND d’Arduino i CH_PD també està connectat a 3,3V. Els pins Tx i Rx de l’ESP8266 estan connectats directament als pins 2 i 3 d’Arduino. La Biblioteca de programari en sèrie també s’utilitza aquí per permetre la comunicació en sèrie als pins 2 i 3 d’Arduino. Ja hem tractat detalladament la interfície del mòdul Wi-Fi ESP8266 a Arduino.
Part de programació:
La programació d’una part d’aquest projecte té un paper molt important per realitzar totes les operacions. En primer lloc, incloem les biblioteques necessàries i inicialitzem les variables.
#include "dht.h" // Inclou la biblioteca per a dht #include
Després, introduïu la vostra clau API d'escriptura i agafeu algunes cadenes.
char * api_key = "SIWOYBX26OXQ1WMS"; // Introduïu la vostra clau API d'escriptura des de ThingSpeak static char postUrl; int humi, tem; void httpGet (IP de cadena, ruta de cadena, port int = 80);
En la funció void loop () , llegim la temperatura i la humitat i després mostrem aquestes lectures a la pantalla LCD.
La funció void send2server () s'utilitza per enviar les dades al servidor. La funció Send2server és una rutina de servei d’interrupció del temporitzador, que crida cada 20 segons. Quan cridem a la funció d'actualització, es crida a la rutina del servei d'interrupció del temporitzador.
void send2server () {char tempStr; char humidStr; dtostrf (tem, 5, 3, tempStr); dtostrf (humi, 5, 3, humidStr); sprintf (postUrl, "update? api_key =% s & field1 =% s & field2 =% s", api_key, humidStr, tempStr); httpGet ("api.thingspeak.com", postUrl, 80); }
