Բովանդակություն:

Եղանակի վեբ ծրագիր ՝ օգտագործելով Esp8266: 7 քայլ
Եղանակի վեբ ծրագիր ՝ օգտագործելով Esp8266: 7 քայլ

Video: Եղանակի վեբ ծրագիր ՝ օգտագործելով Esp8266: 7 քայլ

Video: Եղանակի վեբ ծրագիր ՝ օգտագործելով Esp8266: 7 քայլ
Video: ESP8266 ESP01 DHT11 ջերմաստիճանի խոնավության ցուցիչի մոդուլի ծրագրավորում | RemoteXY | FLProg 2024, Նոյեմբեր
Anonim
Եղանակի վեբ ծրագիր ՝ օգտագործելով Esp8266- ը
Եղանակի վեբ ծրագիր ՝ օգտագործելով Esp8266- ը

SHT 31- ը ջերմաստիճանի և խոնավության տվիչներ է, որը պատրաստվել է Sensirion- ի կողմից: SHT31- ը ապահովում է բարձր ճշգրտություն ± 2% RH- ի սահմաններում: Խոնավության միջակայքը 0 -ից 100% է, իսկ ջերմաստիճանը ՝ -40 -ից 125 ° C: Այն շատ ավելի հուսալի և արագ է ՝ 8 վրկ սենսորային արձագանքման ժամանակ: Դրա ֆունկցիոնալությունը ներառում է ազդանշանի ուժեղացված մշակում և I2C համատեղելիություն: Այն ունի գործունեության տարբեր եղանակներ, ինչը դարձնում է էներգաարդյունավետ:

Այս ձեռնարկում մենք SHT 31 -ին միացրել ենք Adafruit Huzzah տախտակը: Peratերմաստիճանի եւ խոնավության արժեքները կարդալու համար մենք օգտագործել ենք ESP8266 I2C վահանը: Այս ադապտորը բոլոր կապումներն օգտվողին հասանելի է դարձնում և առաջարկում է օգտագործողի համար հարմար I2C միջավայր:

Քայլ 1: Պահանջվում է սարքավորում

Պահանջվում է սարքավորում
Պահանջվում է սարքավորում
Պահանջվում է սարքավորում
Պահանջվում է սարքավորում
Պահանջվում է սարքավորում
Պահանջվում է սարքավորում

Այս խնդիրը կատարելու համար օգտագործվող սարքավորումները.

1. SHT31

2. Adafruit Huzzah ESP8266

3. ESP8266 I2C ադապտեր

4. I2C մալուխ

Քայլ 2: Սարքավորման միացումներ

Սարքավորումների միացումներ
Սարքավորումների միացումներ
Սարքավորումների միացումներ
Սարքավորումների միացումներ

Այս քայլը ներառում է ապարատային կապի ուղեցույց: Այս բաժինը հիմնականում բացատրում է տվիչի և ESP8266- ի միջև պահանջվող էլեկտրագծերի միացումները: Կապերը հետեւյալն են.

  1. SHT31- ն աշխատում է I2C- ով: Վերոնշյալ պատկերը ցույց է տալիս ESP8266- ի և SHT31 մոդուլի միջև կապը: Մենք դրա համար օգտագործում ենք I2C մալուխ, կամ կարող ենք օգտագործել 4 F- ից F թռիչքային լարեր:
  2. մեկ մետաղալարն օգտագործվում է Vcc- ի համար, երկրորդը `GND- ի, իսկ մյուսը` համապատասխանաբար SDA- ի և SCL- ի համար:
  3. Ըստ I2C ադապտերի, ESP8266 տախտակի pin2 և pin 14 օգտագործվում են համապատասխանաբար որպես SDA և SCL

Քայլ 3. Առաջադրանքների պլանավորման ծածկագիր

Այս ձեռնարկում մենք կատարում ենք երեք գործողություն

  • Կարդացեք SHT11- ի տվյալները `օգտագործելով I2C արձանագրությունը
  • ընդունեք վեբ սերվերը և տեղադրեք սենսորի ընթերցումը վեբ էջում
  • տեղադրեք սենսորի ընթերցումները ThingSpeak API- ին

Դրան հասնելու համար մենք օգտագործում ենք TaskScheduler գրադարանը: Մենք նախատեսել ենք երեք տարբեր առաջադրանքներ, որոնք վերաբերում են վերահսկման երեք տարբեր գործողություններին: սա արվում է հետևյալ կերպ

  • Առաջադրանք 1 -ը սենսորի արժեքի ընթերցման համար է: Այս առաջադրանքը կատարվում է 1 վայրկյան, մինչև այն հասնում է 10 վրկ:
  • Երբ Task1- ը հասնում է իր ժամկետի ավարտին, 2 -ը միացված է, և Task1- ը անջատված է:
  • Այս հետադարձ կապում մենք միանում ենք AP- ին: Երկու բուլո փոփոխական են ընդունվում `STA- ի և AP- ի միջև անցումը հոգալու համար:
  • Առաջադրանք 2 -ում մենք հյուրընկալում ենք վեբ սերվերին ՝ 192.168.1.4. Այս առաջադրանքը կատարվում է յուրաքանչյուր 5 վայրկյանում, մինչև այն հասնի իր ժամանակի ընդմիջմանը, որը 50 վրկ է
  • Երբ առաջադրանք 2 -ի ժամանակը սպառվում է, առաջադրանք 3 -ը միացված է, և առաջադրանք 2 -ը անջատված է:
  • Այս հետադարձ կապում մենք միանում ենք STA- ին (տեղական IP)
  • 3 -րդ առաջադրանքում մենք տեղադրում ենք սենսորի ընթերցումը ամպային ThingSpeak API- ում
  • 3 -րդ առաջադրանքն ընթանում է յուրաքանչյուր հինգ վայրկյանում, մինչև այն հասնի իր ժամանակի ավարտին, այսինքն `50 վրկ
  • Երբ Task3- ը հասնում է իր ժամկետի ավարտին, Task 1 -ը կրկին միացված է, և Task3- ը անջատված է:
  • Երբ հետադարձ կապ չի կանչվում կամ սարքն անգործուն է, այն անցնում է Light Sleep- ին ՝ այդպիսով խնայելով էներգիան:

Ժամանակացույց ts;

// Առաջադրանքներ i2c- ի, վեբ սերվերի հոստինգի և հաղորդագրությունների տեղադրման համար

Առաջադրանք tI2C (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CD անջատելի); Առաջադրանք tAP (5*TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL, & taskAPDisable); Առաջադրանք tWiFi (5* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable); // առաջադրանքի առաջադրանքների tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // միացնել I2C առաջադրանքը tI2C.enable ();

Քայլ 4. Codeերմաստիճանի և խոնավության արժեքների ընթերցման ծածկագիր

Մենք օգտագործում ենք Wire.h գրադարանը `ջերմաստիճանի և խոնավության արժեքները կարդալու համար: Այս գրադարանը հեշտացնում է i2c հաղորդակցությունը սենսորի և հիմնական սարքի միջև: 0x44- ը SHT31- ի I2C հասցեն է:

SHT31- ը գործում է այլ ռեժիմով: Դրա համար կարող եք անդրադառնալ տվյալների թերթիկին:

Մենք օգտագործում ենք 0x2C և 0x06 համապատասխանաբար որպես MSB և LSB մեկ կրակոցով աշխատելու համար:

// I2C առաջադրանքի հետադարձ կապ void taskI2CCallback ()

{Serial.println ("taskI2CStarted"); անստորագիր int արմատ [6]; // սկսել փոխանցումը 0x44- ից; Wire.beginTransmission (Addr); // մեկ կրակոց փոխանցման բարձր կրկնվողությամբ մենք օգտագործում ենք 0x2C (MSB) և 0x06 (LSB) Wire.write (0x2C); Wire.write (0x06); // ավարտել փոխանցումը Wire.endTransmission (); // պահանջել բայթեր 0x44 Wire.beginTransmission- ից (Addr); Wire.endTransmission (); Հաղորդալար. Խնդրում ենք (Addr, 6); եթե (Wire.available () == 6) {// տվյալները [0] և տվյալները [1] պարունակում են 16 բիթ ջերմաստիճան: արմատ [0] = Wire.read (); արմատ [1] = Wire.read (); // տվյալները [2] պարունակում են 8 բիթ CRC արմատ [2] = Wire.read (); // տվյալները [3] և տվյալները [4] պարունակում են 16 բիթ խոնավության արմատ [3] = Wire.read (); արմատ [4] = Wire.read (); // տվյալները [5] բաղկացած են 8 բիթանոց CRC արմատից [5] = Wire.read (); } int temp = (արմատ [0] * 256) + արմատ [1]; // տեղափոխել MSB- ն 8 բիթով ավելացնել LSB float cTemp = -45.0 + (175.0 * temp /65535.0); float fTemp = (cTemp * 1.8) + 32.0; // տեղափոխել MSB- ն 8 բիթով, ավելացնել LSB- ն դրան բաժանել ամբողջական լուծաչափով և * 100 բոցի խոնավության տոկոսով = (100.0 * ((արմատ [3] * 256.0) + արմատ [4])) /65535.0;

tempC = cTemp;

tempF = fTemp; խոնավ = խոնավություն; Serial.print («Cերմաստիճանը C: / t»); Serial.println (Լար (cTemp, 1)); Serial.print («Fերմաստիճանը F: / t»); Serial.println (Լարային (fTemp, 1)); Serial.print ("Խոնավություն: / t"); Serial.println (Լար (խոնավություն, 1)); }

Քայլ 5. Վեբ սերվեր հյուրընկալելու ծածկագիր

Վեբ սերվեր հյուրընկալելու ծածկագիր
Վեբ սերվեր հյուրընկալելու ծածկագիր
Վեբ սերվեր հյուրընկալելու ծածկագիր
Վեբ սերվեր հյուրընկալելու ծածկագիր

Մենք հյուրընկալել ենք վեբ սերվեր մեր սարքից ստատիկ IP հասցեով:

  • ESP8266WebServer գրադարանը օգտագործվում է վեբ սերվերը հյուրընկալելու համար
  • Սկզբում մենք պետք է հայտարարենք IP հասցե, Gateway և ենթացանցի դիմակ `մեր ստատիկ IP- ն ստեղծելու համար
  • Այժմ հայտարարեք ssid և գաղտնաբառ ձեր մուտքի կետի համար:
  • միացեք մուտքի կետին ցանկացած STA սարքից
  • հյուրընկալել սերվերը 80 նավահանգստում, որը ինտերնետ կապի արձանագրության կանխադրված նավահանգիստ է, Hypertext Transfer Protocol (HTTP)
  • մուտքի վեբ էջի համար մուտքագրեք 192.168.1.4 ձեր վեբ դիտարկիչում և 192.168.1.4/ արժեք սենսորների ընթերցման վեբ էջի համար

// ստատիկ Ip AP- ի համար

IP հասցե ap_local_IP (192, 168, 1, 4);

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

IPAddress ap_subnet (255, 255, 255, 0); // ssid և AP STA ռեժիմում տեղական WiFi- ի համար

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

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

// ssid և փոխանցեք AP- ի համար

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

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

ESP8266WebServer սերվեր (80);

դատարկ կարգավորում {

server.on ("/", onHandleDataRoot);

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

server.onNotFound (onHandleNotFound);

}

void taskAPCallback () {

Serial.println («taskAP- ը սկսվեց»);

server.handleClient ();

}

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

void onHandleDataFeed () {

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

void onHandleNotFound () {

Լարային հաղորդագրություն = "Ֆայլը չգտնվեց / n / n";

հաղորդագրություն += "URI:";

հաղորդագրություն += server.uri ();

հաղորդագրություն += "\ n Մեթոդ.";

հաղորդագրություն += (server.method () == HTTP_GET)? "GET": "POST";

հաղորդագրություն += "\ n Փաստարկներ.";

հաղորդագրություն += server.args ();

հաղորդագրություն += "\ n";

server.send (404, «տեքստ/պարզ», հաղորդագրություն);}

դատարկ վերամիացում APWiFi () {

WiFi.mode (WIFI_AP_STA);

ուշացում (100);

WiFi.d անջատել ();

բուլյան կարգավիճակ = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

եթե (կարգավիճակը == ճշմարիտ) {

Serial.print ("Soft-AP … կարգավորելը");

բուլյան ap = WiFi.softAP (APssid, APpass);

եթե (ap == ճշմարիտ) {

Serial.print ("կապված է ՝ / t");

// IPAddress myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

server.begin ();

}

}

Քայլ 6. Խոսքի վրա տվյալների տեղադրման կոդ

Խոսքի վրա տվյալներ տեղադրելու կոդ
Խոսքի վրա տվյալներ տեղադրելու կոդ
Խոսքի վրա տվյալներ տեղադրելու կոդ
Խոսքի վրա տվյալներ տեղադրելու կոդ
Խոսքի վրա տվյալներ տեղադրելու կոդ
Խոսքի վրա տվյալներ տեղադրելու կոդ
Խոսքի վրա տվյալներ տեղադրելու կոդ
Խոսքի վրա տվյալներ տեղադրելու կոդ

Այստեղ մենք տեղադրում ենք սենսորային ընթերցումները Thing Speak- ում: Այս առաջադրանքը կատարելու համար անհրաժեշտ են հետևյալ քայլերը.

  • Ստեղծեք ձեր հաշիվը խոսքի մեջ
  • Ստեղծեք ալիքներ և դաշտեր ՝ ձեր սենսորային տվյալները պահելու համար
  • մենք կարող ենք ստանալ և տեղադրել տվյալները ESP- ից thingSpeak- ին և հակառակը ՝ օգտագործելով GET և POST հարցումները api- ին:
  • մենք կարող ենք մեր տվյալները ThingSpeak- ին տեղադրել հետևյալ կերպ

void taskWiFiCallback () {

WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr += "& դաշտ 1 ="; postStr += լարային (խոնավ); postStr += "& դաշտ 2 ="; postStr += Լար (tempC); postStr += "& field3 ="; postStr += Լար (tempF); postStr += "\ r / n / r / n"; wifiClient.print ("POST /update HTTP /1.1 / n"); wifiClient.print ("Հաղորդավար` api.thingspeak.com / n "); wifiClient.print ("Միացում. փակել / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:"+apiKey+"\ n"); wifiClient.print ("Content-Type: application/x-www-form-urlencoded / n"); wifiClient.print ("Բովանդակություն-երկարություն."); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }

Քայլ 7: Ընդհանուր ծածկագիր

Ընդհանուր ծածկագիրը հասանելի է իմ github պահոցում

Վարկեր:

  • Arduino JSON: ArduinoJson
  • ESP826WebServer
  • Առաջադրանքների ժամանակացույց
  • SHT 31
  • I2C սկան
  • HIH6130 ուսուցողական ձեռնարկ
  • Լար Arduino
  • NCD.io

Խորհուրդ ենք տալիս: