Სარჩევი:

ამინდის ვებ აპლიკაცია Esp8266 გამოყენებით: 7 ნაბიჯი
ამინდის ვებ აპლიკაცია Esp8266 გამოყენებით: 7 ნაბიჯი

ვიდეო: ამინდის ვებ აპლიკაცია Esp8266 გამოყენებით: 7 ნაბიჯი

ვიდეო: ამინდის ვებ აპლიკაცია Esp8266 გამოყენებით: 7 ნაბიჯი
ვიდეო: ამინდის აპლიკაცია FETCH API-ის დახმარებით 2024, მაისი
Anonim
ამინდის ვებ აპლიკაცია Esp8266– ის გამოყენებით
ამინდის ვებ აპლიკაცია Esp8266– ის გამოყენებით

SHT 31 არის ტემპერატურისა და ტენიანობის სენსორები, რომლებიც დამზადებულია სენსირიონის მიერ. SHT31 უზრუნველყოფს მაღალი დონის სიზუსტეს დაახლოებით% 2% RH. მისი ტენიანობის დიაპაზონი 0 -დან 100% -მდეა, ხოლო ტემპერატურა -40 -დან 125 ° C- მდე. ის ბევრად უფრო საიმედო და სწრაფია 8 წმ სენსორის რეაგირების დროით. მისი ფუნქციონირება მოიცავს სიგნალის გაძლიერებულ დამუშავებას და I2C თავსებადობას. მას აქვს მუშაობის სხვადასხვა რეჟიმი, რაც მას ენერგოეფექტურს ხდის.

ამ გაკვეთილში ჩვენ დავკავშირდით SHT 31 Adafruit Huzzah დაფასთან. ტემპერატურისა და ტენიანობის მნიშვნელობების წასაკითხად ჩვენ გამოვიყენეთ 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 to F jumper მავთულები.
  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 მიაღწევს თავის ვადას, ამოცანა 1 კვლავ ჩართულია და Task3 გამორთულია.
  • როდესაც გამოძახება არ არის დარეკილი ან მოწყობილობა უმოქმედოა, ის გადადის სინათლის ძილზე, რითაც დაზოგავს ენერგიას.

განრიგი ც;

// ამოცანები 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. ჩართვა ();

ნაბიჯი 4: ტემპერატურისა და ტენიანობის მნიშვნელობების კითხვის კოდი

ჩვენ ვიყენებთ Wire.h ბიბლიოთეკას ტემპერატურისა და ტენიანობის მნიშვნელობების წასაკითხად. ეს ბიბლიოთეკა ხელს უწყობს სენსორსა და სამაგისტრო მოწყობილობას შორის i2c კომუნიკაციას. 0x44 არის I2C მისამართი SHT31– ისთვის.

SHT31 მუშაობს სხვადასხვა რეჟიმში. ამისათვის შეგიძლიათ მიმართოთ მონაცემთა ცხრილს.

ჩვენ ვიყენებთ 0x2C და 0x06 როგორც MSB და LSB შესაბამისად ერთჯერადი გასროლისთვის.

// I2C ამოცანის გამოძახება void taskI2CCallback ()

{Serial.println ("taskI2CStarted"); ხელმოუწერელი int root [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); if (Wire.available () == 6) {// მონაცემები [0] და მონაცემები [1] შეიცავს 16 ბიტიან ტემპერატურას. root [0] = Wire.read (); root [1] = Wire.read (); // მონაცემები [2] შეიცავს 8 ბიტიან CRC ფესვს [2] = Wire.read (); // მონაცემები [3] და მონაცემები [4] შეიცავს 16 ბიტიან ტენიანობის ფესვს [3] = Wire.read (); root [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 % float ტენიანობით = (100.0 * ((ფესვი [3] * 256.0) + ფესვი [4])) /65535.0;

tempC = cTemp;

tempF = fTemp; ტენიანი = ტენიანობა; Serial.print ("ტემპერატურა C: / t"); Serial.println (სიმებიანი (cTemp, 1)); Serial.print ("ტემპერატურა F: / t"); Serial.println (სიმებიანი (fTemp, 1)); Serial.print ("ტენიანობა: / t"); Serial.println (სიმებიანი (ტენიანობა, 1)); }

ნაბიჯი 5: ვებ სერვერის მასპინძლობის კოდი

ვებ სერვერის მასპინძლობის კოდი
ვებ სერვერის მასპინძლობის კოდი
ვებ სერვერის მასპინძლობის კოდი
ვებ სერვერის მასპინძლობის კოდი

ჩვენ მასპინძლობდა ვებ სერვერს ჩვენი მოწყობილობიდან სტატიკურ IP– ზე.

  • ESP8266WebServer ბიბლიოთეკა გამოიყენება ვებ სერვერის მასპინძლობისთვის
  • პირველ რიგში ჩვენ უნდა გამოვაცხადოთ IP მისამართი, Gateway და ქვექსელის ნიღაბი ჩვენი სტატიკური IP შესაქმნელად
  • ახლა გამოაცხადეთ ssid და პაროლი თქვენი წვდომის წერტილისთვის.
  • დაუკავშირდით წვდომის წერტილს ნებისმიერი STA მოწყობილობიდან
  • მასპინძლობს სერვერს 80 პორტზე, რომელიც არის ნაგულისხმევი პორტი ინტერნეტ კომუნიკაციის პროტოკოლისთვის, ჰიპერტექსტის გადაცემის პროტოკოლი (HTTP)
  • შეიყვანეთ 192.168.1.4 თქვენს ბრაუზერში შესასვლელი ვებგვერდისთვის და 192.168.1.4/ ღირებულება სენსორის კითხვის ვებგვერდზე

// სტატიკური Ip AP– სთვის

IP მისამართი # ap_local_IP (192, 168, 1, 4);

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

IPAddress ap_subnet (255, 255, 255, 0); // ssid და AP ადგილობრივი WiFi STA რეჟიმში

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

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

// ssid და pass for AP

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

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

ESP8266WebServer სერვერი (80);

ბათილად დაყენება {

server.on ("/", onHandleDataRoot);

server.on ("/მნიშვნელობა", 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. გათიშვა ();

ლოგიკური სტატუსი = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

თუ (სტატუსი == ჭეშმარიტი) {

Serial.print ("რბილი დაყენება-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 += "& field1 ="; postStr += სიმებიანი (ტენიანი); postStr += "& field2 ="; postStr += სიმებიანი (tempC); postStr += "& field3 ="; postStr += სიმებიანი (tempF); postStr += "\ r / n / r / n"; wifiClient.print ("POST /განახლება HTTP /1.1 / n"); wifiClient.print ("მასპინძელი: api.thingspeak.com / n"); wifiClient.print ("კავშირი: დახურვა / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:"+apiKey+"\ n"); wifiClient.print ("შინაარსი-ტიპი: განცხადება/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 ინსტრუქციის სახელმძღვანელო
  • მავთულის არდუინო
  • NCD.io

გირჩევთ: