Obsah:

Weather Web App pomocou Esp8266: 7 krokov
Weather Web App pomocou Esp8266: 7 krokov

Video: Weather Web App pomocou Esp8266: 7 krokov

Video: Weather Web App pomocou Esp8266: 7 krokov
Video: DIY Cloud Weather Station with ESP32/ESP8266 (MySQL Database and PHP) 2024, November
Anonim
Weather Web App pomocou Esp8266
Weather Web App pomocou Esp8266

SHT 31 sú snímače teploty a vlhkosti vyrobené spoločnosťou Sensirion. SHT31 poskytuje vysokú úroveň presnosti okolo ± 2% relatívnej vlhkosti. Rozsah vlhkosti je od 0 do 100% a teplotný rozsah od -40 do 125 ° C. Je to oveľa spoľahlivejšie a rýchlejšie s dobou odozvy senzora 8 sekúnd. Jeho funkčnosť zahŕňa vylepšené spracovanie signálu a kompatibilitu s I2C. Má rôzne prevádzkové režimy, vďaka ktorým je energeticky účinný.

V tomto návode sme prepojili SHT 31 s doskou Adafruit Huzzah. Na čítanie hodnôt teploty a vlhkosti sme použili štít ESP8266 I2C. Tento adaptér sprístupňuje všetky piny používateľovi a ponúka užívateľsky prívetivé prostredie I2C.

Krok 1: Vyžaduje sa hardvér

Vyžaduje sa hardvér
Vyžaduje sa hardvér
Vyžaduje sa hardvér
Vyžaduje sa hardvér
Vyžaduje sa hardvér
Vyžaduje sa hardvér

Hardvér použitý na dokončenie tejto úlohy:

1. SHT31

2. Adafruit Huzzah ESP8266

3. Adaptér ESP8266 I2C

4. Kábel I2C

Krok 2: Hardvérové pripojenia

Hardvérové pripojenia
Hardvérové pripojenia
Hardvérové pripojenia
Hardvérové pripojenia

Tento krok obsahuje sprievodcu pripojením hardvéru. Táto časť v zásade vysvetľuje zapojenie potrebné medzi senzorom a ESP8266. Pripojenia sú nasledujúce.

  1. SHT31 funguje na I2C. Vyššie uvedený obrázok ukazuje spojenie medzi modulom ESP8266 a SHT31. Používame na to kábel I2C, alebo môžeme použiť 4 prepojovacie vodiče F až F.
  2. jeden vodič sa používa pre Vcc, druhý vodič pre GND a ďalšie dva pre SDA a SCL.
  3. Podľa adaptéra I2C sa pin2 a pin 14 dosky ESP8266 používajú ako SDA, respektíve SCL

Krok 3: Kód pre plánovanie úloh

V tomto návode vykonávame tri operácie

  • Prečítajte si údaje z SHT11 pomocou protokolu I2C
  • hostite webový server a umiestnite údaje zo snímača na webovú stránku
  • odošlite údaje zo senzorov do rozhrania ThingSpeak API

Aby sme to dosiahli, používame knižnicu TaskScheduler. Naplánovali sme tri rôzne úlohy týkajúce sa troch rôznych riadiacich operácií. toto sa robí nasledovne

  • Úloha 1 je na prečítanie hodnoty senzora. Táto úloha trvá 1 sekundu, kým nedosiahne časový limit 10 sekúnd.
  • Keď úloha 1 dosiahne časový limit, úloha 2 je povolená a úloha 1 je zakázaná.
  • Pri tomto spätnom volaní sa pripájame k AP. O prepínanie medzi STA a AP sa starajú dve booleovské premenné
  • V úlohe 2 hostíme webový server na adrese 192.168.1.4. Táto úloha prebieha každých 5 sekúnd, kým nedosiahne časový limit, ktorý je 50 sekúnd
  • Keď úloha 2 vyprší časový limit, úloha 3 je povolená a úloha 2 je zakázaná.
  • V tomto spätnom volaní sa pripájame k STA (lokálna IP)
  • V úlohe 3 odosielame čítanie senzorov do cloudového rozhrania ThingSpeak API
  • Úloha 3 prebieha každých päť sekúnd, kým nedosiahne časový limit, tj 50 sekúnd
  • Akonáhle úloha 3 dosiahne časový limit, úloha 1 je znova povolená a úloha 3 je zakázaná.
  • Keď sa nepodarí zavolať späť, alebo je zariadenie nečinné, prejde do režimu spánku, čím šetrí energiu.

Plánovač ts;

// Úlohy pre i2c, hosting webového servera a uverejňovanie príspevkov na thingspeak

Úloha tI2C (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable); Úkol tAP (5*TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL, & taskAPDisable); Úloha tWiFi (5* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable); // časový limit pre úlohy tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // povoliť úlohu I2C tI2C.enable ();

Krok 4: Kód na čítanie hodnôt teploty a vlhkosti

Na čítanie hodnôt teploty a vlhkosti používame knižnicu Wire.h. Táto knižnica uľahčuje komunikáciu i2c medzi senzorom a hlavným zariadením. 0x44 je adresa I2C pre SHT31.

SHT31 funguje v inom režime prevádzky. Môžete sa na to obrátiť v technickom liste.

Na operáciu jedného záberu používame 0x2C a 0x06 ako MSB a LSB.

// Spätné volanie úlohy I2C neplatné taskI2CCallback ()

{Serial.println ("taskI2CStarted"); nepodpísaný int root [6]; // spustenie prenosu z 0x44; Wire.beginTransmission (Addr); // na jednorazovú transmisiu s vysokou opakovateľnosťou používame 0x2C (MSB) a 0x06 (LSB) Wire.write (0x2C); Wire.write (0x06); // koniec prenosu Wire.endTransmission (); // vyžiadanie bajtov z 0x44 Wire.beginTransmission (Addr); Wire.endTransmission (); Wire.requestFrom (Addr, 6); ak (Wire.available () == 6) {// data [0] a data [1] obsahujú 16 bitov teploty. root [0] = Wire.read (); root [1] = Wire.read (); // údaje [2] obsahujú 8 bitov koreňa CRC [2] = Wire.read (); // data [3] a data [4] obsahujú 16 bitov vlhkosti root [3] = Wire.read (); root [4] = Wire.read (); // údaje [5] pozostávajú z 8 -bitového koreňa CRC [5] = Wire.read (); } int temp = (root [0] * 256) + root [1]; // posun MSB o 8 bitov pridať LSB float cTemp = -45.0 + (175.0 * temp /65535.0); float fTemp = (cTemp * 1,8) + 32,0; // posun MSB o 8 bitov, pridá sa k nemu LSB rozdelené podľa plného rozlíšenia a * 100 pre percentuálnu vznášajúcu sa vlhkosť = (100,0 * ((root [3] * 256,0) + root [4])) /65535.0;

tempC = cTemp;

tempF = fTemp; vlhký = vlhkosť; Serial.print ("Teplota v C: / t"); Serial.println (String (cTemp, 1)); Serial.print ("Teplota v F: / t"); Serial.println (String (fTemp, 1)); Serial.print ("Vlhkosť: / t"); Serial.println (Reťazec (vlhkosť, 1)); }

Krok 5: Kód pre hosťovanie webového servera

Kód pre hosťovanie webového servera
Kód pre hosťovanie webového servera
Kód pre hosťovanie webového servera
Kód pre hosťovanie webového servera

Z nášho zariadenia sme hostili webový server na statickej IP adrese.

  • Na hostenie webového servera sa používa knižnica ESP8266WebServer
  • Najprv musíme deklarovať IP adresu, bránu a masku podsiete, aby sme vytvorili našu statickú IP
  • Teraz deklarujte ssid a heslo pre svoj prístupový bod.
  • pripojte sa k prístupovému bodu z akéhokoľvek zariadenia STA
  • hostite server na porte 80, ktorý je predvoleným portom pre internetový komunikačný protokol Hypertext Transfer Protocol (HTTP)
  • zadajte 192.168.1.4 do webového prehliadača pre úvodnú webovú stránku a 192.168.1.4/Hodnotu pre webovú stránku čítajúcu senzor

// staticka IP pre AP

IP adresa ap_local_IP (192, 168, 1, 4);

IP adresa ap_gateway (192, 168, 1, 254);

IPAddress ap_subnet (255, 255, 255, 0); // ssid a AP pre lokálne WiFi v režime STA

const char WiFissid = "*********";

const char WiFipass = "*********";

// ssid a pass pre AP

const char APssid = "********";

const char APpass = "********";

Server ESP8266 WebServer (80);

neplatné nastavenie {

server.on ("/", onHandleDataRoot);

server.on ("/hodnota", onHandleDataFeed);

server.onNotFound (onHandleNotFound);

}

zrušiť úlohuAPCallback () {

Serial.println ("taskAP spustený");

server.handleClient ();

}

neplatné onHandleDataRoot () {server.send (200, "text/html", STRANA1); }

neplatné onHandleDataFeed () {

server.send (200, "text/html", STRANA2); }

neplatné onHandleNotFound () {

Reťazcová správa = "Súbor nebol nájdený / n / n";

správa += "URI:";

správa += server.uri ();

správa += "\ nPostup:";

správa += (server.method () == HTTP_GET)? "GET": "POST";

správa += "\ nArgumenty:";

správa += server.args ();

správa += "\ n";

server.send (404, „text/plain“, správa);}

zrušiť opätovné pripojenieAPWiFi () {

WiFi.mode (WIFI_AP_STA);

oneskorenie (100);

WiFi.disconnect ();

boolean status = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

if (status == true) {

Serial.print ("Nastavenie soft-AP …");

boolean ap = WiFi.softAP (APssid, APpass);

if (ap == true) {

Serial.print ("pripojené k: / t");

// IPAddress myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

server.begin ();

}

}

Krok 6: Kód na odosielanie údajov do reči

Kód na zverejnenie údajov v rozhovore s vecou
Kód na zverejnenie údajov v rozhovore s vecou
Kód na zverejnenie údajov v rozhovore s vecou
Kód na zverejnenie údajov v rozhovore s vecou
Kód na zverejnenie údajov v rozhovore s vecou
Kód na zverejnenie údajov v rozhovore s vecou
Kód na zverejnenie údajov v rozhovore s vecou
Kód na zverejnenie údajov v rozhovore s vecou

Tu zverejňujeme hodnoty senzorov do Thing Speak. Na dokončenie tejto úlohy sú potrebné nasledujúce kroky-

  • Vytvorte si účet tak, aby hovoril
  • Vytvorte kanály a polia na uloženie údajov zo senzorov
  • môžeme získať a odoslať údaje z ESP do programu thingSpeak a naopak pomocou požiadaviek GET a POST do rozhrania API.
  • môžeme odoslať naše údaje do ThingSpeak nasledovne

zrušiť úlohuWiFiCallback () {

WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr += "& field1 ="; postStr += Reťazec (vlhký); postStr += "& field2 ="; postStr += String (tempC); postStr += "& field3 ="; postStr += String (tempF); postStr += "\ r / n / r / n"; wifiClient.print ("POST /aktualizácia HTTP /1.1 / n"); wifiClient.print ("Hostiteľ: api.thingspeak.com / n"); wifiClient.print ("Pripojenie: zavrieť / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:"+apiKey+"\ n"); wifiClient.print ("Typ obsahu: aplikácia/x-www-form-urlencoded / n"); wifiClient.print ("Dĺžka obsahu:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }

Krok 7: Celkový kód

Celkový kód je k dispozícii v mojom úložisku github

Kredity:

  • Arduino JSON: ArduinoJson
  • Webový server ESP826
  • Plánovač úloh
  • SHT 31
  • Skenovanie I2C
  • Návod na inštrukcie k HIH6130
  • Drôt Arduino
  • NCD.io

Odporúča: