Innholdsfortegnelse:

Weather Web App ved hjelp av Esp8266: 7 trinn
Weather Web App ved hjelp av Esp8266: 7 trinn

Video: Weather Web App ved hjelp av Esp8266: 7 trinn

Video: Weather Web App ved hjelp av Esp8266: 7 trinn
Video: DIY Cloud Weather Station with ESP32/ESP8266 (MySQL Database and PHP) 2024, Kan
Anonim
Vær -webapp ved bruk av Esp8266
Vær -webapp ved bruk av Esp8266

SHT 31 er en temperatur- og fuktighetssensor laget av Sensirion. SHT31 gir et høyt nøyaktighetsnivå på ± 2% RF. Luftfuktighetsområdet er mellom 0 til 100% og temperaturområdet er mellom -40 til 125 ° C. Det er mye mer pålitelig og rask med 8 sekunder sensorresponstid. Funksjonaliteten inkluderer forbedret signalbehandling og I2C -kompatibilitet. Den har forskjellige driftsmåter som gjør den energieffektiv.

I denne opplæringen har vi koblet SHT 31 til Adafruit Huzzah -bord. For å lese temperatur- og fuktighetsverdier har vi brukt ESP8266 I2C -skjerm. Denne adapteren gjør alle pinnene tilgjengelige for brukeren og tilbyr brukervennlig I2C-miljø.

Trinn 1: Maskinvare påkrevd

Maskinvare påkrevd
Maskinvare påkrevd
Maskinvare påkrevd
Maskinvare påkrevd
Maskinvare påkrevd
Maskinvare påkrevd

Maskinvare som brukes til å fullføre denne oppgaven:

1. SHT31

2. Adafruit Huzzah ESP8266

3. ESP8266 I2C -adapter

4. I2C -kabel

Trinn 2: Maskinvaretilkoblinger

Maskinvaretilkoblinger
Maskinvaretilkoblinger
Maskinvaretilkoblinger
Maskinvaretilkoblinger

Dette trinnet inkluderer maskinvareoppkoblingsguiden. Denne delen forklarer i utgangspunktet ledningsforbindelsene som kreves mellom sensoren og ESP8266. Tilkoblingene er som følger.

  1. SHT31 fungerer over I2C. Bildet ovenfor viser forbindelsen mellom ESP8266 og SHT31 -modulen. Vi bruker I2C -kabel for det, enten kan vi bruke 4 F til F -ledninger.
  2. en ledning brukes for Vcc, den andre ledningen for GND og to andre til henholdsvis SDA og SCL.
  3. I henhold til I2C -adapteren brukes pin2 og pin 14 på et ESP8266 -kort som henholdsvis SDA og SCL

Trinn 3: Kode for oppgaveplanlegging

I denne opplæringen utfører vi tre operasjoner

  • Les dataene fra SHT11 ved hjelp av I2C -protokollen
  • vert webserveren og legg inn sensoravlesningen på nettsiden
  • legg sensoravlesningene til ThingSpeak API

For å oppnå dette bruker vi TaskScheduler -biblioteket. Vi har planlagt tre forskjellige oppgaver som refererer til tre forskjellige kontrolloperasjoner. dette gjøres som følger

  • Oppgave 1 er for å lese sensorverdien denne oppgaven kjører i 1 sekund til den når timeout på 10 sekunder.
  • Når oppgave 1 når sin tidsavbrudd, er oppgave 2 aktivert og oppgave 1 er deaktivert.
  • Vi kobler til AP i denne tilbakeringingen. To boolske variabler tas for å ta vare på byttet mellom STA og AP
  • I oppgave 2 er vi vert for en webserver på 192.168.1.4. Denne oppgaven kjøres for hver 5 sek til den når sin timeout som er 50 sekunder
  • Når oppgave 2 når tidsavbrudd, er oppgave 3 aktivert og oppgave 2 er deaktivert.
  • Vi kobler til STA (lokal IP) i denne tilbakeringingen
  • I oppgave 3 legger vi ut sensoravlesningen til nettskyen ThingSpeak API
  • Oppgave 3 kjører hvert femte sekund til den nådde sin timeout, dvs. 50 sekunder
  • Når oppgave 3 når sin tidsavbrudd, blir oppgave 1 aktivert igjen og oppgave 3 er deaktivert.
  • Når det ikke ringes tilbake eller enheten er inaktiv, går den til Light Sleep og sparer strøm.

Planlegger ts;

// Oppgaver for i2c, hosting webserver og innlegg på thingspeak

Oppgave tI2C (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable); Oppgave tAP (5*TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL, & taskAPDisable); Task tWiFi (5* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable); // timeout for oppgaver tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // aktiver I2C -oppgave tI2C.enable ();

Trinn 4: Kode for avlesning av temperatur- og fuktighetsverdier

Vi bruker Wire.h -biblioteket til å lese temperatur- og fuktighetsverdiene. Dette biblioteket muliggjør i2c -kommunikasjon mellom sensoren og hovedenheten. 0x44 er I2C -adressen til SHT31.

SHT31 opererer i en annen modus. Du kan referere til databladet for det.

Vi bruker 0x2C og 0x06 som henholdsvis MSB og LSB for enkeltskuddsoperasjon.

// I2C oppgave tilbakeringing av ugyldig oppgaveI2CCallback ()

{Serial.println ("taskI2CStarted"); usignert int root [6]; // begynne overføringen fra 0x44; Wire.beginTransmission (Addr); // for ett skudds transmisjon med høy repeterbarhet bruker vi 0x2C (MSB) og 0x06 (LSB) Wire.write (0x2C); Wire.write (0x06); // avslutte overføring Wire.endTransmission (); // be om byte fra 0x44 Wire.beginTransmission (Addr); Wire.endTransmission (); Wire.requestFrom (Addr, 6); hvis (Wire.available () == 6) {// data [0] og data [1] inneholder 16 bits temperatur. root [0] = Wire.read (); root [1] = Wire.read (); // data [2] inneholder 8 bits CRC root [2] = Wire.read (); // data [3] og data [4] inneholder 16 bit fuktighetsrot [3] = Wire.read (); root [4] = Wire.read (); // data [5] består av 8 -bits CRC -rot [5] = Wire.read (); } int temp = (rot [0] * 256) + rot [1]; // skift MSB med 8 bits legg til LSB float cTemp = -45,0 + (175,0 * temp /65535,0); float fTemp = (cTemp * 1.8) + 32.0; // skift MSB med 8 biter legg til LSB til den med full oppløsning og * 100 for prosentvis flytefuktighet = (100,0 * ((rot [3] * 256,0) + rot [4])) /65535,0;

tempC = cTemp;

tempF = fTemp; fuktig = fuktighet; Serial.print ("Temperatur i C: / t"); Serial.println (String (cTemp, 1)); Serial.print ("Temperatur i F: / t"); Serial.println (String (fTemp, 1)); Serial.print ("Fuktighet: / t"); Serial.println (streng (fuktighet, 1)); }

Trinn 5: Kode for hosting av en webserver

Kode for hosting av en webserver
Kode for hosting av en webserver
Kode for hosting av en webserver
Kode for hosting av en webserver

Vi har vært vert for en webserver fra enheten vår på en statisk IP.

  • ESP8266WebServer -biblioteket brukes til å være vert for webserveren
  • Først må vi deklarere IP -adresse, gateway og nettverksmaske for å lage vår statiske IP
  • Angi nå ssid og passord for tilgangspunktet ditt.
  • koble til tilgangspunktet fra en hvilken som helst STA -enhet
  • vert serveren på port 80, som er en standardport for internettkommunikasjonsprotokoll, Hypertext Transfer Protocol (HTTP)
  • skriv inn 192.168.1.4 i nettleseren din for intro -webside og 192.168.1.4/Value for sensoravlesning av webside

// statisk Ip for AP

IPAddress ap_local_IP (192, 168, 1, 4);

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

IPAddress ap_subnet (255, 255, 255, 0); // ssid og AP for lokal WiFi i STA -modus

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

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

// ssid og pass for AP

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

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

ESP8266WebServer -server (80);

ugyldig oppsett {

server.on ("/", onHandleDataRoot);

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

server.onNotFound (onHandleNotFound);

}

void taskAPCallback () {

Serial.println ("taskAP startet");

server.handleClient ();

}

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

void onHandleDataFeed () {

server.send (200, "tekst/html", SIDE2); }

void onHandleNotFound () {

String message = "Filen ble ikke funnet / n / n";

melding += "URI:";

melding += server.uri ();

melding += "\ nMetode:";

melding += (server.method () == HTTP_GET)? "GET": "POST";

melding += "\ nArgumenter:";

melding += server.args ();

melding += "\ n";

server.send (404, "tekst/vanlig", melding);}

ugyldig koble til APWiFi () {

WiFi.mode (WIFI_AP_STA);

forsinkelse (100);

WiFi. Koble fra ();

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

hvis (status == true) {

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

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

hvis (ap == true) {

Serial.print ("koblet til: / t");

// IPAddress myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

server.begin ();

}

}

Trinn 6: Kode for å legge ut data til ting

Kode for å legge ut data til ting
Kode for å legge ut data til ting
Kode for å legge ut data til ting
Kode for å legge ut data til ting
Kode for å legge ut data til ting
Kode for å legge ut data til ting
Kode for å legge ut data til ting
Kode for å legge ut data til ting

Her legger vi ut sensoravlesningene til Thing Speak. følgende trinn er nødvendig for å fullføre denne oppgaven-

  • Opprett kontoen din i thing speak
  • Lag kanaler og felt for å lagre sensordata
  • vi kan hente og legge dataene fra ESP til thingSpeak og omvendt ved å bruke GET og POST forespørsler til api.
  • vi kan legge ut dataene våre til ThingSpeak som følger

void taskWiFiCallback () {

WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr += "& field1 ="; postStr += String (fuktig); postStr += "& field2 ="; postStr += String (tempC); postStr += "& field3 ="; postStr += String (tempF); postStr += "\ r / n / r / n"; wifiClient.print ("POST /oppdater HTTP /1.1 / n"); wifiClient.print ("Vert: api.thingspeak.com / n"); wifiClient.print ("Tilkobling: lukk / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:"+apiKey+"\ n"); wifiClient.print ("Innholdstype: application/x-www-form-urlencoded / n"); wifiClient.print ("Innholdslengde:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }

Trinn 7: Samlet kode

Den generelle koden er tilgjengelig i mitt github -depot

Studiepoeng:

  • Arduino JSON: ArduinoJson
  • ESP826WebServer
  • Oppgaveplanlegger
  • SHT 31
  • I2C -skanning
  • HIH6130 instruksjonsopplæring
  • Tråd Arduino
  • NCD.io

Anbefalt: