Mündəricat:

Esp8266 istifadə edərək Hava Veb Tətbiqi: 7 Adım
Esp8266 istifadə edərək Hava Veb Tətbiqi: 7 Adım

Video: Esp8266 istifadə edərək Hava Veb Tətbiqi: 7 Adım

Video: Esp8266 istifadə edərək Hava Veb Tətbiqi: 7 Adım
Video: NodeMCU ESP8266 WiFi İnkişaf lövhəsinə HTTP Müştəri nümunəsi ilə giriş 2024, Noyabr
Anonim
Esp8266 istifadə edərək Hava Veb Tətbiqi
Esp8266 istifadə edərək Hava Veb Tətbiqi

SHT 31, Sensirion tərəfindən hazırlanan İstilik və Nəmlik Sensorlarıdır. SHT31, ± 2% RH ətrafında yüksək dəqiqlik təmin edir. Rütubət aralığı 0 ilə 100% arasında, temperatur aralığı -40 ilə 125 ° C arasındadır. 8 saniyəlik Sensor cavab müddəti ilə daha etibarlı və sürətlidir. Onun funksionallığı inkişaf etmiş siqnal emalı və I2C uyğunluğunu ehtiva edir. Enerjiyə qənaət edən fərqli iş rejimlərinə malikdir.

Bu təlimatda, Adafruit Huzzah lövhəsi ilə SHT 31 ilə əlaqə qurduq. Temperatur və Nəmlik dəyərlərini oxumaq üçün ESP8266 I2C qalxanından istifadə etdik. Bu adapter, bütün sancaqları istifadəçi üçün əlçatan edir və istifadəçi dostu I2C mühiti təklif edir.

Addım 1: Avadanlıq tələb olunur

Avadanlıq tələb olunur
Avadanlıq tələb olunur
Avadanlıq tələb olunur
Avadanlıq tələb olunur
Avadanlıq tələb olunur
Avadanlıq tələb olunur

Bu vəzifəni yerinə yetirmək üçün istifadə olunan avadanlıq:

1. SHT31

2. Adafruit Huzzah ESP8266

3. ESP8266 I2C adapteri

4. I2C Kabeli

Addım 2: Avadanlıq Bağlantıları

Avadanlıq Əlaqələri
Avadanlıq Əlaqələri
Avadanlıq Əlaqələri
Avadanlıq Əlaqələri

Bu addıma aparat bağlama bələdçisi daxildir. Bu hissə əsasən sensorla ESP8266 arasında lazım olan naqillərin əlaqələrini izah edir. Bağlantılar aşağıdakı kimidir.

  1. SHT31 I2C üzərində işləyir. Yuxarıdakı şəkil ESP8266 və SHT31 modulu arasındakı əlaqəni göstərir. Bunun üçün I2C kabelindən istifadə edirik və ya 4 F -dən F -yə keçid tellərindən istifadə edə bilərik.
  2. bir tel Vcc üçün, ikinci tel GND üçün və digər ikisi SDA və SCL üçün istifadə olunur.
  3. I2C adapterinə görə bir ESP8266 lövhəsinin pin2 və pin 14 sırasıyla SDA və SCL olaraq istifadə olunur

Addım 3: Tapşırıq Planlaması üçün Kod

Bu təlimatda üç əməliyyatı yerinə yetiririk

  • I2C protokolundan istifadə edərək SHT11 məlumatlarını oxuyun
  • veb serveri yerləşdirin və sensorun oxunmasını veb səhifəyə göndərin
  • sensor oxunuşlarını ThingSpeak API -yə göndərin

Bunu etmək üçün TaskScheduler kitabxanasından istifadə edirik. Üç fərqli nəzarət əməliyyatına əsaslanan üç fərqli vəzifə təyin etdik. bu aşağıdakı kimi aparılır

  • Tapşırıq 1, sensorun dəyərini oxumaq üçündür, bu tapşırıq 10 saniyəlik fasiləyə çatana qədər 1 saniyə ərzində işləyir.
  • Vəzifə 1 vaxt aşımına çatanda Task 2 aktivləşdirilir və Task1 deaktiv edilir.
  • Bu geri çağırışda AP -yə qoşuluruq, STA və AP arasında keçid üçün iki boolean dəyişən götürülür.
  • Tapşırıq 2 -də 192.168.1.4 ünvanında bir veb serverə ev sahibliyi edirik. Bu vəzifə 50 saniyəlik fasiləyə çatana qədər hər 5 saniyə ərzində işləyir
  • Tapşırıq 2 zaman aşımına çatanda Task 3 aktivdir və Task2 deaktiv edilir.
  • Bu geri çağırmada STA -ya (yerli IP) qoşuluruq
  • Tapşırıq 3 -də sensorun oxunmasını bulud ThingSpeak API -yə göndəririk
  • Tapşırıq 3, hər saniyədə 50 saniyəyə qədər davam edir
  • Task3 zaman aşımına çatanda Task 1 yenidən aktiv edilir və Task3 deaktiv edilir.
  • Heç bir zəng edilmədikdə və ya cihaz boş qaldıqda, Yüngül Yuxuya gedir və beləliklə enerjiyə qənaət edir.

Planlaşdırıcı ts;

// i2c üçün tapşırıqlar, veb serveri yerləşdirmək və şeyi danışmaqda yazmaq

Tapşırıq tI2C (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable); Tapşırıq tAP (5*TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL, & taskAPDisable); Tapşırıq tWiFi (5* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable); // tapşırıqlar üçün zaman aşımı tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // I2C tapşırığını aktivləşdir tI2C.enable ();

Addım 4: İstilik və Nəmlik Dəyərlərini Oxumaq üçün Kod

İstilik və rütubət dəyərlərini oxumaq üçün Wire.h kitabxanasından istifadə edirik. Bu kitabxana, sensor və əsas cihaz arasında i2c əlaqəsini asanlaşdırır. 0x44, SHT31 üçün I2C ünvanıdır.

SHT31 fərqli bir iş rejimində işləyir. Bunun üçün məlumat cədvəlinə müraciət edə bilərsiniz.

Bir vuruş əməliyyatı üçün sırasıyla MSB və LSB olaraq 0x2C və 0x06 istifadə edirik.

// I2C tapşırığının geri çağırılması void taskI2CCallback ()

{Serial.println ("taskI2CStarted"); imzasız int kök [6]; // 0x44 -dən ötürməyə başlayın; Wire.beginTransmission (Addr); // yüksək təkrarlanabilirliyə malik bir vuruş ötürülməsi üçün 0x2C (MSB) və 0x06 (LSB) Wire.write (0x2C) istifadə edirik; Wire.write (0x06); // son ötürmə Wire.endTransmission (); // 0x44 Wire.beginTransmission (Addr) -dən bayt istəyin; Wire.endTransmission (); Wire.requestFrom (Addr, 6); if (Wire.available () == 6) {// data [0] və data [1] 16 bit temperaturdan ibarətdir. kök [0] = Wire.read (); kök [1] = Wire.read (); // data [2] 8 bit CRC kökü ehtiva edir [2] = Wire.read (); // data [3] və data [4] 16 bit nəmlik kök [3] = Wire.read (); kök [4] = Wire.read (); // data [5] 8 bit CRC kökündən ibarətdir [5] = Wire.read (); } int temp = (kök [0] * 256) + kök [1]; // MSB -ni 8 bit dəyişdirərək LSB float cTemp = -45.0 + (175.0 * temp /65535.0) əlavə edin; float fTemp = (cTemp * 1.8) + 32.0; // MSB -ni 8 bit sürüşdürün, tam qətnamə ilə LSB əlavə edin və yüzmə nisbətinə görə * 100 = (100.0 * ((kök [3] * 256.0) + kök [4])) /65535.0;

tempC = cTemp;

tempF = fTemp; nəm = rütubət; Serial.print ("C -də temperatur: / t"); Serial.println (String (cTemp, 1)); Serial.print ("F -də temperatur: / t"); Serial.println (String (fTemp, 1)); Serial.print ("Rütubət: / t"); Serial.println (String (rütubət, 1)); }

Addım 5: Veb serveri yerləşdirmək üçün kod

Veb serveri yerləşdirmək üçün kod
Veb serveri yerləşdirmək üçün kod
Veb serveri yerləşdirmək üçün kod
Veb serveri yerləşdirmək üçün kod

Statik bir IP üzərində cihazımızdan bir veb server yerləşdirdik.

  • ESP8266WebServer kitabxanası veb serveri yerləşdirmək üçün istifadə olunur
  • Əvvəlcə statik IP -ni yaratmaq üçün IP ünvanını, Ağ Geçidini və alt şəbəkə maskasını elan etməliyik
  • İndi giriş nöqtəniz üçün ssid və parol elan edin.
  • İstənilən STA cihazından Giriş nöqtəsinə qoşulun
  • serveri İnternet əlaqəsi protokolu üçün standart bir port olan Hypertext Transfer Protocol (HTTP) olan 80 portunda yerləşdirin.
  • Giriş səhifəsi üçün veb brauzerinizə 192.168.1.4 və veb səhifəsini oxuyan sensor üçün 192.168.1.4/Value daxil edin

// AP üçün 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 rejimində yerli WiFi üçün ssid və AP

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

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

// ssid və AP üçün keçid

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

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

ESP8266WebServer serveri (80);

boş quraşdırma {

server.on ("/", onHandleDataRoot);

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

server.onNotFound (onHandleNotFound);

}

void taskAPCallback () {

Serial.println ("taskAP başladı");

server.handleClient ();

}

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

void onHandleDataFeed () {

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

void onHandleNotFound () {

String mesajı = "Fayl tapılmadı / n / n";

mesaj += "URI:";

mesaj += server.uri ();

mesaj += "\ nMetod:";

mesaj += (server.method () == HTTP_GET)? "AL": "POST";

mesaj += "\ nArqumentlər:";

mesaj += server.args ();

mesaj += "\ n";

server.send (404, "mətn/düz", mesaj);}

etibarsız yenidən bağlanmaAPWiFi () {

WiFi rejimi (WIFI_AP_STA);

gecikmə (100);

WiFi.disconnect ();

boolean statusu = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

əgər (status == doğru) {

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

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

əgər (ap == doğru) {

Serial.print ("bağlı: / t");

// IPAddress myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

server.begin ();

}

}

Addım 6: Şeyi Danışmağa Məlumat Göndərmək üçün Kod

Danışmağa Məlumat Göndərmək üçün Kod
Danışmağa Məlumat Göndərmək üçün Kod
Danışmağa Məlumat Göndərmək üçün Kod
Danışmağa Məlumat Göndərmək üçün Kod
Danışmağa Məlumat Göndərmək üçün Kod
Danışmağa Məlumat Göndərmək üçün Kod
Danışmağa Məlumat Göndərmək üçün Kod
Danışmağa Məlumat Göndərmək üçün Kod

Burada Thing Speak -a sensor oxunuşlarını yerləşdiririk. Bu işi başa çatdırmaq üçün aşağıdakı addımlar atılmalıdır.

  • Danışarkən öz hesabınızı yaradın
  • Sensor məlumatlarınızı saxlamaq üçün kanallar və sahələr yaradın
  • api-yə GET və POST istəklərindən istifadə edərək məlumatları ESP-dən thingSpeak-ə ala və göndərə bilərik.
  • ThingSpeak -a məlumatlarımızı aşağıdakı kimi yerləşdirə bilərik

void taskWiFiCallback () {

WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr += "& field1 ="; postStr += String (nəmli); postStr += "& field2 ="; postStr += String (tempC); postStr += "& field3 ="; postStr += String (tempF); postStr += "\ r / n / r / n"; wifiClient.print ("POST /yeniləmə HTTP /1.1 / n"); wifiClient.print ("Host: api.thingspeak.com / n"); wifiClient.print ("Bağlantı: yaxın / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:"+apiKey+"\ n"); wifiClient.print ("Content-Type: application/x-www-form-urlencoded / n"); wifiClient.print ("Məzmun-Uzunluq:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }

Addım 7: Ümumi Kod

Ümumi kod github depomda mövcuddur

Kreditlər:

  • Arduino JSON: ArduinoJson
  • ESP826WebServer
  • Vəzifə Planlayıcısı
  • SHT 31
  • I2C Tarama
  • HIH6130 göstərişli dərslik
  • Tel Arduino
  • NCD.io

Tövsiyə: