Obsah:

Počasí Web App pomocí Esp8266: 7 kroků
Počasí Web App pomocí Esp8266: 7 kroků

Video: Počasí Web App pomocí Esp8266: 7 kroků

Video: Počasí Web App pomocí Esp8266: 7 kroků
Video: Úvod do desky NodeMCU ESP8266 WiFi Development s příkladem klienta HTTP 2024, Smět
Anonim
Počasí Web App pomocí Esp8266
Počasí Web App pomocí Esp8266

SHT 31 jsou snímače teploty a vlhkosti od společnosti Sensirion. SHT31 poskytuje vysokou úroveň přesnosti 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. Jeho funkce zahrnují vylepšené zpracování signálu a kompatibilitu s I2C. Má různé provozní režimy, díky nimž je energeticky účinný.

V tomto tutoriálu jsme propojili SHT 31 s deskou Adafruit Huzzah. Ke čtení hodnot teploty a vlhkosti jsme použili štít ESP8266 I2C. Tento adaptér zpřístupňuje uživateli všechny piny a nabízí uživatelsky přívětivé prostředí I2C.

Krok 1: Je vyžadován hardware

Je vyžadován hardware
Je vyžadován hardware
Je vyžadován hardware
Je vyžadován hardware
Je vyžadován hardware
Je vyžadován hardware

Hardware použitý k dokončení tohoto úkolu:

1. SHT31

2. Adafruit Huzzah ESP8266

3. Adaptér ESP8266 I2C

4. Kabel I2C

Krok 2: Hardwarová připojení

Hardwarová připojení
Hardwarová připojení
Hardwarová připojení
Hardwarová připojení

Tento krok zahrnuje průvodce připojením hardwaru. Tato část v podstatě vysvětluje zapojení potřebná pro připojení mezi snímačem a ESP8266. Připojení jsou následující.

  1. SHT31 pracuje přes I2C. Výše uvedený obrázek ukazuje spojení mezi modulem ESP8266 a SHT31. Používáme k tomu kabel I2C, buď můžeme použít propojovací vodiče 4 F až F.
  2. jeden vodič se používá pro Vcc, druhý vodič pro GND a další dva pro SDA a SCL.
  3. Podle adaptéru I2C jsou pin2 a pin 14 desky ESP8266 použity jako SDA a SCL

Krok 3: Kód pro plánování úkolů

V tomto kurzu provádíme tři operace

  • Odečtěte data z SHT11 pomocí protokolu I2C
  • hostit webový server a odeslat čtení senzoru na webovou stránku
  • odešlete hodnoty senzorů do rozhraní ThingSpeak API

Abychom toho dosáhli, používáme knihovnu TaskScheduler. Naplánovali jsme tři různé úkoly podle tří různých řídicích operací. 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 svého časového limitu, úkol 2 je povolen a úkol 1 je zakázán.
  • V tomto zpětném volání se připojujeme k AP, jsou použity dvě booleovské proměnné, které se starají o přepínání mezi STA a AP
  • V úkolu 2 hostujeme webový server na adrese 192.168.1.4. Tento úkol běží každých 5 sekund, dokud nedosáhne svého časového limitu, který je 50 sekund
  • Když úkol 2 dosáhne časového limitu, úkol 3 je povolen a úkol 2 je zakázán.
  • V tomto zpětném volání se připojujeme ke STA (místní IP)
  • V úkolu 3 odesíláme čtení senzorů do cloudového rozhraní ThingSpeak API
  • Úkol 3 běží každých pět sekund, dokud nedosáhne svého časového limitu, tj. 50 sekund
  • Když úkol 3 dosáhne časového limitu, úkol 1 je znovu povolen a úkol 3 je deaktivován.
  • Pokud není vyvoláno žádné zpětné volání nebo je zařízení nečinné, přejde do režimu spánku, čímž šetří energii.

Plánovač ts;

// Úkoly pro i2c, hostování webového serveru a zveřejňování na thingspeak

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

Krok 4: Kód pro čtení hodnot teploty a vlhkosti

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 SHT31.

SHT31 pracuje v jiném režimu operací. K tomu se můžete obrátit na datový list.

Používáme 0x2C a 0x06 jako MSB a LSB, respektive pro operaci s jedním výstřelem.

// Zpětné volání úkolu I2C neplatné taskI2CCallback ()

{Serial.println ("taskI2CStarted"); nepodepsaný int root [6]; // zahájení přenosu z 0x44; Wire.beginTransmission (Addr); // pro jednorázovou transmisi s vysokou opakovatelností používáme 0x2C (MSB) a 0x06 (LSB) Wire.write (0x2C); Wire.write (0x06); // konec přenosu Wire.endTransmission (); // požadavek na bajty od 0x44 Wire.beginTransmission (Addr); Wire.endTransmission (); Wire.requestFrom (Addr, 6); if (Wire.available () == 6) {// data [0] and data [1] contains 16 bit of temperature. root [0] = Wire.read (); root [1] = Wire.read (); // data [2] obsahují 8 bitů CRC root [2] = Wire.read (); // data [3] a data [4] obsahují 16 bitů vlhkosti root [3] = Wire.read (); root [4] = Wire.read (); // data [5] se skládá z 8bitového CRC root [5] = Wire.read (); } int temp = (root [0] * 256) + root [1]; // posun MSB o 8 bitů přidat LSB float cTemp = -45.0 + (175.0 * temp /65535.0); float fTemp = (cTemp * 1,8) + 32,0; // posune MSB o 8 bitů, přidá do něj LSB a rozdělí se podle plného rozlišení a * 100 pro procentní plovoucí vlhkost = (100,0 * ((root [3] * 256,0) + root [4])) /65535.0;

tempC = cTemp;

tempF = fTemp; vlhký = vlhkost; Serial.print ("Teplota v C: / t"); Serial.println (String (cTemp, 1)); Serial.print ("Teplota ve F: / t"); Serial.println (String (fTemp, 1)); Serial.print ("Vlhkost: / t"); Serial.println (String (vlhkost, 1)); }

Krok 5: Kód pro hostování webového serveru

Kód pro hostování webového serveru
Kód pro hostování webového serveru
Kód pro hostování webového serveru
Kód pro hostování webového serveru

Z našeho zařízení jsme hostovali webový server na statické IP adrese.

  • K hostování webového serveru slouží knihovna ESP8266 WebServer
  • Nejprve musíme deklarovat IP adresu, bránu a masku podsítě, abychom vytvořili naši statickou IP
  • Nyní deklarujte ssid a heslo pro váš přístupový bod.
  • připojit k přístupovému bodu z jakéhokoli zařízení STA
  • hostit server na portu 80, což je výchozí port pro internetový komunikační protokol, Hypertext Transfer Protocol (HTTP)
  • zadejte 192.168.1.4 do webového prohlížeče pro úvodní webovou stránku a 192.168.1.4/Value pro webovou stránku pro čtení senzorů

// statický Ip pro 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 pro místní WiFi v režimu STA

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

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

// ssid a pass pro AP

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

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

Server ESP8266 WebServer (80);

neplatné nastavení {

server.on ("/", onHandleDataRoot);

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

server.onNotFound (onHandleNotFound);

}

zrušit taskAPCallback () {

Serial.println ("taskAP spuštěn");

server.handleClient ();

}

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

neplatné onHandleDataFeed () {

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

neplatné onHandleNotFound () {

Řetězcová zpráva = "Soubor nebyl nalezen / n / n";

zpráva += "URI:";

zpráva += server.uri ();

zpráva += "\ n Metoda:";

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

zpráva += "\ nArgumenty:";

zpráva += server.args ();

zpráva += "\ n";

server.send (404, "text/plain", zpráva);}

void reconnectAPWiFi () {

WiFi.mode (WIFI_AP_STA);

zpoždění (100);

WiFi.disconnect ();

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

if (status == true) {

Serial.print ("Nastavení soft-AP …");

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

if (ap == true) {

Serial.print ("připojeno k: / t");

// IPAddress myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

server.begin ();

}

}

Krok 6: Kód pro zasílání dat do Thing Speak

Kód pro zasílání dat do Thing Speak
Kód pro zasílání dat do Thing Speak
Kód pro zasílání dat do Thing Speak
Kód pro zasílání dat do Thing Speak
Kód pro zasílání dat do Thing Speak
Kód pro zasílání dat do Thing Speak
Kód pro zasílání dat do Thing Speak
Kód pro zasílání dat do Thing Speak

Zde zveřejňujeme naměřené hodnoty senzorů na Thing Speak. k dokončení tohoto úkolu jsou zapotřebí následující kroky-

  • Vytvořte si účet ve věci mluvit
  • Vytvořte kanály a pole pro ukládání dat ze senzorů
  • můžeme získávat a odesílat data z ESP do thingSpeak a naopak pomocí požadavků GET a POST do API.
  • můžeme zveřejnit naše data na ThingSpeak následujícím způsobem

zrušit taskWiFiCallback () {

WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr += "& field1 ="; postStr += String (vlhký); postStr += "& field2 ="; postStr += String (tempC); postStr += "& field3 ="; postStr += String (tempF); postStr += "\ r / n / r / n"; wifiClient.print ("POST /aktualizace HTTP /1.1 / n"); wifiClient.print ("Host: api.thingspeak.com / n"); wifiClient.print ("Připojení: zavřít / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:"+apiKey+"\ n"); wifiClient.print ("Typ obsahu: application/x-www-form-urlencoded / n"); wifiClient.print ("Délka obsahu:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }

Krok 7: Celkový kód

Celkový kód je k dispozici v mém úložišti github

Kredity:

  • Arduino JSON: ArduinoJson
  • Webový server ESP826
  • Plánovač úkolů
  • SHT 31
  • Skenování I2C
  • Výukový program HIH6130 instructables
  • Wire Arduino
  • NCD.io

Doporučuje: