Indholdsfortegnelse:

Vejrwebapp ved hjælp af Esp8266: 7 trin
Vejrwebapp ved hjælp af Esp8266: 7 trin

Video: Vejrwebapp ved hjælp af Esp8266: 7 trin

Video: Vejrwebapp ved hjælp af Esp8266: 7 trin
Video: Using ESP8266 Nodemcu to Send and Display Data to and from MYSQL Database using PHP. 2024, Kan
Anonim
Vejrwebapp ved hjælp af Esp8266
Vejrwebapp ved hjælp af Esp8266

SHT 31 er en temperatur- og fugtighedssensorer fremstillet af Sensirion. SHT31 giver en høj nøjagtighed omkring ± 2% RF. Dens fugtighedsområde er mellem 0 til 100% og temperaturområdet er mellem -40 til 125 ° C. Det er meget mere pålideligt og hurtigt med 8 sekunders sensor responstid. Dens funktionalitet omfatter forbedret signalbehandling og I2C -kompatibilitet. Det har forskellige driftsmåder, hvilket gør det energieffektivt.

I denne vejledning har vi interfacet SHT 31 med Adafruit Huzzah board. Til aflæsning af temperatur- og fugtighedsværdier har vi brugt ESP8266 I2C -skærm. Denne adapter gør alle stifter tilgængelige for brugeren og tilbyder brugervenligt I2C-miljø.

Trin 1: Hardware påkrævet

Hardware påkrævet
Hardware påkrævet
Hardware påkrævet
Hardware påkrævet
Hardware påkrævet
Hardware påkrævet

Hardware, der bruges til at fuldføre denne opgave:

1. SHT31

2. Adafruit Huzzah ESP8266

3. ESP8266 I2C adapter

4. I2C -kabel

Trin 2: Hardwareforbindelser

Hardwareforbindelser
Hardwareforbindelser
Hardwareforbindelser
Hardwareforbindelser

Dette trin inkluderer vejledningen til tilslutning af hardware. Dette afsnit forklarer dybest set de nødvendige ledningsforbindelser mellem sensoren og ESP8266. Forbindelserne er som følger.

  1. SHT31 fungerer over I2C. Ovenstående billede viser forbindelsen mellem ESP8266 og SHT31 modul. Vi bruger I2C -kabel til det enten kan vi bruge 4 F til F jumperwires.
  2. en ledning bruges til Vcc, den anden ledning til GND og to andre til henholdsvis SDA og SCL.
  3. Ifølge I2C -adapteren bruges pin2 og pin 14 på et ESP8266 -kort som henholdsvis SDA og SCL

Trin 3: Kode til opgaveplanlægning

I denne vejledning udfører vi tre operationer

  • Læs dataene fra SHT11 ved hjælp af I2C -protokol
  • host webserveren, og post sensoraflæsning på websiden
  • post sensoraflæsningerne til ThingSpeak API

For at opnå dette bruger vi TaskScheduler bibliotek. Vi har planlagt tre forskellige opgaver, der refererer til tre forskellige kontroloperationer. dette gøres som følger

  • Opgave 1 er til aflæsning af sensorværdien, denne opgave kører i 1 sekund, indtil den når timeout på 10 sekunder.
  • Når opgave1 når sin timeout, er opgave 2 aktiveret, og opgave 1 er deaktiveret.
  • Vi opretter forbindelse til AP i denne tilbagekaldelse, to boolske variabler tages for at tage sig af skiftet mellem STA og AP
  • I opgave 2 er vi vært for en webserver på 192.168.1.4. Denne opgave kører for hver 5 sek, indtil den når sin timeout, som er 50 sek
  • Når opgave 2 når timeout, er opgave 3 aktiveret, og opgave 2 er deaktiveret.
  • Vi opretter forbindelse til STA (lokal IP) i dette tilbagekald
  • I opgave 3 sender vi sensoraflæsning til ThingSpeak API i skyen
  • Opgave 3 kører hvert femte sekund, indtil den nåede sin timeout, dvs. 50 sek
  • Når opgave 3 når sin timeout, er opgave 1 aktiveret igen, og opgave 3 er deaktiveret.
  • Når der ikke ringes op til et tilbagekald, eller enheden er inaktiv, går den til Light Sleep og sparer dermed strøm.

Planlægger ts;

// Opgaver til i2c, hosting webserver og opslag på thingspeak

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

Trin 4: Kode til aflæsning af temperatur- og fugtighedsværdier

Vi bruger Wire.h bibliotek til at læse temperatur og fugtighedsværdier. Dette bibliotek letter i2c -kommunikation mellem sensoren og master -enheden. 0x44 er I2C -adressen til SHT31.

SHT31 fungerer på en anden måde. Du kan henvise til databladet for det.

Vi bruger 0x2C og 0x06 som henholdsvis MSB og LSB til enkeltskud.

// I2C opgave tilbagekald til ugyldig opgaveI2CCallback ()

{Serial.println ("taskI2CStarted"); usigneret int root [6]; // begynde transmission fra 0x44; Wire.beginTransmission (Addr); // til et enkelt skud transmisstion med høj repeterbarhed bruger vi 0x2C (MSB) og 0x06 (LSB) Wire.write (0x2C); Wire.write (0x06); // afslut transmission Wire.endTransmission (); // anmod om bytes fra 0x44 Wire.beginTransmission (Addr); Wire.endTransmission (); Wire.requestFrom (Addr, 6); hvis (Wire.available () == 6) {// data [0] og data [1] indeholder 16 bit temperatur. root [0] = Wire.read (); root [1] = Wire.read (); // data [2] indeholder 8 bit CRC root [2] = Wire.read (); // data [3] og data [4] indeholder 16 bit fugtighedsrod [3] = Wire.read (); root [4] = Wire.read (); // data [5] består af 8 bit CRC root [5] = Wire.read (); } int temp = (root [0] * 256) + root [1]; // skift MSB med 8 bits tilføj LSB float cTemp = -45,0 + (175,0 * temp /65535,0); float fTemp = (cTemp * 1.8) + 32.0; // skift MSB med 8 bits tilføj LSB til den divider med fuld opløsning og * 100 for procentdel flydefugtighed = (100,0 * ((root [3] * 256,0) + root [4])) /65535,0;

tempC = cTemp;

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

Trin 5: Kode til hosting af en webserver

Kode til hosting af en webserver
Kode til hosting af en webserver
Kode til hosting af en webserver
Kode til hosting af en webserver

Vi har hostet en webserver fra vores enhed på en statisk IP.

  • ESP8266WebServer bibliotek bruges til at være vært for webserveren
  • Først skal vi erklære IP -adresse, Gateway og undernetmaske for at oprette vores statiske IP
  • Angiv nu ssid og adgangskode til dit adgangspunkt.
  • oprette forbindelse til adgangspunktet fra enhver STA -enhed
  • host serveren på port 80, som er en standardport til internetkommunikationsprotokol, Hypertext Transfer Protocol (HTTP)
  • indtast 192.168.1.4 i din webbrowser for intro webside og 192.168.1.4/Værdi til sensor læsning webside

// statisk Ip til 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 til lokal WiFi i STA -tilstand

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

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

// ssid og pass til AP

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

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

ESP8266WebServer -server (80);

ugyldig opsætning {

server.on ("/", onHandleDataRoot);

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

server.onNotFound (onHandleNotFound);

}

ugid taskAPCallback () {

Serial.println ("taskAP startet");

server.handleClient ();

}

void onHandleDataRoot () {server.send (200, "tekst/html", SIDE1); }

void onHandleDataFeed () {

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

void onHandleNotFound () {

String message = "Filen blev ikke fundet / n / n";

meddelelse += "URI:";

besked += server.uri ();

meddelelse += "\ nMetode:";

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

meddelelse += "\ nArgumenter:";

besked += server.args ();

besked += "\ n";

server.send (404, "tekst/almindelig", besked);}

ugyldig forbindelse igen APWiFi () {

WiFi.mode (WIFI_AP_STA);

forsinkelse (100);

WiFi.disconnect ();

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

hvis (status == sand) {

Serial.print ("Indstilling af soft-AP …");

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

hvis (ap == true) {

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

// IPAddress myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

server.begin ();

}

}

Trin 6: Kode til udstationering af data til ting

Kode til udstationering af data til ting
Kode til udstationering af data til ting
Kode til udstationering af data til ting
Kode til udstationering af data til ting
Kode til udstationering af data til ting
Kode til udstationering af data til ting
Kode til udstationering af data til ting
Kode til udstationering af data til ting

Her sender vi sensoraflæsningerne til Thing Speak. følgende trin er nødvendige for at fuldføre denne opgave-

  • Opret din konto i ting tale
  • Opret kanaler og felter til lagring af dine sensordata
  • vi kan hente og sende data fra ESP til thingSpeak og omvendt ved hjælp af GET- og POST-anmodninger til API'en.
  • vi kan sende vores data til ThingSpeak som følger

void taskWiFiCallback () {

WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr += "& field1 ="; postStr += String (fugtig); postStr += "& field2 ="; postStr += String (tempC); postStr += "& field3 ="; postStr += String (tempF); postStr += "\ r / n / r / n"; wifiClient.print ("POST /opdater HTTP /1.1 / n"); wifiClient.print ("Host: api.thingspeak.com / n"); wifiClient.print ("Forbindelse: tæt / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:"+apiKey+"\ n"); wifiClient.print ("Indholdstype: application/x-www-form-urlencoded / n"); wifiClient.print ("Indholdslængde:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }

Trin 7: Overordnet kode

Den samlede kode er tilgængelig i mit github -lager

Kreditter:

  • Arduino JSON: ArduinoJson
  • ESP826WebServer
  • Opgaveplanlægger
  • SHT 31
  • I2C Scan
  • HIH6130 instruktionsvejledning
  • Tråd Arduino
  • NCD.io

Anbefalede: