Mundarija:

Esp8266 yordamida ob -havo veb -ilovasi: 7 qadam
Esp8266 yordamida ob -havo veb -ilovasi: 7 qadam

Video: Esp8266 yordamida ob -havo veb -ilovasi: 7 qadam

Video: Esp8266 yordamida ob -havo veb -ilovasi: 7 qadam
Video: Основные ошибки при возведении перегородок из газобетона #5 2024, Noyabr
Anonim
Esp8266 yordamida ob -havo veb -ilovasi
Esp8266 yordamida ob -havo veb -ilovasi

SHT 31 - Sensirion tomonidan ishlab chiqarilgan harorat va namlik sensori. SHT31 ± 2% RH atrofida yuqori aniqlik darajasini ta'minlaydi. Uning namlik diapazoni 0 dan 100% gacha, harorat oralig'i -40 dan 125 ° C gacha. Sensorning 8 soniya javob berish vaqti bilan bu ancha ishonchli va tezroq. Uning funksionalligi signallarni qayta ishlashning yaxshilanishi va I2C muvofiqligini o'z ichiga oladi. U turli xil ish rejimlariga ega, bu esa energiyani tejash imkonini beradi.

Ushbu qo'llanmada biz SHT 31 -ni Adafruit Huzzah taxtasi bilan bog'ladik. Harorat va namlik qiymatlarini o'qish uchun biz ESP8266 I2C qalqonidan foydalanganmiz. Ushbu adapter barcha pinlarni foydalanuvchiga kira oladi va foydalanuvchilarga qulay I2C muhitini taklif qiladi.

1 -qadam: Uskuna kerak

Uskuna kerak
Uskuna kerak
Uskuna kerak
Uskuna kerak
Uskuna kerak
Uskuna kerak

Ushbu vazifani bajarish uchun ishlatiladigan uskunalar:

1. SHT31

2. Adafruit Huzzah ESP8266

3. ESP8266 I2C adapteri

4. I2C kabeli

2 -qadam: Uskuna ulanishlari

Uskuna ulanishlari
Uskuna ulanishlari
Uskuna ulanishlari
Uskuna ulanishlari

Bu qadam apparat ulash qo'llanmasini o'z ichiga oladi. Ushbu bo'lim asosan sensor va ESP8266 o'rtasida zarur bo'lgan simi ulanishlarini tushuntiradi. Ulanishlar quyidagicha.

  1. SHT31 I2C ustida ishlaydi. Yuqoridagi rasm ESP8266 va SHT31 moduli o'rtasidagi aloqani ko'rsatadi. Buning uchun biz I2C kabelidan foydalanamiz yoki 4 F dan F gacha o'tish simlaridan foydalanishimiz mumkin.
  2. bitta sim Vcc uchun, ikkinchisi GND uchun, ikkinchisi esa SDA va SCL uchun mos keladi.
  3. I2C adapteriga ko'ra, ESP8266 kartasining pin2 va pin 14 mos ravishda SDA va SCL sifatida ishlatiladi.

3 -qadam: Vazifalarni rejalashtirish kodi

Ushbu qo'llanmada biz uchta operatsiyani bajaramiz

  • I2C protokoli yordamida SHT11 ma'lumotlarini o'qing
  • veb -serverni joylashtiring va sensorning o'qilishini veb -sahifaga joylashtiring
  • sensor o'qilishini ThingSpeak API -ga joylashtiring

Bunga erishish uchun biz TaskScheduler kutubxonasidan foydalanmoqdamiz. Biz uch xil nazorat operatsiyalari bilan bog'liq uch xil vazifani rejalashtirdik. bu quyidagicha amalga oshiriladi

  • Vazifa 1 sensor qiymatini o'qish uchun mo'ljallangan, bu vazifa 10 soniya tugashiga qadar 1 soniya davom etadi.
  • Vazifa 1 tugashi bilan Vazifa 2 yoqilgan va Vazifa 1 o'chirilgan.
  • Biz ushbu qayta qo'ng'iroqda APga ulanamiz, STA va AP o'rtasidagi almashinuvga e'tibor berish uchun ikkita mantiqiy o'zgaruvchi olinadi.
  • 2 -topshiriqda biz 192.168.1.4 da veb -serverni joylashtiramiz. Bu vazifa har 5 sekundda, 50 soniya tugashiga qadar ishlaydi
  • Vazifa 2 tugashi bilan vazifa 3 yoqilgan va vazifa 2 o'chirilgan.
  • Biz ushbu qayta qo'ng'iroqda STA (mahalliy IP) ga ulanamiz
  • 3 -topshiriqda biz sensorning o'qilishini bulutli ThingSpeak API -ga joylashtiramiz
  • Vazifa 3 har besh soniyada, ya'ni 50 sekundgacha tugaydi
  • Vazifa 3 tugashi bilan Vazifa 1 yana yoqiladi va Vazifa 3 o'chiriladi.
  • Qayta qo'ng'iroq qilinmasa yoki qurilma ishlamasa, u "Light Sleep" rejimiga o'tadi va shu bilan quvvatni tejaydi.

Rejalashtiruvchi ts;

// i2c uchun vazifalar, veb -serverni joylashtirish va narsalar haqida gapirish

TI2C vazifasi (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable); TAP vazifasi (5*TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL, & taskAPDisable); TWiFi vazifasi (5* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable); // tI2C.setTimeout (10 * TASK_SECOND) vazifalari uchun tanaffus; tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // I2C vazifasini yoqish tI2C.enable ();

4 -qadam: Harorat va namlik qiymatlarini o'qish kodi

Biz harorat va namlik qiymatlarini o'qish uchun Wire.h kutubxonasidan foydalanamiz. Bu kutubxona sensor va asosiy qurilma o'rtasida i2c aloqasini osonlashtiradi. 0x44 - SHT31 uchun I2C manzili.

SHT31 boshqa rejimda ishlaydi. Buning uchun ma'lumotlar jadvaliga murojaat qilishingiz mumkin.

Biz bir martalik ish uchun mos ravishda MSB va LSB sifatida 0x2C va 0x06 dan foydalanamiz.

// I2C vazifasini qayta chaqirish bekor qilingan vazifaI2CCallback ()

{Serial.println ("taskI2CStarted"); imzosiz int root [6]; // uzatishni 0x44 dan boshlang; Wire.beginTransmission (Addr); // yuqori takrorlanishi mumkin bo'lgan bitta o'q uzatish uchun biz 0x2C (MSB) va 0x06 (LSB) Wire.write (0x2C) dan foydalanamiz; Wire.write (0x06); // uzatishni tugatish Wire.endTransmission (); // baytlarni 0x44 Wire.beginTransmission (Addr) dan so'rash; Wire.endTransmission (); Wire.requestFrom (Addr, 6); if (Wire.available () == 6) {// ma'lumotlar [0] va ma'lumotlar [1] 16 bitli haroratni o'z ichiga oladi. root [0] = Wire.read (); root [1] = Wire.read (); // ma'lumotlar [2] 8 bit CRC ildizini o'z ichiga oladi [2] = Wire.read (); // ma'lumotlar [3] va ma'lumotlar [4] 16 bit namlik ildizini o'z ichiga oladi [3] = Wire.read (); root [4] = Wire.read (); // ma'lumotlar [5] 8 bitli CRC ildizidan iborat [5] = Wire.read (); } int temp = (ildiz [0] * 256) + ildiz [1]; // MSBni 8 bitga siljitish LSB float cTemp = -45.0 + (175.0 * temp /65535.0) qo'shing; float fTemp = (cTemp * 1.8) + 32.0; // MSBni 8 bitga siljitish, LSB -ni to'liq aniqlik bilan ajratish va namlik uchun foiz * 100 = (100.0 * ((ildiz [3] * 256.0) + ildiz [4])) /65535.0;

tempC = cTemp;

tempF = fTemp; nam = namlik; Serial.print ("S harorati: / t"); Serial.println (String (cTemp, 1)); Serial.print ("F harorati: / t"); Serial.println (String (fTemp, 1)); Serial.print ("Namlik: / t"); Serial.println (String (namlik, 1)); }

5 -qadam: Veb -serverni joylashtirish kodi

Veb -serverni joylashtirish kodi
Veb -serverni joylashtirish kodi
Veb -serverni joylashtirish kodi
Veb -serverni joylashtirish kodi

Biz qurilmamizdan statik IP -da veb -serverni joylashtirdik.

  • ESP8266WebServer kutubxonasi veb -serverni joylashtirish uchun ishlatiladi
  • Birinchidan, biz statik IP -ni yaratish uchun IP -manzilni, shlyuzni va pastki tarmoq niqobini e'lon qilishimiz kerak
  • Endi kirish nuqtangiz uchun ssid va parolni e'lon qiling.
  • har qanday STA qurilmasidan kirish nuqtasiga ulaning
  • serverni 80 -portda joylashtiring, bu Internet aloqasi protokoli uchun standart port, gipermatn o'tkazish protokoli (HTTP).
  • Veb -sahifa uchun brauzeringizga 192.168.1.4 va veb -sahifani sensori o'qish uchun 192.168.1.4/Value kiriting.

// AP uchun statik IP

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

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

IPAddress ap_subnet (255, 255, 255, 0); // STA rejimida mahalliy WiFi uchun ssid va AP.

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

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

// ssid va AP uchun o'tish

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

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

ESP8266WebServer serveri (80);

bekor sozlash {

server.on ("/", onHandleDataRoot);

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

server.onNotFound (onHandleNotFound);

}

void taskAPCallback () {

Serial.println ("taskAP boshlandi");

server.handleClient ();

}

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

void onHandleDataFeed () {

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

void onHandleNotFound () {

String message = "Fayl topilmadi / n / n";

xabar += "URI:";

xabar += server.uri ();

xabar += "\ nUsul:";

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

xabar += "\ nArgumentlar:";

xabar += server.args ();

xabar += "\ n";

server.send (404, "matnli/oddiy", xabar);}

bo'sh qayta ulanishAPWiFi () {

WiFi rejimi (WIFI_AP_STA);

kechikish (100);

WiFi.disconnect ();

mantiqiy holat = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

agar (status == rost) {

Serial.print ("Soft-AP sozlanmoqda …");

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

agar (ap == rost) {

Serial.print ("ulangan: / t");

// IPAddress myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

server.begin ();

}

}

6 -qadam: Ma'lumotlarni gapirish uchun joylashtirish kodi

Gapirishga ma'lumot yuborish kodi
Gapirishga ma'lumot yuborish kodi
Gapirishga ma'lumot yuborish kodi
Gapirishga ma'lumot yuborish kodi
Gapirishga ma'lumot yuborish kodi
Gapirishga ma'lumot yuborish kodi
Gapirishga ma'lumot yuborish kodi
Gapirishga ma'lumot yuborish kodi

Bu erda biz sensor o'qilishini Thing Speak -ga joylashtiramiz. Ushbu vazifani bajarish uchun quyidagi qadamlar kerak:

  • Gapirganda o'z hisobingizni yarating
  • Sensor ma'lumotlarini saqlash uchun kanallar va maydonlarni yarating
  • biz GSP va POST so'rovlarini api-ga ishlatib, ma'lumotlarni ESP-dan thingSpeak-ga olishimiz va joylashtirishimiz mumkin.
  • ma'lumotlarni ThingSpeak -ga quyidagicha joylashtirishimiz mumkin

void taskWiFiCallback () {

WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr += "& maydon1 ="; postStr += String (nam); postStr += "& maydon2 ="; postStr += String (tempC); postStr += "& field3 ="; postStr += String (tempF); postStr += "\ r / n / r / n"; wifiClient.print ("POST /yangilash HTTP /1.1 / n"); wifiClient.print ("Xost: api.thingspeak.com / n"); wifiClient.print ("Ulanish: yopish / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:"+apiKey+"\ n"); wifiClient.print ("Kontent turi: application/x-www-form-urlencoded / n"); wifiClient.print ("Kontent-uzunlik:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }

7 -qadam: Umumiy kod

Umumiy kod mening github omborimda mavjud

Kreditlar:

  • Arduino JSON: ArduinoJson
  • ESP826WebServer
  • Vazifalarni rejalashtiruvchi
  • SHT 31
  • I2C skanerlash
  • HIH6130 ko'rsatmalari bo'yicha qo'llanma
  • Arduino simlari
  • NCD.io

Tavsiya: