Vochtigheid en temperatuur zijn veel voorkomende parameters voor het meten op veel plaatsen, zoals boerderij, kas, medische sector, industriële woning en kantoren. We hebben al vochtigheids- en temperatuurmeting met Arduino behandeld en de gegevens op het LCD-scherm weergegeven.
In dit IoT-project gaan we vochtigheid en temperatuur via internet monitoren met ThingSpeak, waar we de huidige gegevens over vochtigheid en temperatuur via internet laten zien met behulp van de ThingSpeak-server. Het wordt bereikt door de datacommunicatie tussen Arduino, DHT11-sensormodule, ESP8266 WIFI-module en LCD. Thermometer op Celsius-schaal en vochtigheidsmeter op percentageschaal geven de omgevingstemperatuur en vochtigheid weer via een LCD-scherm en sturen deze ook naar de ThingSpeak-server voor live monitoring vanaf elke plek ter wereld.
Working and ThingSpeak Setup:
Dit op IoT gebaseerde project met vier secties, ten eerste de vochtigheids- en temperatuursensor DHT11 detecteert de vochtigheids- en temperatuurgegevens . Ten tweede extraheert Arduino Uno de gegevens van de DHT11-sensor als een geschikt getal in procenten en Celsius-schaal, en stuurt deze naar de Wi-Fi-module. Ten derde stuurt de Wi-Fi-module ESP8266 de gegevens naar de server van ThingSpeak. En tot slot analyseert ThingSpeak de gegevens en toont deze in een grafiekvorm. Optioneel LCD-scherm wordt ook gebruikt om de temperatuur en vochtigheid weer te geven.
ThingSpeak biedt een zeer goede tool voor op IoT gebaseerde projecten voor Arduino. Door de ThingSpeak-site te gebruiken, kunnen we onze gegevens overal op internet volgen, en we kunnen ons systeem ook via internet beheren, met behulp van de kanalen en webpagina's die door ThingSpeak worden geleverd. ThingSpeak 'Verzamelt' de data van de sensoren, 'analyseert en visualiseert' de data en 'handelt' door een reactie op gang te brengen. Hier leggen we uit over het verzenden van gegevens naar de ThingSpeak-server met behulp van de ESP8266 WIFI-module:
1. Allereerst moet de gebruiker een account aanmaken op ThingSpeak.com, vervolgens inloggen en op Aan de slag klikken.
2. Ga nu naar het menu 'Kanalen' en klik op de optie Nieuw kanaal op dezelfde pagina voor verder proces.
3. Nu zie je een formulier voor het maken van het kanaal, vul de naam en beschrijving naar keuze in. Vul vervolgens 'Vochtigheid' en 'Temperatuur' in bij de labels van veld 1 en veld 2 en vink de selectievakjes voor beide velden aan. Vink ook het selectievakje aan voor de optie 'Openbaar maken' hieronder in het formulier en tenslotte het kanaal opslaan. Nu is je nieuwe kanaal gemaakt.
4. Klik nu op het tabblad 'API-sleutels' en sla de API-sleutels voor schrijven en lezen op, hier gebruiken we alleen de schrijfsleutel. U moet deze sleutel kopiëren in char * api_key in de code.
5. Klik daarna op 'Gegevens importeren / exporteren' en kopieer de URL van het GET-verzoek om kanaalfeed bijwerken, namelijk:
api.thingspeak.com/update?api_key=SIWOYBX26OXQ1WMS&field1=0
6. Nu moet de gebruiker "api.thingspeak.com" openen met behulp van de httpGet- functie met de postUrl als "update? Api_key = SIWOYBX26OXQ1WMS & field1 = 0" en vervolgens gegevens verzenden met behulp van een datafeed of het adres van het update-verzoek.
Voordat de gegevens worden verzonden, moet de gebruiker deze queryreeks of postUrl met gegevensvelden voor temperatuur en vochtigheid bewerken, zoals hieronder wordt weergegeven. Hier hebben we beide parameters toegevoegd in de string die we moeten verzenden via het GET-verzoek naar de server, nadat we httpGet hebben gebruikt om de gegevens naar de server te sturen. Controleer de volledige code hieronder.
Sprintf (postUrl, "update? Api_key =% s & field1 =% s & field2 =% s", api_key, humidStr, tempStr); httpGet ("api.thingspeak.com", postUrl, 80);
Het hele proces wordt gedemonstreerd in het gedeelte Video aan het einde van dit artikel.
De werking van dit project is gebaseerd op enkeldraads seriële communicatie voor het ophalen van gegevens uit DHT11. Eerst stuurt Arduino een startsignaal naar de DHT-module en vervolgens geeft DHT een reactiesignaal met daarin gegevens. Arduino verzamelt en extraheert de gegevens in twee delen, eerst is de vochtigheid en de tweede is de temperatuur en stuurt deze vervolgens naar 16x2 LCD en ThingSpeak-server. ThingSpeak geeft de gegevens weer in de vorm van een grafiek, zoals hieronder:
U kunt hier meer leren over de DHT11-sensor en de interface met Arduino.
Circuit Beschrijving:
Verbindingen voor dit ThingSpeak-project voor temperatuur- en vochtigheidscontrole zijn heel eenvoudig. Hier wordt een Liquid Crystal Display gebruikt voor het weergeven van temperatuur en vochtigheid, die rechtstreeks is aangesloten op Arduino in 4-bit-modus. Pinnen van LCD namelijk RS, EN, D4, D5, D6 en D7 zijn verbonden met Arduino digitale pin nummer 14, 15, 16, 17, 18 en 19. Deze LCD is optioneel.
DHT11-sensormodule is verbonden met digitale pin 12 van Arduino. De Vcc- en GND-pinnen van de Wi-Fi-module ESP8266 zijn rechtstreeks verbonden met 3.3V en GND van Arduino en CH_PD is ook verbonden met 3.3V. Tx- en Rx-pinnen van ESP8266 zijn rechtstreeks verbonden met pin 2 en 3 van Arduino. Software Serial Library wordt hier ook gebruikt om seriële communicatie op pin 2 en 3 van Arduino mogelijk te maken. We hebben de interface van de ESP8266 Wi-Fi-module met Arduino al in detail besproken.
Programmeergedeelte:
Het programmeergedeelte van dit project speelt een zeer belangrijke rol bij het uitvoeren van alle bewerkingen. Allereerst nemen we vereiste bibliotheken op en initialiseren we variabelen.
#include "dht.h" // Inclusief bibliotheek voor dht #include
Voer daarna uw Write API-sleutel in en neem enkele strings.
char * api_key = "SIWOYBX26OXQ1WMS"; // Voer uw Write API-sleutel van ThingSpeak static char postUrl in; int humi, tem; void httpGet (String ip, String path, int port = 80);
In de void loop () functie lezen we temperatuur en vochtigheid en tonen die waarden vervolgens op het LCD-scherm.
void send2server () functie wordt gebruikt om de gegevens naar de server te sturen. Send2server-functie is een timeronderbrekingsserviceroutine, die elke 20 seconden belt. Wanneer we de updatefunctie aanroepen, wordt de timeronderbrekingsserviceroutine aangeroepen.
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); }