Turinys:

„Weather Web App“naudojant „Esp8266“: 7 veiksmai
„Weather Web App“naudojant „Esp8266“: 7 veiksmai

Video: „Weather Web App“naudojant „Esp8266“: 7 veiksmai

Video: „Weather Web App“naudojant „Esp8266“: 7 veiksmai
Video: Использование плат Digispark Attiny85 Mini Arduino: Урок 108 2024, Lapkritis
Anonim
„Weather Web App“naudojant „Esp8266“
„Weather Web App“naudojant „Esp8266“

SHT 31 yra temperatūros ir drėgmės jutikliai, pagaminti „Sensirion“. SHT31 užtikrina aukštą tikslumo lygį, apie 2% RH. Drėgmės diapazonas yra nuo 0 iki 100%, o temperatūros diapazonas -nuo -40 iki 125 ° C. Jis yra daug patikimesnis ir greitesnis, nes jutiklio atsako laikas yra 8 sek. Jo funkcionalumas apima patobulintą signalų apdorojimą ir I2C suderinamumą. Jis turi skirtingus veikimo būdus, todėl taupo energiją.

Šioje pamokoje mes sujungėme SHT 31 su „Adafruit Huzzah“lenta. Temperatūros ir drėgmės vertėms skaityti naudojome skydą ESP8266 I2C. Šis adapteris leidžia vartotojui pasiekti visus kaiščius ir siūlo patogią I2C aplinką.

1 veiksmas: reikalinga aparatinė įranga

Reikalinga aparatinė įranga
Reikalinga aparatinė įranga
Reikalinga aparatinė įranga
Reikalinga aparatinė įranga
Reikalinga aparatinė įranga
Reikalinga aparatinė įranga

Techninė įranga, naudojama šiai užduočiai atlikti:

1. SHT31

2. Adafruit Huzzah ESP8266

3. ESP8266 I2C adapteris

4. I2C kabelis

2 žingsnis: aparatinės įrangos jungtys

Techninės įrangos jungtys
Techninės įrangos jungtys
Techninės įrangos jungtys
Techninės įrangos jungtys

Šis žingsnis apima aparatūros prijungimo vadovą. Šiame skyriuje iš esmės paaiškinamos reikalingos laidų jungtys tarp jutiklio ir ESP8266. Sujungimai yra tokie.

  1. SHT31 veikia per I2C. Aukščiau pateiktame paveikslėlyje parodytas ryšys tarp ESP8266 ir SHT31 modulio. Tam naudojame I2C kabelį, arba galime naudoti 4 F – F trumpiklius.
  2. vienas laidas naudojamas Vcc, antrasis - GND ir kiti du - atitinkamai SDA ir SCL.
  3. Pagal I2C adapterį ESP8266 plokštės kaiščiai 2 ir 14 naudojami atitinkamai kaip SDA ir SCL

3 žingsnis: užduočių planavimo kodas

Šioje pamokoje mes atliekame tris operacijas

  • Perskaitykite duomenis iš SHT11 naudodami I2C protokolą
  • priglobti žiniatinklio serverį ir paskelbti jutiklio rodmenis tinklalapyje
  • paskelbti jutiklio rodmenis „ThingSpeak“API

Norėdami tai pasiekti, naudojame „TaskScheduler“biblioteką. Mes suplanavome tris skirtingas užduotis, susijusias su trimis skirtingomis valdymo operacijomis. tai daroma taip

  • 1 užduotis skirta skaityti jutiklio vertę; ši užduotis vykdoma 1 sekundę, kol pasibaigs 10 sekundžių skirtasis laikas.
  • Kai uždavinys 1 pasiekia savo skirtąjį laiką, 2 užduotis įjungta, o 1 užduotis išjungta.
  • Šiame atšaukime prisijungiame prie AP, imami du loginiai kintamieji, kurie pasirūpina perjungimu tarp STA ir AP
  • 2 užduotyje mes talpiname žiniatinklio serverį adresu 192.168.1.4. Ši užduotis atliekama kas 5 sekundes, kol pasibaigia 50 sekundžių skirtasis laikas
  • Kai 2 užduotis pasiekia skirtąjį laiką, 3 užduotis įjungta, o 2 užduotis išjungta.
  • Šiame atšaukime prisijungiame prie STA (vietinio IP)
  • 3 užduotyje mes skelbiame jutiklio rodmenis į debesies „ThingSpeak“API
  • 3 užduotis vykdoma kas penkias sekundes, kol pasibaigia laikas, ty 50 sekundžių
  • Kai „Task3“pasiekia savo skirtąjį laiką, 1 užduotis vėl įjungiama ir 3 užduotis išjungiama.
  • Neskambinus atgaliniam skambučiui arba įrenginiui veikiant nenaudojamas, jis pereina į „Light Sleep“ir taip taupo energiją.

Planuotojas ts;

// Užduotys, skirtos „i2c“, prieglobos žiniatinklio serveriui ir skelbimui „thingspeak“

Užduotis tI2C (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL ir taskI2CDisable); Užduotis tAP (5*TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL ir taskAPDisable); Užduotis tWiFi (5* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL ir & taskWiFiDisable); // užduočių laikas tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // įgalinti I2C užduotį tI2C.enable ();

4 žingsnis: Temperatūros ir drėgmės verčių skaitymo kodas

Temperatūros ir drėgmės vertėms skaityti naudojame „Wire.h“biblioteką. Ši biblioteka palengvina „i2c“ryšį tarp jutiklio ir pagrindinio įrenginio. 0x44 yra SHT31 I2C adresas.

SHT31 veikia kitu režimu. Tam galite kreiptis į duomenų lapą.

Mes naudojame 0x2C ir 0x06 kaip MSB ir LSB atitinkamai vieno kadro veikimui.

// I2C užduoties atšaukimo negaliojanti užduotisI2CCallback ()

{Serial.println ("taskI2CStarted"); unsigned int root [6]; // pradėti perdavimą nuo 0x44; Wire.beginTransmission (Addr); // vieno kadro perdavimui su dideliu pakartojamumu naudojame 0x2C (MSB) ir 0x06 (LSB) Wire.write (0x2C); Wire.write (0x06); // pabaigos perdavimas Wire.endTransmission (); // prašyti baitų iš 0x44 Wire.beginTransmission (Addr); Wire.endTransmission (); Wire.requestFrom (Addr, 6); jei (Wire.available () == 6) {// duomenys [0] ir duomenys [1] yra 16 bitų temperatūros. šaknis [0] = Wire.read (); šaknis [1] = Wire.read (); // duomenyse [2] yra 8 bitai CRC šaknies [2] = Wire.read (); // duomenys [3] ir duomenys [4] yra 16 bitų drėgmės šaknis [3] = Wire.read (); šaknis [4] = Wire.read (); // duomenys [5] susideda iš 8 bitų CRC šaknies [5] = Wire.read (); } int temp = (šaknis [0] * 256) + šaknis [1]; // perkelti MSB 8 bitais pridėti LSB plūdę cTemp = -45.0 + (175.0 * temp /65535.0); plūdė fTemp = (cTemp * 1.8) + 32.0; // perkelkite MSB 8 bitais, pridėkite prie jo LSB, skirkite visą skiriamąją gebą ir * 100, jei plūdės drėgmė yra procentinė = (100,0 * ((šaknis [3] * 256,0) + šaknis [4])) /65535.0;

tempC = cTemp;

tempF = fTemp; drėgna = drėgmė; Serial.print ("Temperatūra C: / t"); Serial.println (Styga (cTemp, 1)); Serial.print ("Temperatūra F: / t"); Serial.println (Styga (fTemp, 1)); Serial.print („Drėgmė: / t“); Serial.println (Styga (drėgmė, 1)); }

5 veiksmas: žiniatinklio serverio prieglobos kodas

Tinklalapio serverio prieglobos kodas
Tinklalapio serverio prieglobos kodas
Tinklalapio serverio prieglobos kodas
Tinklalapio serverio prieglobos kodas

Interneto serverį iš savo įrenginio priglobėme statiniu IP.

  • ESP8266WebServer biblioteka naudojama žiniatinklio serveriui priglobti
  • Pirmiausia turime deklaruoti IP adresą, šliuzą ir potinklio kaukę, kad sukurtume savo statinį IP
  • Dabar paskelbkite savo prieigos taško ssid ir slaptažodį.
  • prisijungti prie prieigos taško iš bet kurio STA įrenginio
  • priglobti serverį 80 prievade, kuris yra numatytasis interneto ryšio protokolo, hiperteksto perdavimo protokolo (HTTP) prievadas
  • įveskite 192.168.1.4 žiniatinklio naršyklėje, skirtą įvadiniam tinklalapiui, ir 192.168.1.4/Verta, skirta jutiklio skaitymui

// statinis IP, skirtas AP

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

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

„IPAddress ap_subnet“(255, 255, 255, 0); // ssid ir AP vietiniam „WiFi“ryšiui STA režimu

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

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

// ssid ir pass AP

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

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

ESP8266WebServer serveris (80);

void setup {

server.on ("/", onHandleDataRoot);

server.on ("/Vertė", onHandleDataFeed);

server.onNotFound (onHandleNotFound);

}

void taskAPCallback () {

Serial.println ("taskAP paleistas");

server.handleClient ();

}

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

void onHandleDataFeed () {

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

void onHandleNotFound () {

String message = "Failas nerastas / n / n";

pranešimas += "URI:";

pranešimas += serveris.uri ();

pranešimas += "\ nMetodas:";

pranešimas += (serveris.metodas () == HTTP_GET)? "GET": "POST";

message += "\ nArgumentai:";

pranešimas += serveris.args ();

pranešimas += "\ n";

server.send (404, "tekstas/paprastas", pranešimas);}

void reconnectAPWiFi () {

„WiFi.mode“(WIFI_AP_STA);

vėlavimas (100);

„WiFi.disconnect“();

loginė būsena = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

if (status == true) {

Serial.print („Soft-AP nustatymas …“);

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

jei (ap == tiesa) {

Serial.print ("prijungtas prie: / t");

// IPAddress myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

server.begin ();

}

}

6 veiksmas: duomenų paskelbimo „Thing Speak“kodas

Duomenų paskelbimo „Thing Speak“kodas
Duomenų paskelbimo „Thing Speak“kodas
Duomenų paskelbimo „Thing Speak“kodas
Duomenų paskelbimo „Thing Speak“kodas
Duomenų paskelbimo „Thing Speak“kodas
Duomenų paskelbimo „Thing Speak“kodas
Duomenų paskelbimo „Thing Speak“kodas
Duomenų paskelbimo „Thing Speak“kodas

Čia mes skelbiame jutiklio rodmenis „Thing Speak“. norint atlikti šią užduotį, reikia atlikti šiuos veiksmus-

  • Susikurkite savo paskyrą
  • Sukurkite kanalus ir laukus jutiklių duomenims saugoti
  • mes galime gauti ir paskelbti duomenis iš ESP į „thingSpeak“ir atvirkščiai, naudodami GET ir POST užklausas į API.
  • mes galime paskelbti savo duomenis „ThingSpeak“taip

void taskWiFiCallback () {

WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr += "& field1 ="; postStr += Styga (drėgna); postStr += "& field2 ="; postStr += Styga (tempC); postStr += "& field3 ="; postStr += Styga (tempF); postStr += "\ r / n / r / n"; wifiClient.print ("POST /atnaujinti HTTP /1.1 / n"); wifiClient.print ("Priegloba: api.thingspeak.com / n"); wifiClient.print ("Ryšys: uždaryti / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:"+apiKey+"\ n"); wifiClient.print ("Turinio tipas: application/x-www-form-urlencoded / n"); wifiClient.print ("Turinio ilgis:"); „wifiClient.print“(postStr.length ()); „wifiClient.print“(„\ n / n“); wifiClient.print (postStr); } wifiClient.stop (); }

7 žingsnis: bendras kodas

Bendras kodas yra mano „github“saugykloje

Kreditai:

  • Arduino JSON: ArduinoJson
  • ESP826WebServer
  • Darbų planuotojas
  • SHT 31
  • I2C nuskaitymas
  • HIH6130 instrukcijų pamoka
  • Viela Arduino
  • NCD.io

Rekomenduojamas: