Inhoudsopgave:

Weerrapport met behulp van ThingSpeak MQTT- en IFTTT-applets: 8 stappen
Weerrapport met behulp van ThingSpeak MQTT- en IFTTT-applets: 8 stappen

Video: Weerrapport met behulp van ThingSpeak MQTT- en IFTTT-applets: 8 stappen

Video: Weerrapport met behulp van ThingSpeak MQTT- en IFTTT-applets: 8 stappen
Video: Optimaliseren met behulp van de afgeleide (HAVO wiskunde B) 2024, November
Anonim
Weerrapport met behulp van ThingSpeak MQTT- en IFTTT-applets
Weerrapport met behulp van ThingSpeak MQTT- en IFTTT-applets

Invoering

Een op de cloud gebaseerde weertoepassing die dagelijkse weerberichten als e-mailmelding levert. Deze webapplicatie meet temperatuur en vochtigheid met behulp van SHT25 en Adafruit Huzzah ESP8266. Het biedt ons realtime temperatuur- en vochtigheidsgegevens en analyses per uur. De gegevens worden verzonden met behulp van de ThingSpeak MQTT API en later sturen we een e-mailmelding aan de gebruiker wanneer de temperatuur de toegewezen drempel bereikt met behulp van het IFTTT-protocol. SHT25 is een temperatuur- en vochtigheidssensor gemaakt door Sensirion. De SHT25 biedt een hoge mate van nauwkeurigheid rond ±2% RV. Het vochtigheidsbereik ligt tussen 0 en 100% en het temperatuurbereik ligt tussen -40 en 125 °C. Het is veel betrouwbaarder en sneller met een sensorresponstijd van 8 seconden.

Functies

  • Biedt u realtime analyses en statistieken met behulp van Thing Speak MQTT API
  • Een e-mailmelding wordt op een toegewezen tijd aan de gebruiker gegeven met behulp van IFTTT
  • Taakplanner wordt gebruikt om de taak te plannen, zoals het ophalen van gegevens van sensoren, het publiceren van de sensormetingen, het abonneren op MQTT-onderwerp
  • Het gebruikt het I2C-protocol om de sensormeting op te halen die nauwkeuriger, uitbreidbaar en schaalbaar is
  • slaapmodus wanneer het apparaat inactief is of als er geen taak wordt teruggeroepen.
  • effectieve taakplanning zorgt voor probleemloos gebruik
  • Er wordt een aparte webpagina gehost waar de gebruiker zijn gebruikersreferenties moet opgeven om te voorkomen dat uw apparaat elke keer knippert wanneer het in het bereik van andere wifi-netwerken is
  • SPIFFS wordt gebruikt om onze webpagina op te slaan om onze code leesbaar en minder onhandig te maken

Stap 1: Hardware- en softwarespecificatie

Hardware- en softwarespecificatie
Hardware- en softwarespecificatie
Hardware- en softwarespecificatie
Hardware- en softwarespecificatie

Hardwarespecificatie:

  • Adafruit esp8266 Huzzah bord
  • Huzzah Bord Schild
  • SHT25 Sensormodule
  • I2C-kabel

Softwarespecificatie:

  • Arduino IDE
  • IFTTT ding spreken
  • MQTT-API

Stap 2: Gebruikersreferenties opslaan

Gebruikersreferenties opslaan
Gebruikersreferenties opslaan
Gebruikersreferenties opslaan
Gebruikersreferenties opslaan

Hier gebruiken we de SHT25 I2C-sensor om de realtime waarde van temperatuur en relatieve vochtigheid te lezen en deze waarde in de cloud te plaatsen. Om de bijgewerkte sensorwaarde van tijd tot tijd te krijgen en deze updates tegelijkertijd te plaatsen, gebruiken we Arduino's Task Scheduler Library. Voor cloudoperaties gebruiken we ThingSpeak MQTT API. Later bieden we de gebruiker een realtime weerbericht met behulp van IFTTT-applets. U kunt deze stappen volgen om uw eigen weerstation te maken. Dus doe-het-zelf.

Alvorens verder te gaan. We moeten de gebruikersgegevens opslaan. Voor dit doel hosten we een webserver op 192.169.1.4. We hebben ons webformulier opgeslagen in SPIFFS. Zodra het apparaat is gestart, host het gedurende 60 seconden een webserver. De gebruiker moet deze stappen volgen.

  • Maak verbinding met de AP ESP-gebruiker. Deze staat vermeld in uw beschikbare wifi-netwerklijst. Maak verbinding met dit AP en voer het wachtwoord "*******" in
  • Zodra het is verbonden, gaat u naar uw browser en voert u het IP-adres 192.168.1.4 in.
  • Voer de SSID en het wachtwoord van uw lokale wifi in de invoervelden in en voer SUBMIT in
  • Deze referenties worden opgeslagen in EEPROM
  • Na 60 seconden verbreekt het apparaat automatisch de verbinding met AP
  • De volgende keer dat u het apparaat inschakelt, hoeft de gebruiker deze procedure niet te volgen. Het apparaat haalt automatisch de gebruikersreferenties op uit de EEPROM en gaat verder met het ophalen van de sensormetingen van de I2C-interface en deze naar de cloud te posten

//--------- AP-configuratie ------------// IPAddress ap_local_IP (192, 168, 1, 4); IPA-adres ap_gateway(192, 168, 1, 254); IPA-adres ap_subnet(255, 255, 255, 0);

Serial.print("Toegangspunt configureren…");

WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

Serial.print("Gebruikersreferenties instellen");

WiFi.softAP(ssidAP, passAP);

server.on("/", handleRoot);

server.onNotFound(onHandleNotFound);

server.begin();

APTimer = millis();

while(millis()-APTimer < APInterval){

server.handleClient();

}

//****************************** HANDVAT WORTEL****************** *******//void handleRoot() {

if (server.hasArg("ssid")&& server.hasArg("wachtwoord"))

{

//Als alle formuliervelden gegevensoproep bevatten

handelSubmit()

handvatSubmit(); }

anders {

// Geef het formulier opnieuw weer

//lees het bestand in spiffs

Bestandsbestand =SPIFFS.open("/webform.html", "r");

server.streamFile(bestand, "tekst/html");

// vergeet niet het bestand te sluiten

bestand.close();

}}

// Controleer de status dat het de argumenten ssid en wachtwoord heeft

// Schrijf vervolgens de inloggegevens naar ROM

ROMwrite(String(server.arg("ssid")), String(server.arg("wachtwoord")))

Stap 3: Uw webformulier instellen in SPIFFS

SPIFFS

Serial Peripheral Interface Flash File System, of kortweg SPIFFS. Het is een lichtgewicht bestandssysteem voor microcontrollers met een SPI-flashchip. De ingebouwde flashchip van de ESP8266 biedt voldoende ruimte voor je webpagina's, zeker als je de 1MB, 2MB of 4MB versie hebt. We hebben onze webpagina ook opgeslagen in Flash System. Er zijn een paar stappen die we moeten volgen om gegevens naar spiffs te uploaden

  1. Download de tool:
  2. Maak in je Arduino-schetsboekmap een map met tools als deze nog niet bestaat
  3. Pak de tool uit in de map tools (het pad ziet eruit als /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. Herstart Arduino IDE
  5. Open een schets (of maak een nieuwe en sla deze op)
  6. Ga naar de schetsmap (kies Sketch > Show Sketch Folder)
  7. Maak een map met de naam data en alle bestanden die u wilt in het bestandssysteem daar. We hebben onze HTML-pagina geüpload met de naam webform.html
  8. Zorg ervoor dat je een bord, poort en gesloten seriële monitor hebt geselecteerd
  9. Selecteer Extra > ESP8266 Schetsgegevens uploaden. Dit zou moeten beginnen met het uploaden van de bestanden naar het ESP8266 flash-bestandssysteem. Als u klaar bent, wordt in de IDE-statusbalk het bericht SPIFFS Image Uploaded weergegeven.

Bestandsbestand =SPIFFS.open("/webform.html", "r");

server.streamFile(bestand, "tekst/html");

// vergeet niet het bestand te sluiten

bestand.close();

Stap 4: Taakplanning

In deze zelfstudie voeren we twee bewerkingen uit:

  • Lees de gegevens van SHT25 met behulp van het I2C-protocol
  • Plaats de bijgewerkte gegevens in de cloud met behulp van de ThingSpeak MQTT API

Om dit te bereiken gebruiken we de TaskScheduler-bibliotheek. We hebben twee verschillende taken gepland die verwijzen naar twee verschillende controleoperaties. dit gaat als volgt

  • Taak 1 is voor het uitlezen van de sensorwaarde. Deze taak duurt 1 seconde totdat de time-out van 10 seconden wordt bereikt.
  • Wanneer de Task1 zijn time-out bereikt, maken we verbinding met lokale wifi en MQTT-makelaar.
  • Taak 2 is nu ingeschakeld en we schakelen Taak 1 uit Taak 2 is voor het publiceren van de sensorgegevens naar Thing Speak MQTT-broker. Deze taak duurt 20 seconden totdat de time-out van 20 seconden wordt bereikt
  • Wanneer Taak 2 zijn time-out bereikt, wordt Taak 1 weer ingeschakeld en Taak 2 uitgeschakeld. ook hier krijgen we de bijgewerkte waarde en het proces gaat door
  • wanneer er niet wordt teruggebeld of het apparaat inactief is, gaat het naar de lichte slaapstand, waardoor energie wordt bespaard.

//---------prototype voor taak callback------------//

ongeldige taakI2CCallback();

void taskI2CDisable();

ongeldige taakWiFiCallback();

ongeldige taakWiFiDisable();

//--------- Taken------------//

Taak tI2C(2 * TASK_SECOND, TASK_FOREVER, &taskI2CCallback, &ts, false, NULL, &taskI2CDisable);

Taak tWiFi (20* TASK_SECOND, TASK_FOREVER, &taskWiFiCallback, &ts, false, NULL, &taskWiFiDisable);

// schakel tI2C in tI2C.enable ();

Stap 5: Temperatuur- en vochtigheidswaarden aflezen van SHT25

Temperatuur- en vochtigheidswaarden aflezen van SHT25
Temperatuur- en vochtigheidswaarden aflezen van SHT25

I2C is een tweedraadsinterface die slechts twee draden gebruikt om met het masterapparaat te communiceren. De ene is SCL (Serial Clock) en de andere is SDA (Serial Data). Elk slave-apparaat heeft een uniek adres. SHT 25 heeft ook een 8-bits adres en is toegankelijk via een 0x44-adres. het heeft 8 bits van het adres waarbij 7 bits het werkelijke adres zijn en terwijl de meest rechtse LSB bit 0 wordt gebruikt om het lezen van of schrijven naar het apparaat te signaleren. Als bit 0 is ingesteld op 1 dan leest het master-apparaat van het slave I2C-apparaat. I2C is veel betrouwbaarder, schaalbaarder en sneller en heeft zelfs veel werkingsmodi waardoor het veel energiezuiniger is

We gebruiken de Wire.h-bibliotheek om de temperatuur- en vochtigheidswaarden te lezen. Deze bibliotheek vergemakkelijkt i2c-communicatie tussen de sensor en het masterapparaat. 0x44 is het I2C-adres voor SHT25. SHT25 werkt in een andere bedrijfsmodus. U kunt daarvoor verwijzen naar de datasheet. We gebruiken 0x2C en 0x06 als respectievelijk MSB en LSB voor single shot operatie

Stap 6: Waarden publiceren naar ThingSpeak met behulp van de ThingSpeak MQTT API

Waarden publiceren naar ThingSpeak met behulp van ThingSpeak MQTT API
Waarden publiceren naar ThingSpeak met behulp van ThingSpeak MQTT API

Voor het plaatsen van onze temperatuur- en vochtigheidswaarden in de cloud gebruiken we ThingSpeak MQTT API. ThingSpeak is een IoT-platform. ThingSpeak is een gratis webservice waarmee u sensorgegevens in de cloud kunt verzamelen en opslaan. MQTT is een veelgebruikt protocol dat in IoT-systemen wordt gebruikt om apparaten en sensoren op een laag niveau met elkaar te verbinden. MQTT wordt gebruikt om korte berichten van en naar een makelaar door te geven. ThingSpeak heeft onlangs een MQTT-broker toegevoegd, zodat apparaten berichten naar ThingSpeak kunnen sturen. Je kunt de procedure volgen om ThingSpeak Channel in te stellen vanuit dit bericht

ThingSpeak MQTT

MQTT is een publiceer/abonneer-architectuur die voornamelijk is ontwikkeld om bandbreedte en stroombeperkte apparaten via draadloze netwerken te verbinden. Het is een eenvoudig en lichtgewicht protocol dat over TCP/IP-sockets of WebSockets loopt. MQTT via WebSockets kan worden beveiligd met SSL. Dankzij de architectuur voor publiceren/abonneren kunnen berichten naar de clientapparaten worden gepusht zonder dat het apparaat continu de server hoeft te pollen. Een client is elk apparaat dat verbinding maakt met de broker en onderwerpen kan publiceren of erop kunnen abonneren om toegang te krijgen tot de informatie. Een onderwerp bevat de routeringsinformatie voor de makelaar. Elke klant die berichten wil verzenden, publiceert ze naar een bepaald onderwerp, en elke klant die berichten wil ontvangen, abonneert zich op een bepaald onderwerp

Publiceren en abonneren met ThingSpeak MQTT

  • Publiceren naar kanaalfeedkanalen /publish/
  • Publiceren naar een bepaald veld kanalen /publish/fields/field/
  • Abonneer je op het kanaalveld kanalen /subscribe//
  • Abonneer u op de privékanaalfeedkanalen //subscribe/fields/field/
  • Abonneer je op alle velden van een kanaal. kanalen// abonneren/velden/veld /

ongeldige taakWiFiCallback()

{

Serial.println("taskWiFiCallbackStarted");

Serial.print("time-out voor deze taak: \t");

Serial.println(tWiFi.getTimeout());

if(!mqttCli.connected())

{

Serial.println ("Cliënt niet verbonden");

reconnectMQTT();

}

String topicString ="channels/"+String(channelID)+"/publish/"+String(writeAPIKey);

int topicLength = topicString.length()+1;

char topicBuffer[topicLength];

topicString.toCharArray(topicBuffer, topicLength+1);

Serial.println(topicBuffer);

String dataString = String("field1="+ String(tempC, 1) + "&field2=" + String(tempF, 1) + "&field3=" + String(vochtig, 1));

int dataLength = dataString.length()+1;

byte dataBuffer [dataLength];

dataString.getBytes(dataBuffer, dataLength);

mqttCli.beginPublish(topicBuffer, dataLength, false);

Serial.println(mqttCli.write(dataBuffer, dataLength)? "gepubliceerd": "gepubliceerd mislukt");

mqttCli.endPublish();

//mqttCli.loop();

}

Stap 7: E-mailmelding weerrapport

E-mailmelding weerrapport
E-mailmelding weerrapport
E-mailmelding weerbericht
E-mailmelding weerbericht

We gebruiken IFTTT-applets om realtime weerberichten per e-mail aan de gebruiker te geven. We hebben het dus geïmplementeerd via ThingSpeak. We nemen het gemiddelde van de 5-fay-waarden van temperatuur en vochtigheid. Wanneer de waarde van de laatste invoer groter is dan de gemiddelde waarde. Het zal een e-mailmelding activeren "het is een warme dag". en wanneer deze lager is dan de gemiddelde waarde. Het zal een e-mailmelding activeren "Wat een mooie dag". Elke dag rond 10:00 uur (IST) krijgen we een e-mailmelding

kanaal-ID= ******;

iftttURL='https://maker.ifttt.com/**************';

vochtData=thingSpeakRead(channelID, 'Fields', 3, 'NumDays', 5); tempData = thingSpeakRead(channelID, 'Fields', 1, 'NumDays', 5);

perHumid=max(vochtgegevens)-min(vochtgegevens);

vochtigheidswaarde=0.1*perVocht+min (vochtgegevens);

perTemp=max(tempData)-min(tempData);

tempValue=0.1*perTemp+min (tempData);

urlTemp=strcat('https://api.thingspeak.com/channels/', string(channelID), '/fields/1/last.txt');

urlHumid = strcat('https://api.thingspeak.com/channels/', string(channelID), '/fields/3/last.txt'); lastTempValue=str2num(webread(urlTemp)); lastHumidValue = str2num(webbread(urlHumid));

if (lastTempValue

if (lastTempValue>tempValue || lastHumidValue>humidValue)

plantMessage=' Het is een warme dag.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); einde

Stap 8: Algemene code

Algemene code
Algemene code
Algemene code
Algemene code
Algemene code
Algemene code

Algemene code

De algemene code is beschikbaar in deze GitHub-repository

Beperkingen

  • Er zijn enkele problemen met het publiceren van de gegevens met behulp van een methode publiceren voor het grootste deel van de gegevens. Om dit probleem op te lossen gebruiken we de functie write()
  • SPIFFS moet worden geformatteerd voordat de nieuwe gegevens naar SPIFFS worden geüpload.
  • U mag de functie delay() niet gebruiken. delay() belemmert de achtergrondbewerking. Maak in plaats daarvan alleen vertragingen met millis() als dat nodig is

Credits

  • ESP826Webserver
  • Taakplanner
  • SHT 25
  • ThingSpeak MQTT-API
  • IFTTT
  • PubSubClient

Aanbevolen: