Obsah:

Zprávy o počasí pomocí aplikací ThingSpeak MQTT a IFTTT: 8 kroků
Zprávy o počasí pomocí aplikací ThingSpeak MQTT a IFTTT: 8 kroků

Video: Zprávy o počasí pomocí aplikací ThingSpeak MQTT a IFTTT: 8 kroků

Video: Zprávy o počasí pomocí aplikací ThingSpeak MQTT a IFTTT: 8 kroků
Video: Nejlepší aplikace pro předpověď počasí 2024, Listopad
Anonim
Zpráva o počasí pomocí aplikací ThingSpeak MQTT a IFTTT
Zpráva o počasí pomocí aplikací ThingSpeak MQTT a IFTTT

Úvod

Cloudová aplikace o počasí poskytující denní zprávy o počasí jako e-mailové upozornění. Tato webová aplikace měří teplotu a vlhkost pomocí SHT25 a Adafruit Huzzah ESP8266. Poskytuje nám údaje o teplotě a vlhkosti v reálném čase a hodinovou analýzu. Data jsou odesílána pomocí rozhraní ThingSpeak MQTT API a později poskytujeme uživateli e -mailové upozornění, kdykoli teplota dosáhne přiřazeného prahu pomocí protokolu IFTTT. SHT25 jsou snímače teploty a vlhkosti od společnosti Sensirion. SHT25 poskytuje vysokou přesnost kolem ± 2% RH. Rozsah vlhkosti je mezi 0 až 100% a teplotní rozsah mezi -40 až 125 ° C. Je mnohem spolehlivější a rychlejší s dobou odezvy senzoru 8 sekund.

Funkce

  • Poskytuje analýzy a statistiky v reálném čase pomocí rozhraní Thing Speak MQTT API
  • E -mailové oznámení je uživateli poskytnuto v určený čas pomocí IFTTT
  • Plánovač úloh se používá k naplánování úlohy, jako je načítání dat ze senzorů, publikování údajů ze senzorů, přihlášení k tématu MQTT
  • Využívá protokol I2C k načtení údajů ze snímače, které jsou přesnější, rozšiřitelné a škálovatelné
  • režim spánku, když je zařízení nečinné nebo není voláno žádné zpětné volání úkolu.
  • efektivní plánování úkolů zajišťuje bezproblémové používání
  • Je hostována samostatná webová stránka, na které musí uživatel poskytnout svá uživatelská pověření, aby se vyhnul blikání vašeho zařízení pokaždé, když je v dosahu jiných wifi sítí
  • SPIFFS slouží k ukládání naší webové stránky, aby byl náš kód čitelný a méně neohrabaný

Krok 1: Specifikace hardwaru a softwaru

Specifikace hardwaru a softwaru
Specifikace hardwaru a softwaru
Specifikace hardwaru a softwaru
Specifikace hardwaru a softwaru

Specifikace hardwaru

  • Deska Adafruit esp8266 Huzzah
  • Štít Huzzah Board
  • Senzorový modul SHT25
  • Kabel I2C

Specifikace softwaru

  • Arduino IDE
  • IFTTT Thing Speak
  • MQTT API

Krok 2: Ukládání pověření uživatele

Ukládání pověření uživatele
Ukládání pověření uživatele
Ukládání pověření uživatele
Ukládání pověření uživatele

Zde používáme snímač SHT25 I2C ke čtení hodnoty teploty a relativní vlhkosti v reálném čase a odesílání těchto hodnot do cloudu. Abychom čas od času získali aktualizovanou hodnotu senzoru a současně zveřejnili tyto aktualizace, používáme knihovnu plánovače úloh Arduina. Pro cloudové operace používáme ThingSpeak MQTT API. Později poskytujeme uživateli zprávy o počasí v reálném čase pomocí appletů IFTTT. Chcete -li si vytvořit vlastní meteorologickou stanici, můžete postupovat podle těchto kroků. Takže DIY.

Než budete pokračovat dále. Musíme uložit přihlašovací údaje uživatele. Za tímto účelem hostujeme webový server na adrese 192.169.1.4. Náš webový formulář jsme uložili ve formátu SPIFFS. Jakmile se zařízení spustí, bude hostovat webový server po dobu 60 sekund. Uživatel by měl postupovat podle těchto kroků.

  • Připojte se k AP ESPuser, který je uveden v seznamu dostupných sítí Wi -Fi. Připojte se k tomuto přístupovému bodu a zadejte heslo „*******“
  • Jakmile se připojí, přejděte do prohlížeče a zadejte IP 192.168.1.4.
  • Do vstupních polí zadejte SSID a heslo vaší místní WiFi a zadejte SUBMIT
  • Tato pověření budou uložena v paměti EEPROM
  • Po 60 sekundách se zařízení automaticky odpojí od přístupového bodu
  • Až příště zapnete zařízení, uživatel nemusí tento postup dodržovat, zařízení automaticky načte přihlašovací údaje uživatele z EEPROM a bude pokračovat v získávání údajů ze senzorů z rozhraní I2C a odesílání do cloudu

// --------- Konfigurace AP ------------ // Adresa IP ap_local_IP (192, 168, 1, 4); IP adresa ap_gateway (192, 168, 1, 254); IP adresa ap_subnet (255, 255, 255, 0);

Serial.print ("Konfigurace přístupového bodu …");

WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

Serial.print („Nastavení přihlašovacích údajů uživatele“);

WiFi.softAP (ssidAP, passAP);

server.on ("/", handleRoot);

server.onNotFound (onHandleNotFound);

server.begin ();

APTimer = millis ();

while (millis ()-APTimer <APInterval) {

server.handleClient ();

}

// **************************** Kořen rukojeti ****************** ********* // neplatné handleRoot () {

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

{

// Pokud všechna pole formuláře obsahují datové volání

handelSubmit ()

handleSubmit (); }

jinak {

// Znovu zobrazit formulář

// přečtěte si soubor obsažený ve spiffech

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

server.streamFile (soubor, "text/html");

// nezapomeňte soubor zavřít

file.close ();

}}

// Zkontrolujte stav, zda obsahuje argumenty ssid a heslo

// Poté zapište přihlašovací údaje do ROM

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

Krok 3: Nastavení webového formuláře v SPIFFS

SPIFFS

Serial Peripheral Interface Flash File System nebo zkráceně SPIFFS. Je to lehký souborový systém pro mikrokontroléry s flash čipem SPI. Integrovaný flash čip ESP8266 má dostatek místa pro vaše webové stránky, zvláště pokud máte verzi 1 MB, 2 MB nebo 4 MB. Naši webovou stránku jsme také uložili do systému Flash. Při nahrávání dat do spiffů musíme dodržet několik kroků

  1. Stáhněte si nástroj:
  2. V adresáři skicářů Arduino vytvořte adresář nástrojů, pokud ještě neexistuje
  3. Rozbalte nástroj do adresáře nástrojů (cesta bude vypadat jako /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
  4. Restartujte Arduino IDE
  5. Otevřete skicu (nebo vytvořte novou a uložte ji)
  6. Přejděte do adresáře skici (zvolte Skica> Zobrazit složku skici)
  7. V systému souborů vytvořte adresář s názvem data a všechny soubory, které chcete. Nahráli jsme naši HTML stránku s názvem webform.html
  8. Ujistěte se, že jste vybrali desku, port a zavřený sériový monitor
  9. Vyberte Nástroje> Nahrání dat skici ESP8266. To by mělo začít nahrávat soubory do systému souborů ESP8266 flash. Po dokončení se na stavovém řádku IDE zobrazí zpráva Nahraný obrázek SPIFFS.

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

server.streamFile (soubor, "text/html");

// nezapomeňte soubor zavřít

file.close ();

Krok 4: Plánování úkolů

V tomto kurzu provádíme dvě operace:

  • Odečtěte data z SHT25 pomocí protokolu I2C
  • Zveřejněte aktualizovaná data do cloudu pomocí rozhraní ThingSpeak MQTT API

Abychom toho dosáhli, používáme knihovnu TaskScheduler. Naplánovali jsme dva různé úkoly odkazující na dvě různé řídicí operace. to se provádí následovně

  • Úkol 1 je pro čtení hodnoty senzoru, který běží po dobu 1 sekundy, dokud nedosáhne časového limitu 10 sekund.
  • Když úkol 1 dosáhne časového limitu, připojujeme se k místnímu brokerovi Wifi a MQTT.
  • Nyní je povolen úkol 2 a deaktivujeme úkol 1 úkol 2 slouží k publikování dat senzoru zprostředkovateli Thing Speak MQTT, tento úkol běží 20 sekund, dokud nedosáhne časového limitu 20 sekund
  • Když úkol 2 dosáhne časového limitu, úkol 1 je znovu povolen a úkol 2 je deaktivován. zde opět získáváme aktualizovanou hodnotu a proces pokračuje
  • když není vyvoláno žádné zpětné volání nebo je zařízení nečinné, přejde do režimu spánku, čímž šetří energii.

// --------- prototyp pro zpětné volání úkolu ------------ //

zrušit taskI2CCallback ();

zrušit taskI2CDisable ();

zrušit taskWiFiCallback ();

zrušit taskWiFiDisable ();

// --------- Úkoly ------------ //

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

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

// povolit tI2C tI2C.enable ();

Krok 5: Čtení hodnot teploty a vlhkosti z SHT25

Odečtení hodnot teploty a vlhkosti z SHT25
Odečtení hodnot teploty a vlhkosti z SHT25

I2C je dvouvodičové rozhraní, které ke komunikaci s hlavním zařízením používá pouze dva vodiče. Jeden je SCL (Serial Clock) a druhý je SDA (Serial Data). Každé podřízené zařízení má jedinečnou adresu. SHT 25 má také 8bitovou adresu a lze k ní přistupovat pomocí adresy 0x44. má 8 bitů adresy, kde 7 bitů je skutečná adresa a zatímco bit 0 LSB zcela vpravo se používá k signalizaci čtení ze zařízení nebo zápisu do něj. Pokud je bit 0 nastaven na 1, pak hlavní zařízení bude číst ze zařízení slave I2C. I2C je mnohem spolehlivější, škálovatelnější a rychlejší a dokonce má mnoho provozních režimů, díky nimž je energeticky mnohem efektivnější

Ke čtení hodnot teploty a vlhkosti používáme knihovnu Wire.h. Tato knihovna usnadňuje i2c komunikaci mezi senzorem a hlavním zařízením. 0x44 je adresa I2C pro SHT25. SHT25 pracuje v jiném provozním režimu. K tomu se můžete obrátit na datový list. Používáme 0x2C a 0x06 jako MSB, respektive LSB pro provoz s jedním výstřelem

Krok 6: Publikování hodnot do ThingSpeak pomocí ThingSpeak MQTT API

Publikování hodnot do ThingSpeak pomocí API ThingSpeak MQTT
Publikování hodnot do ThingSpeak pomocí API ThingSpeak MQTT

K odesílání našich hodnot teploty a vlhkosti do cloudu používáme rozhraní ThingSpeak MQTT API. ThingSpeak je platforma IoT. ThingSpeak je bezplatná webová služba, která vám umožňuje shromažďovat a ukládat data ze senzorů v cloudu. MQTT je běžný protokol používaný v systémech IoT k připojení zařízení a senzorů nízké úrovně. MQTT se používá k předávání krátkých zpráv brokerovi a od něj. ThingSpeak nedávno přidal brokera MQTT, aby zařízení mohla odesílat zprávy do ThingSpeak. Z tohoto příspěvku můžete postupovat podle pokynů k nastavení kanálu ThingSpeak

ThingSpeak MQTT

MQTT je architektura pro publikování/předplatné, která je vyvinuta především pro připojení zařízení s omezenou šířkou pásma a omezeným výkonem prostřednictvím bezdrátových sítí. Je to jednoduchý a lehký protokol, který běží přes sokety TCP/IP nebo WebSockets. MQTT přes WebSocket lze zabezpečit pomocí SSL. Architektura publikování/odběru umožňuje zasílání zpráv na klientská zařízení, aniž by zařízení muselo nepřetržitě provádět dotazování serveru. Klient je jakékoli zařízení, které se připojuje k makléři a může publikovat nebo se přihlásit k odběru témat za účelem přístupu k informacím. Téma obsahuje informace o směrování pro makléře. Každý klient, který chce odesílat zprávy, je publikuje na určité téma a každý klient, který chce dostávat zprávy, se přihlásí k určitému tématu

Publikovat a přihlásit se k odběru pomocí ThingSpeak MQTT

  • Publikování na kanály kanálu kanálu /publikovat /
  • Publikování na konkrétní kanály/publikování/pole/pole/
  • Přihlaste se k odběru kanálů pole kanálu/přihlaste se k odběru //
  • Přihlaste se k odběru kanálů kanálu soukromých kanálů // odběr/pole/pole/
  • Přihlaste se k odběru všech polí kanálu. kanály // odběr/pole/feild/

zrušit úkolWiFiCallback ()

{

Serial.println ("taskWiFiCallbackStarted");

Serial.print ("časový limit pro tento úkol: / t");

Serial.println (tWiFi.getTimeout ());

if (! mqttCli.connected ())

{

Serial.println („Klient není připojen“);

reconnectMQTT ();

}

Řetězec topicString = "kanály/"+Řetězec (ID kanálu)+"/publikovat/"+Řetězec (writeAPIKey);

int topicLength = topicString.length ()+1;

char topicBuffer [topicLength];

topicString.toCharArray (topicBuffer, topicLength+1);

Serial.println (topicBuffer);

Řetězec dataString = String ("pole1 =" + Řetězec (tempC, 1) + "& pole2 =" + Řetězec (tempF, 1) + "& pole3 =" + Řetězec (vlhký, 1));

int dataLength = dataString.length ()+1;

byte dataBuffer [dataLength];

dataString.getBytes (dataBuffer, dataLength);

mqttCli.beginPublish (topicBuffer, dataLength, false);

Serial.println (mqttCli.write (dataBuffer, dataLength)? "Publikováno": "publikováno neúspěšně");

mqttCli.endPublish ();

//mqttCli.loop ();

}

Krok 7: E -mailové upozornění na hlášení o počasí

Zpráva o počasí E -mailové upozornění
Zpráva o počasí E -mailové upozornění
Zpráva o počasí E -mailové upozornění
Zpráva o počasí E -mailové upozornění

Pomocí apletů IFTTT dáváme uživateli hlášení o počasí v reálném čase. Implementovali jsme to tedy prostřednictvím ThingSpeak. Průměrujeme pětistupňové hodnoty teploty a vlhkosti. Kdykoli je hodnota posledního záznamu větší než průměrná hodnota. Spustí e -mailové upozornění „je horký den“. a když je nižší než průměrná hodnota. Spustí e -mailové oznámení „Jaký krásný den“. Každý den kolem 10:00 (IST) budeme dostávat e -mailové oznámení

channelID = ******;

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

vlhkostData = thingSpeakRead (ID kanálu, 'Pole', 3, 'NumDays', 5); tempData = thingSpeakRead (channelID, 'Fields', 1, 'NumDays', 5);

perHumid = max (vlhkostní data) -min (vlhkostní data);

humidValue = 0,1*perHumid+min (data vlhkosti);

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 (webread (urlHumid));

if (lastTempValue

if (lastTempValue> tempValue || lastHumidValue> humidValue)

plantMessage = 'Je horký den.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); konec

Krok 8: Celkový kód

Celkový kód
Celkový kód
Celkový kód
Celkový kód
Celkový kód
Celkový kód

Celkový kód

Celkový kód je k dispozici v tomto úložišti GitHub

Omezení

  • Existují určité problémy s publikováním dat pomocí metody publikování pro velkou část dat. K vyřešení tohoto problému používáme funkci write ()
  • SPIFFS by měl být naformátován před odesláním nových dat do SPIFFS.
  • Nesmíte používat funkci delay (). delay () brání provozu na pozadí. Místo toho vytvořte zpoždění pomocí millis (), pouze pokud je to nutné

Kredity

  • Webový server ESP826
  • Plánovač úkolů
  • SHT 25
  • ThingSpeak MQTT API
  • IFTTT
  • PubSubClient

Doporučuje: