Агуулгын хүснэгт:

Esp8266: 7 алхамыг ашиглан цаг агаарын вэб апп
Esp8266: 7 алхамыг ашиглан цаг агаарын вэб апп

Видео: Esp8266: 7 алхамыг ашиглан цаг агаарын вэб апп

Видео: Esp8266: 7 алхамыг ашиглан цаг агаарын вэб апп
Видео: Arduino Nano, BME280 и SSD1306 OLED-метеостанция 2024, May
Anonim
Esp8266 ашиглан цаг агаарын вэб програм
Esp8266 ашиглан цаг агаарын вэб програм

SHT 31 бол Sensirion -ийн хийсэн температур ба чийгшилийн мэдрэгч юм. 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 -ээс F холбогч утас ашиглаж болно.
  2. нэг утсыг Vcc -д, хоёр дахь утсыг GND болон бусад хоёр утсыг SDA ба SCL -д тус тус ашигладаг.
  3. I2C адаптерийн дагуу ESP8266 хавтангийн pin2 ба pin 14 -ийг SDA ба SCL болгон ашигладаг.

Алхам 3: Ажлын хуваарийн код

Энэхүү гарын авлагад бид гурван үйлдлийг гүйцэтгэж байна

  • I2C протокол ашиглан SHT11 дээрх өгөгдлийг уншина уу
  • вэб серверийг байршуулж, мэдрэгчийн уншилтыг вэб хуудсанд байршуулна уу
  • мэдрэгчийн заалтыг ThingSpeak API -д байршуулах

Үүнийг хийхийн тулд бид TaskScheduler номын санг ашиглаж байна. Бид гурван өөр хяналтын үйл ажиллагаатай холбоотой гурван өөр ажлыг төлөвлөсөн. үүнийг дараах байдлаар хийдэг

  • Даалгавар 1 нь мэдрэгчийн утгыг уншихад зориулагдсан бөгөөд энэ даалгавар 10 секундын хугацаа дуусах хүртэл 1 секундын турш ажиллана.
  • Task1 хугацаа нь дуусахад Task 2 идэвхжиж, Task1 идэвхгүй болно.
  • Бид энэ дуудлагад AP -тэй холбогддог бөгөөд STA ба AP хооронд шилжих асуудлыг шийдэхийн тулд хоёр логик хувьсагчийг авдаг.
  • Даалгавар 2 дээр бид вэб серверийг 192.168.1.4 хаягаар байршуулж байна. Энэ даалгавар нь 50 секунд болох хугацаа дуусах хүртэл 5 секунд тутамд ажиллана
  • Даалгавар 2 хугацаа дуусахад 3 -р даалгавар идэвхжиж, 2 -р ажил идэвхгүй болно.
  • Энэ дуудлагад бид STA (орон нутгийн IP) руу холбогддог
  • Даалгавар 3 -т бид үүл ThingSpeak API дээр мэдрэгчийн уншилтыг байршуулж байна
  • Даалгавар 3 нь 50 секунд тутамд таван секунд тутамд ажиллана
  • Task3 хугацаа дуусахад Task 1 дахин идэвхжиж, Task3 идэвхгүй болно.
  • Дахин дуудлага хийгээгүй эсвэл төхөөрөмж сул зогссон тохиолдолд гэрэл унтах горимд шилждэг тул эрчим хүч хэмнэдэг.

Хуваарьлагч ts;

// i2c -ийн даалгавар, вэб сервер байршуулах, зүйл дээр ярих

TI2C даалгавар (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable); Task 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: Температур ба чийгшлийн утгыг унших код

Бид Wire.h номын санг ашиглан температур, чийгшлийн утгыг уншиж байна. Энэхүү номын сан нь мэдрэгч ба мастер төхөөрөмжийн хооронд i2c холболтыг хөнгөвчилдөг. 0x44 бол SHT31 -ийн I2C хаяг юм.

SHT31 нь өөр өөр горимд ажилладаг. Үүнийг хийхийн тулд та мэдээллийн хуудсыг үзэх боломжтой.

Бид нэг удаагийн үйлдлээр 0x2C ба 0x06 -ийг MSB болон LSB болгон ашиглаж байна.

// I2C даалгаврыг буцааж хүчингүй болгох ажил I2CCallback ()

{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 (); Wire.requestFrom (Addr, 6); if (Wire.available () == 6) {// өгөгдөл [0] ба өгөгдөл [1] нь 16 бит температур агуулдаг. root [0] = Wire.read (); root [1] = Wire.read (); // өгөгдөл [2] нь 8 бит CRC root [2] = Wire.read (); // өгөгдөл [3] ба өгөгдөл [4] нь 16 битийн чийгийн үндсийг агуулдаг [3] = Wire.read (); root [4] = Wire.read (); // өгөгдөл [5] нь 8 битийн CRC root [5] = Wire.read (); } int temp = (root [0] * 256) + root [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 * ((root [3] * 256.0) + root [4])) /65535.0;

tempC = cTemp;

tempF = fTemp; чийглэг = чийгшил; Serial.print ("C дэх температур: / t"); Serial.println (String (cTemp, 1)); Serial.print ("F -ийн температур: / t"); Serial.println (String (fTemp, 1)); Serial.print ("Чийгшил: / t"); Serial.println (String (чийгшил, 1)); }

Алхам 5: Вэб серверийг байршуулах код

Вэб сервер байршуулах код
Вэб сервер байршуулах код
Вэб сервер байршуулах код
Вэб сервер байршуулах код

Бид төхөөрөмжөөсөө статик IP дээр вэб сервер байршуулсан.

  • ESP8266WebServer номын сан нь вэб серверийг байршуулахад ашиглагддаг
  • Эхлээд бид статик IP үүсгэхийн тулд IP хаяг, гарц, дэд сүлжээний маск зарлах хэрэгтэй
  • Одоо хандалтын цэгийнхээ ssid болон нууц үгийг мэдэгдэнэ үү.
  • ямар ч STA төхөөрөмжөөс хандалтын цэг рүү холбогдох
  • серверийг интернет холболтын протоколын үндсэн порт болох 80 порт дээр байрлуулах, гипертекст дамжуулах протокол (HTTP)
  • Вэб хөтөч дээрээ 192.168.1.4, вэб хуудсыг үзэхийн тулд 192.168.1.4/ Мэдрэгч вэб хуудсыг унших үнэ цэнийг оруулна уу.

// AP -ийн статик Ip

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

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

IPAddress ap_subnet (255, 255, 255, 0); // STA горимд орон нутгийн WiFi -д зориулсан ssid ба AP

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 ();

}

хүчингүй onHandleDataRoot () {server.send (200, "text/html", PAGE1); }

хүчингүй onHandleDataFeed () {

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

хүчингүй onHandleNotFound () {

String message = "Файл олдсонгүй / n / n";

message += "URI:";

зурвас += server.uri ();

message += "\ nАрга:";

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

message += "\ nАргументууд:";

зурвас += server.args ();

зурвас += "\ n";

server.send (404, "текст/энгийн", зурвас);}

хоосон дахин холбохAPWiFi () {

WiFi горим (WIFI_AP_STA);

саатал (100);

WiFi.disconnect ();

логик төлөв = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

хэрэв (байдал == үнэн) {

Serial.print ("Soft-AP тохируулж байна …");

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

хэрэв (ap == үнэн) {

Serial.print ("холбогдсон: / t");

// IPAddress myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

server.begin ();

}

}

Алхам 6: Thing Speak -д өгөгдөл оруулах код

Thing Speak -д өгөгдөл оруулах код
Thing Speak -д өгөгдөл оруулах код
Thing Speak -д өгөгдөл оруулах код
Thing Speak -д өгөгдөл оруулах код
Thing Speak -д өгөгдөл оруулах код
Thing Speak -д өгөгдөл оруулах код
Thing Speak -д өгөгдөл оруулах код
Thing Speak -д өгөгдөл оруулах код

Энд бид Thing Speak -д мэдрэгчийн заалтыг оруулж байна. Энэ ажлыг дуусгахын тулд дараах алхмуудыг хийх шаардлагатай байна.

  • Өөрийнхөө дансыг үүсгээрэй
  • Мэдрэгчийнхээ өгөгдлийг хадгалах суваг, талбар үүсгэ
  • бид GSP болон POST хүсэлтийг ашиглан api руу ESP-ээс өгөгдлийг thingSpeak руу авах, байршуулах боломжтой.
  • Бид өөрсдийн мэдээллийг ThingSpeak -д дараах байдлаар оруулах боломжтой

хүчингүй үүрэгWiFiCallback () {

WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr += "& field1 ="; postStr += мөр (чийглэг); postStr += "& field2 ="; postStr += String (tempC); postStr += "& field3 ="; postStr += String (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 ("Агуулгын төрөл: 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 зааварчилгааны заавар
  • Утас Ардуино
  • NCD.io

Зөвлөмж болгож буй: