INHOUDSOPGAWE:

Weer -webprogram met behulp van Esp8266: 7 stappe
Weer -webprogram met behulp van Esp8266: 7 stappe

Video: Weer -webprogram met behulp van Esp8266: 7 stappe

Video: Weer -webprogram met behulp van Esp8266: 7 stappe
Video: Введение в плату разработки NodeMCU ESP8266 WiFi с примером HTTP-клиента 2024, November
Anonim
Weer -webprogram met behulp van Esp8266
Weer -webprogram met behulp van Esp8266

SHT 31 is 'n temperatuur- en humiditeitsensor gemaak deur Sensirion. Die SHT31 bied 'n hoë akkuraatheid rondom ± 2% RH. Die humiditeitsbereik is tussen 0 en 100% en die temperatuurbereik is tussen -40 en 125 ° C. Dit is baie betroubaarder en vinniger met 8 sekondes sensorreaksietyd. Die funksie daarvan bevat verbeterde seinverwerking en I2C -versoenbaarheid. Dit het verskillende werkswyses wat dit energie -doeltreffend maak.

In hierdie tutoriaal het ons SHT 31 met die Adafruit Huzzah -bord gekoppel. Vir die lees van temperatuur- en humiditeitswaardes het ons die ESP8266 I2C -skild gebruik. Hierdie adapter maak alle penne toeganklik vir die gebruiker en bied gebruikersvriendelike I2C-omgewing.

Stap 1: hardeware benodig

Hardeware benodig
Hardeware benodig
Hardeware benodig
Hardeware benodig
Hardeware benodig
Hardeware benodig

Hardeware wat gebruik word om hierdie taak te voltooi:

1. SHT31

2. Adafruit Huzzah ESP8266

3. ESP8266 I2C -adapter

4. I2C -kabel

Stap 2: Hardewareverbindings

Hardewareverbindings
Hardewareverbindings
Hardewareverbindings
Hardewareverbindings

Hierdie stap bevat die gids vir die aansluiting van hardeware. Hierdie afdeling verduidelik basies die bedradingskoppelings wat tussen die sensor en die ESP8266 benodig word. Die verbindings is soos volg.

  1. Die SHT31 werk oor I2C. Bogenoemde prent toon die verband tussen die ESP8266- en SHT31 -module. Ons gebruik 'n I2C -kabel daarvoor, óf ons kan 4 F tot F springdrade gebruik.
  2. een draad word gebruik vir Vcc, die tweede draad vir GND en ander twee na SDA en SCL onderskeidelik.
  3. Volgens die I2C -adapter word pin2 en pen 14 van 'n ESP8266 -bord onderskeidelik as SDA en SCL gebruik

Stap 3: Kode vir taakskedulering

In hierdie tutoriaal voer ons drie bewerkings uit

  • Lees die data van SHT11 met behulp van I2C -protokol
  • gasheer vir die webbediener en plaas die sensorlesing op die webblad
  • plaas die sensorlesings op ThingSpeak API

Om dit te bereik, gebruik ons TaskScheduler -biblioteek. Ons het drie verskillende take geskeduleer wat verwys na drie verskillende beheerbedrywighede. dit word soos volg gedoen

  • Taak 1 is vir die lees van die sensorwaarde wat hierdie taak vir 1 sekonde uitvoer totdat dit 'n time -out van 10 sekondes bereik.
  • As die taak1 sy tydsduur bereik, is taak 2 geaktiveer en taak 1 is gedeaktiveer.
  • Ons maak verbinding met AP in hierdie terugbel. Twee booleaanse veranderlikes word geneem om te sorg vir die skakel tussen STA en AP
  • In taak 2 bied ons 'n webbediener aan by 192.168.1.4. Hierdie taak duur elke 5 sekondes totdat dit sy tydsduur bereik, wat 50 sekondes is
  • As taak 2 se tydsduur bereik word, is taak 3 geaktiveer en taak 2 is gedeaktiveer.
  • Ons skakel met STA (plaaslike IP) in hierdie terugbel
  • In taak 3 plaas ons die sensorlesing na die ThingSpeak API in die wolk
  • Taak 3 duur elke vyf sekondes totdat dit sy tydsduur bereik het, dit wil sê 50 sekondes
  • As die Taak3 sy tydsbeperking bereik, word Taak 1 weer aangeskakel en Taak3 is gedeaktiveer.
  • As geen terugbel gebel word nie of die toestel nie gebruik word nie, gaan dit na Light Sleep en bespaar dus krag.

Skeduler ts;

// Take vir i2c, die aanbied van 'n webbediener en plasing op thingspeak

Taak tI2C (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable); Taak tAP (5*TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL, & taskAPDisable); Taak tWiFi (5* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable); // time -out vir take tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // aktiveer I2C taak tI2C.enable ();

Stap 4: Kode vir die lees van temperatuur- en humiditeitswaardes

Ons gebruik die Wire.h -biblioteek om die temperatuur- en humiditeitswaardes te lees. Hierdie biblioteek vergemaklik i2c -kommunikasie tussen die sensor en die meesterapparaat. 0x44 is die I2C -adres vir SHT31.

SHT31 werk in 'n ander werkswyse. U kan die datablad daarvoor raadpleeg.

Ons gebruik 0x2C en 0x06 as MSB en LSB onderskeidelik vir 'n enkele opname.

// I2C taak terugbel leegte taak I2CCallback ()

{Serial.println ("taskI2CStarted"); ongetekende int root [6]; // begin oordrag vanaf 0x44; Wire.beginTransmission (Addr); // vir 'n eenmalige opname met 'n hoë herhaalbaarheid gebruik ons 0x2C (MSB) en 0x06 (LSB) Wire.write (0x2C); Wire.write (0x06); // beëindig transmissie Wire.endTransmission (); // versoek grepe van 0x44 Wire.beginTransmission (Addr); Wire.endTransmission (); Wire.requestFrom (Addr, 6); as (Wire.available () == 6) {// data [0] en data [1] 16 bit temperatuur bevat. root [0] = Wire.read (); root [1] = Wire.read (); // data [2] bevat 8 bis CRC -wortel [2] = Wire.read (); // data [3] en data [4] bevat 16 bis humiditeitswortel [3] = Wire.read (); root [4] = Wire.read (); // data [5] bestaan uit 8 -bits CRC -wortel [5] = Wire.read (); } int temp = (wortel [0] * 256) + wortel [1]; // skuif MSB met 8 bisse voeg LSB float toe cTemp = -45.0 + (175.0 * temp /65535.0); float fTemp = (cTemp * 1.8) + 32.0; // skuif die MSB met 8 bisse, voeg LSB by, verdeel dit met volle resolusie en * 100 vir persentasie vlotvogtigheid = (100.0 * ((wortel [3] * 256.0) + wortel [4])) /65535.0;

tempC = cTemp;

tempF = fTemp; humid = humiditeit; Serial.print ("Temperatuur in C: / t"); Serial.println (string (cTemp, 1)); Serial.print ("Temperatuur in F: / t"); Serial.println (string (fTemp, 1)); Serial.print ("Humiditeit: / t"); Serial.println (string (humiditeit, 1)); }

Stap 5: Kode vir die aanbied van 'n webbediener

Kode vir die aanbied van 'n webbediener
Kode vir die aanbied van 'n webbediener
Kode vir die aanbied van 'n webbediener
Kode vir die aanbied van 'n webbediener

Ons het 'n webbediener vanaf ons toestel op 'n statiese IP gehuisves.

  • ESP8266WebServer -biblioteek word gebruik om die webbediener te huisves
  • Eerstens moet ons IP -adres, gateway en subnetmasker verklaar om ons statiese IP te skep
  • Verklaar nou ssid en wagwoord vir u toegangspunt.
  • maak verbinding met die toegangspunt vanaf enige STA -toestel
  • huisves die bediener op poort 80, wat 'n standaardpoort is vir internetkommunikasieprotokol, Hypertext Transfer Protocol (HTTP)
  • voer 192.168.1.4 in u webblaaier in vir intro -webbladsy en 192.168.1.4/Waarde vir sensorleeswebblad

// statiese IP vir AP

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

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

IPAddress ap_subnet (255, 255, 255, 0); // ssid en AP vir plaaslike WiFi in STA -modus

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

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

// ssid en slaag vir AP

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

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

ESP8266WebServer -bediener (80);

ongeldige opstelling {

server.on ("/", onHandleDataRoot);

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

server.onNotFound (onHandleNotFound);

}

ongeldige taakAPCallback () {

Serial.println ("taskAP begin");

server.handleClient ();

}

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

void onHandleDataFeed () {

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

void onHandleNotFound () {

String -boodskap = "Lêer nie gevind nie / n / n";

boodskap += "URI:";

boodskap += server.uri ();

boodskap += "\ nMetode:";

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

boodskap += "\ nArgumente:";

boodskap += server.args ();

boodskap += "\ n";

server.send (404, "text/plain", boodskap);}

ongeldig herkoppel APWiFi () {

WiFi.mode (WIFI_AP_STA);

vertraging (100);

WiFi. Ontkoppel ();

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

as (status == waar) {

Serial.print ("Instelling van sagte-AP …");

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

as (ap == waar) {

Serial.print ("gekoppel aan: / t");

// IPAddress myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

bediener.begin ();

}

}

Stap 6: Kode vir die plaas van data in die saak

Kode om data na iets te plaas, praat
Kode om data na iets te plaas, praat
Kode om data na iets te plaas, praat
Kode om data na iets te plaas, praat
Kode om data na iets te plaas, praat
Kode om data na iets te plaas, praat
Kode om data na iets te plaas, praat
Kode om data na iets te plaas, praat

Hier plaas ons die sensorlesings op Thing Speak. die volgende stappe is nodig om hierdie taak te voltooi-

  • Skep u rekening in ding praat
  • Skep kanale en velde om u sensordata te stoor
  • ons kan die data van ESP na thingSpeak kry en dit plaas met behulp van GET- en POST-versoeke na die api.
  • ons kan ons data soos volg aan ThingSpeak plaas

void taskWiFiCallback () {

WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr += "& field1 ="; postStr += String (humid); 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 ("Gasheer: api.thingspeak.com / n"); wifiClient.print ("Verbinding: sluit / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:"+apiKey+"\ n"); wifiClient.print ("Inhoudstipe: toepassing/x-www-vorm-urlencoded / n"); wifiClient.print ("Inhoudlengte:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }

Stap 7: Algehele kode

Die algehele kode is beskikbaar in my github -bewaarplek

Krediete:

  • Arduino JSON: ArduinoJson
  • ESP826WebServer
  • Taak skeduleerder
  • SHT 31
  • I2C -skandering
  • HIH6130 instruksies handleiding
  • Draad Arduino
  • NCD.io

Aanbeveel: