Kazalo:

Spletna aplikacija Weather z uporabo Esp8266: 7 korakov
Spletna aplikacija Weather z uporabo Esp8266: 7 korakov

Video: Spletna aplikacija Weather z uporabo Esp8266: 7 korakov

Video: Spletna aplikacija Weather z uporabo Esp8266: 7 korakov
Video: Raziskujte Slovenijo z uporabo interaktivne aplikacije STAGE 2024, November
Anonim
Spletna aplikacija Weather z uporabo Esp8266
Spletna aplikacija Weather z uporabo Esp8266

SHT 31 je senzor temperature in vlažnosti podjetja Sensirion. SHT31 zagotavlja visoko stopnjo natančnosti okoli ± 2% relativne vlažnosti. Njegovo območje vlažnosti je od 0 do 100%, temperaturno območje pa med -40 do 125 ° C. Je veliko bolj zanesljiv in hiter z 8 sekundnim odzivnim časom senzorja. Njegova funkcionalnost vključuje izboljšano obdelavo signalov in združljivost z I2C. Ima različne načine delovanja, zaradi česar je energetsko učinkovit.

V tej vadnici smo povezali SHT 31 z desko Adafruit Huzzah. Za branje vrednosti temperature in vlažnosti smo uporabili ESP8266 I2C ščit. Ta adapter omogoča dostop do vseh zatičev in ponuja uporabniku prijazno okolje I2C.

1. korak: Potrebna je strojna oprema

Potrebna strojna oprema
Potrebna strojna oprema
Potrebna strojna oprema
Potrebna strojna oprema
Potrebna strojna oprema
Potrebna strojna oprema

Strojna oprema, uporabljena za dokončanje te naloge:

1. SHT31

2. Adafruit Huzzah ESP8266

3. ESP8266 I2C adapter

4. Kabel I2C

2. korak: Povezave strojne opreme

Povezave strojne opreme
Povezave strojne opreme
Povezave strojne opreme
Povezave strojne opreme

Ta korak vključuje priročnik za priključitev strojne opreme. Ta razdelek v bistvu razlaga potrebne povezave ožičenja med senzorjem in ESP8266. Povezave so naslednje.

  1. SHT31 deluje preko I2C. Zgornja slika prikazuje povezavo med modulom ESP8266 in modulom SHT31. Za to uporabljamo kabel I2C, lahko pa uporabimo tudi 4 mostične žice od F do F.
  2. ena žica se uporablja za Vcc, druga žica za GND in druga dva za SDA oziroma SCL.
  3. V skladu z adapterjem I2C se pin2 in pin 14 plošče ESP8266 uporabljata kot SDA oziroma SCL.

3. korak: Koda za načrtovanje opravil

V tej vadnici izvajamo tri operacije

  • Preberite podatke iz SHT11 po protokolu I2C
  • gostite spletni strežnik in na spletnem mestu objavite odčitavanje senzorja
  • objavite odčitke senzorja v API -ju ThingSpeak

Za to uporabljamo knjižnico TaskScheduler. Načrtovali smo tri različne naloge, ki se nanašajo na tri različne nadzorne operacije. to se naredi na naslednji način

  • Naloga 1 je za branje vrednosti senzorja, ki traja 1 sekundo, dokler ne doseže časovne omejitve 10 sekund.
  • Ko Task1 doseže svojo časovno omejitev, je Task 2 omogočeno in Task1 onemogočeno.
  • V tem povratnem klicu se povežemo z AP. Dve logični spremenljivki skrbita za preklapljanje med STA in AP
  • V 2. nalogi gostujemo spletni strežnik na naslovu 192.168.1.4. Ta naloga se izvaja vsakih 5 sekund, dokler ne doseže časovne omejitve, ki je 50 sekund
  • Ko naloga 2 doseže časovno omejitev, je naloga 3 omogočena, naloga 2 pa onemogočena.
  • V tem povratnem klicu se povežemo s STA (lokalni IP)
  • V 3. nalogi objavljamo branje senzorja v API -ju ThingSpeak v oblaku
  • Naloga 3 se izvaja vsakih pet sekund, dokler ne doseže svoje časovne omejitve, torej 50 sekund
  • Ko opravilo 3 preteče, se opravilo 1 znova omogoči in opravilo 3 je onemogočeno.
  • Ko ni povratnega klica ali naprava miruje, preide v stanje mirovanja in s tem prihrani energijo.

Načrtovalec ts;

// Opravila za i2c, gostovanje spletnega strežnika in objava na Thingspeak

Naloga tI2C (1 * TASK_SECOND, TASK_FOREVER in & taskI2CCallback, & ts, false, NULL in & taskI2CDisable); Task tAP (5*TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL in & taskAPDisable); Opravilo tWiFi (5* TASK_SECOND, TASK_FOREVER in & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable); // časovna omejitev opravil tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // omogočim nalogo I2C tI2C.enable ();

4. korak: Koda za branje vrednosti temperature in vlažnosti

Za branje vrednosti temperature in vlažnosti uporabljamo knjižnico Wire.h. Ta knjižnica olajša komunikacijo i2c med senzorjem in glavno napravo. 0x44 je naslov I2C za SHT31.

SHT31 deluje v drugačnem načinu delovanja. Za to se lahko obrnete na podatkovni list.

Za eno posnetek uporabljamo 0x2C oziroma 0x06 kot MSB oziroma LSB.

// Naloga I2C za povratni klic nična naloga I2CCallback ()

{Serial.println ("taskI2CStarted"); neoznačeni int koren [6]; // začetek prenosa od 0x44; Wire.beginTransmission (Addr); // za prenos enega posnetka z visoko ponovljivostjo uporabljamo 0x2C (MSB) in 0x06 (LSB) Wire.write (0x2C); Wire.write (0x06); // konec prenosa Wire.endTransmission (); // zahteva bajte od 0x44 Wire.beginTransmission (Addr); Wire.endTransmission (); Wire.requestFrom (Addr, 6); if (Wire.available () == 6) {// podatki [0] in podatki [1] vsebujejo 16 bitov temperature. root [0] = Wire.read (); root [1] = Wire.read (); // podatki [2] vsebujejo 8 bit korena CRC [2] = Wire.read (); // podatki [3] in podatki [4] vsebujejo 16 -bitni koren vlažnosti [3] = Wire.read (); root [4] = Wire.read (); // podatki [5] so sestavljeni iz 8 -bitnega korena CRC [5] = Wire.read (); } int temp = (root [0] * 256) + root [1]; // premik MSB za 8 bitov dodajanje LSB float cTemp = -45,0 + (175,0 * temp /65535,0); float fTemp = (cTemp * 1,8) + 32,0; // premaknemo MSB za 8 bitov, dodamo LSB, ki ga razdelimo s polno ločljivostjo in * 100 za odstotno vlažnost plovca = (100,0 * ((koren [3] * 256,0) + koren [4])) /65535,0;

tempC = cTemp;

tempF = fTemp; vlažno = vlažnost; Serial.print ("Temperatura v C: / t"); Serial.println (niz (cTemp, 1)); Serial.print ("Temperatura v F: / t"); Serial.println (niz (fTemp, 1)); Serial.print ("Vlažnost: / t"); Serial.println (niz (vlažnost, 1)); }

5. korak: Koda za gostovanje spletnega strežnika

Koda za gostovanje spletnega strežnika
Koda za gostovanje spletnega strežnika
Koda za gostovanje spletnega strežnika
Koda za gostovanje spletnega strežnika

Spletni strežnik naše naprave smo gostili na statičnem IP.

  • Knjižnica ESP8266WebServer se uporablja za gostovanje spletnega strežnika
  • Najprej moramo razglasiti naslov IP, prehod in masko podomrežja, da ustvarimo statični IP
  • Zdaj razglasite ssid in geslo za svojo dostopno točko.
  • povežite z dostopno točko iz katere koli naprave STA
  • gostite strežnik na vratih 80, ki so privzeta vrata za internetni komunikacijski protokol, protokol za prenos hiperteksta (HTTP)
  • v spletni brskalnik vnesite 192.168.1.4 za uvodno spletno stran in 192.168.1.4/Vrednost za spletno stran za branje senzorjev

// statični IP za AP

IP -naslov ap_local_IP (192, 168, 1, 4);

IPAddress ap_gateway (192, 168, 1, 254);

IPAddress ap_subnet (255, 255, 255, 0); // ssid in AP za lokalno WiFi v načinu STA

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

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

// ssid in pass za AP

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

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

Strežnik ESP8266WebServer (80);

void setup {

server.on ("/", onHandleDataRoot);

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

server.onNotFound (onHandleNotFound);

}

void taskAPCCallback () {

Serial.println ("taskAP zagnan");

server.handleClient ();

}

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

void onHandleDataFeed () {

server.send (200, "besedilo/html", PAGE2); }

void onHandleNotFound () {

String message = "Datoteka ni najdena / n / n";

message += "URI:";

sporočilo += server.uri ();

sporočilo += "\ nMetoda:";

sporočilo += (server.method () == HTTP_GET)? "GET": "POST";

message += "\ nArgumenti:";

sporočilo += server.args ();

sporočilo += "\ n";

server.send (404, "besedilo/navadno", sporočilo);}

void ponovno povežite APWiFi () {

WiFi.mode (WIFI_AP_STA);

zamuda (100);

WiFi.disconnect ();

logično stanje = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

če (status == res) {

Serial.print ("Nastavitev mehkega AP-ja …");

logična ap = WiFi.softAP (APssid, APpass);

če (ap == res) {

Serial.print ("povezan z: / t");

// IP -naslov myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

server.begin ();

}

}

6. korak: Koda za objavljanje podatkov za govorjenje

Koda za objavljanje podatkov v stvar
Koda za objavljanje podatkov v stvar
Koda za objavljanje podatkov v stvar
Koda za objavljanje podatkov v stvar
Koda za objavljanje podatkov v stvar
Koda za objavljanje podatkov v stvar
Koda za objavljanje podatkov v stvar
Koda za objavljanje podatkov v stvar

Tukaj objavljamo odčitke senzorjev v Thing Speak. za dokončanje te naloge so potrebni naslednji koraki-

  • Ustvarite svoj račun
  • Ustvarite kanale in polja za shranjevanje podatkov senzorja
  • lahko dobimo in objavimo podatke iz ESP v thingSpeak in obratno z zahtevami GET in POST v api.
  • lahko svoje podatke objavimo v ThingSpeaku na naslednji način

void taskWiFiCallback () {

WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr += "& polje1 ="; postStr += niz (vlažno); postStr += "& polje2 ="; postStr += niz (tempC); postStr += "& field3 ="; postStr += niz (tempF); postStr += "\ r / n / r / n"; wifiClient.print ("POST /posodobi HTTP /1.1 / n"); wifiClient.print ("Gostitelj: api.thingspeak.com / n"); wifiClient.print ("Povezava: zaprta / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:"+apiKey+"\ n"); wifiClient.print ("Content-Type: application/x-www-form-urlencoded / n"); wifiClient.print ("Content-Length:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }

7. korak: Splošna koda

Celotna koda je na voljo v mojem skladišču github

Zasluge:

  • Arduino JSON: ArduinoJson
  • ESP826Spletni strežnik
  • Načrtovalnik opravil
  • SHT 31
  • I2C skeniranje
  • Vadnica za navodila za HIH6130
  • Wire Arduino
  • NCD.io

Priporočena: