Isi kandungan:

Aplikasi Web Cuaca Menggunakan Esp8266: 7 Langkah
Aplikasi Web Cuaca Menggunakan Esp8266: 7 Langkah

Video: Aplikasi Web Cuaca Menggunakan Esp8266: 7 Langkah

Video: Aplikasi Web Cuaca Menggunakan Esp8266: 7 Langkah
Video: Monitor Cuaca di NodeMCU ESP8266 dengan JSON API | Tutorial Pemrograman Arduino dan IoT 2024, Mungkin
Anonim
Aplikasi Web Cuaca Menggunakan Esp8266
Aplikasi Web Cuaca Menggunakan Esp8266

SHT 31 adalah Sensor Suhu dan Kelembapan yang dibuat oleh Sensirion. SHT31 memberikan tahap ketepatan yang tinggi sekitar ± 2% RH. Julat kelembapannya antara 0 hingga 100% dan julat suhu antara -40 hingga 125 ° C. Ia jauh lebih dipercayai dan pantas dengan masa tindak balas Sensor 8 saat. Fungsinya merangkumi pemprosesan isyarat yang dipertingkatkan dan keserasian I2C. Ia mempunyai mod operasi yang berbeza yang menjadikannya cekap tenaga.

Dalam tutorial ini, kami telah menghubungkan SHT 31 dengan papan Adafruit Huzzah. Untuk membaca nilai Suhu dan Kelembapan kami telah menggunakan pelindung ESP8266 I2C. Penyesuai ini menjadikan semua pin dapat diakses oleh pengguna dan menawarkan persekitaran I2C yang mesra pengguna.

Langkah 1: Perkakasan Diperlukan

Diperlukan Perkakasan
Diperlukan Perkakasan
Diperlukan Perkakasan
Diperlukan Perkakasan
Diperlukan Perkakasan
Diperlukan Perkakasan

Perkakasan yang digunakan untuk menyelesaikan tugas ini:

1. SHT31

2. Adafruit Huzzah ESP8266

3. Penyesuai ESP8266 I2C

4. Kabel I2C

Langkah 2: Sambungan Perkakasan

Sambungan Perkakasan
Sambungan Perkakasan
Sambungan Perkakasan
Sambungan Perkakasan

Langkah ini merangkumi panduan penyambungan perkakasan. Bahagian ini pada dasarnya menerangkan sambungan pendawaian yang diperlukan antara sensor dan ESP8266. Sambungannya adalah seperti berikut.

  1. SHT31 berfungsi di atas I2C. Gambar di atas menunjukkan hubungan antara modul ESP8266 dan SHT31. Kami menggunakan kabel I2C untuk itu sama ada kami boleh menggunakan wayar jumper 4 F hingga F.
  2. satu wayar digunakan untuk Vcc, wayar kedua untuk GND dan dua lain untuk SDA dan SCL masing-masing.
  3. Menurut penyesuai I2C pin2 dan pin 14 dari papan ESP8266 masing-masing digunakan sebagai SDA dan SCL

Langkah 3: Kod Penjadualan Tugas

Dalam tutorial ini, kami melakukan tiga operasi

  • Baca data dari SHT11 menggunakan protokol I2C
  • hos pelayan web dan hantar bacaan sensor ke laman web
  • siarkan bacaan sensor ke ThingSpeak API

Untuk mencapai ini, kami menggunakan perpustakaan TaskScheduler. Kami telah menjadualkan tiga tugas berbeza yang merujuk kepada tiga operasi kawalan yang berbeza. ini dilakukan seperti berikut

  • Tugas 1 adalah untuk membaca nilai sensor tugas ini berjalan selama 1 saat sehingga mencapai masa tamat 10 saat.
  • Apabila Task1 mencapai masa tamat, Task 2 diaktifkan dan Task1 dilumpuhkan.
  • Kami menyambung ke AP dalam panggilan balik ini, Dua pemboleh ubah boolean diambil untuk menjaga pertukaran antara STA dan AP
  • Dalam Tugasan 2 kami menghoskan pelayan web di 192.168.1.4. Tugas ini dijalankan setiap 5 saat sehingga masa tamat adalah 50 saat
  • Apabila Task 2 mencapai timeout, Task 3 diaktifkan dan Task2 dilumpuhkan.
  • Kami menyambung ke STA (IP tempatan) dalam panggilan balik ini
  • Dalam Tugasan 3 kami menyiarkan bacaan sensor ke cloud ThingSpeak API
  • Tugasan 3 dijalankan setiap lima saat sehingga tamat waktunya iaitu 50 saat
  • Apabila Task3 mencapai masa tamat, Task 1 diaktifkan lagi dan Task3 dilumpuhkan.
  • Apabila panggilan balik tidak dipanggil atau peranti dalam keadaan tidak aktif, ia akan menuju ke Tidur Tidur sehingga menjimatkan tenaga.

Penjadual ts;

// Tugas untuk i2c, hosting pelayan web dan hantar di thingspeak

TI2C Tugas (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDDisable); TAP tugas (5 * TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL, & taskAPDisable); TWiFi Tugas (5 * TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable); // timeout untuk tugas tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // aktifkan tugas I2C tI2C. aktif ();

Langkah 4: Kod untuk Membaca Nilai Suhu dan Kelembapan

Kami menggunakan perpustakaan Wire.h untuk membaca nilai suhu dan kelembapan. Perpustakaan ini memudahkan komunikasi i2c antara sensor dan peranti induk. 0x44 adalah alamat I2C untuk SHT31.

SHT31 beroperasi dalam mod operasi yang berbeza. Anda boleh merujuk lembaran data untuk itu.

Kami masing-masing menggunakan 0x2C dan 0x06 sebagai MSB dan LSB untuk operasi tembakan tunggal.

// Callback tugas I2C batal taskI2CCallback ()

{Serial.println ("taskI2CStarted"); int intan yang tidak ditandatangani [6]; // mulakan penghantaran dari 0x44; Wire.beginTransmission (Addr); // untuk transmisi satu tembakan dengan kebolehulangan yang tinggi kami menggunakan 0x2C (MSB) dan 0x06 (LSB) Wire.write (0x2C); Wire.write (0x06); // penghantaran akhir Wire.endTransmission (); // permintaan bait dari 0x44 Wire.beginTransmission (Addr); Wire.endTransmission (); Wire.requestFrom (Addr, 6); jika (Wire.available () == 6) {// data [0] dan data [1] mengandungi suhu 16 bit. root [0] = Wire.read (); root [1] = Wire.read (); // data [2] mengandungi 8 bit CRC root [2] = Wire.read (); // data [3] dan data [4] mengandungi 16 bit akar kelembapan [3] = Wire.read (); root [4] = Wire.read (); // data [5] terdiri daripada akar CRC 8 bit [5] = Wire.read (); } int temp = (root [0] * 256) + root [1]; // shift MSB sebanyak 8 bit tambahkan LSB float cTemp = -45.0 + (175.0 * temp / 65535.0); apungan fTemp = (cTemp * 1.8) + 32.0; // ubah MSB sebanyak 8 bit tambahkan LSB padanya dibahagi dengan resolusi penuh dan * 100 untuk peratusan kelembapan apungan = (100.0 * ((root [3] * 256.0) + root [4])) / 65535.0;

tempC = cTemp;

tempF = fTemp; lembap = kelembapan; Serial.print ("Suhu dalam C: / t"); Serial.println (Rentetan (cTemp, 1)); Serial.print ("Suhu dalam F: / t"); Serial.println (Rentetan (fTemp, 1)); Serial.print ("Kelembapan: / t"); Serial.println (Rentetan (kelembapan, 1)); }

Langkah 5: Kod untuk Menjamu Pelayan Web

Kod untuk Menjamu Pelayan Web
Kod untuk Menjamu Pelayan Web
Kod untuk Menjamu Pelayan Web
Kod untuk Menjamu Pelayan Web

Kami telah menghoskan pelayan web dari peranti kami pada IP statik.

  • Perpustakaan ESP8266WebServer digunakan untuk menjadi tuan rumah pelayan web
  • Mula-mula kita perlu menyatakan alamat IP, Gateway dan subnet mask untuk membuat IP statik kita
  • Sekarang nyatakan ssid dan kata laluan untuk titik Akses anda.
  • sambungkan ke titik Akses dari mana-mana peranti STA
  • hos pelayan pada port 80 yang merupakan port default untuk protokol komunikasi internet, Hypertext Transfer Protocol (HTTP)
  • masukkan 192.168.1.4 pada penyemak imbas web anda untuk halaman web pengenalan dan 192.168.1.4/Nilai untuk laman web bacaan sensor

// statik Ip untuk AP

Alamat IP ap_local_IP (192, 168, 1, 4);

Alamat IP ap_gateway (192, 168, 1, 254);

IPAddress ap_subnet (255, 255, 255, 0); // ssid dan AP untuk WiFi tempatan dalam mod STA

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

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

// ssid dan lulus untuk AP

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

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

Pelayan ESP8266WebServer (80);

batal persediaan {

pelayan.on ("/", onHandleDataRoot);

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

pelayan.onNotFound (onHandleNotFound);

}

membatalkan tugasAPCallback () {

Serial.println ("taskAP dimulakan");

pelayan.handleClient ();

}

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

batal onHandleDataFeed () {

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

batal onHandleNotFound () {

Mesej rentetan = "Fail Tidak Dijumpai / n / n";

mesej + = "URI:";

mesej + = pelayan.uri ();

mesej + = "\ n Kaedah:";

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

mesej + = "\ nArgumen:";

mesej + = pelayan.args ();

mesej + = "\ n";

server.send (404, "teks / biasa", mesej);}

batal sambung semulaAPWiFi () {

WiFi.mode (WIFI_AP_STA);

kelewatan (100);

WiFi.disconnect ();

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

jika (status == benar) {

Serial.print ("Menetapkan soft-AP …");

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

jika (ap == benar) {

Serial.print ("disambungkan ke: / t");

// IPAddress myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

pelayan.begin ();

}

}

Langkah 6: Kod untuk Menghantar Data ke Perkara Yang Bicara

Kod untuk Menghantar Data ke Perkara Yang Bercakap
Kod untuk Menghantar Data ke Perkara Yang Bercakap
Kod untuk Menghantar Data ke Perkara Yang Bercakap
Kod untuk Menghantar Data ke Perkara Yang Bercakap
Kod untuk Menghantar Data ke Perkara Yang Bercakap
Kod untuk Menghantar Data ke Perkara Yang Bercakap
Kod untuk Menghantar Data ke Perkara Yang Bercakap
Kod untuk Menghantar Data ke Perkara Yang Bercakap

Di sini kami menyiarkan bacaan sensor ke Thing Speak. langkah-langkah berikut diperlukan untuk menyelesaikan tugas ini-

  • Buat akaun anda untuk bercakap
  • Buat saluran dan medan untuk menyimpan data sensor anda
  • kita boleh mendapatkan dan menghantar data dari ESP ke thingSpeak dan sebaliknya menggunakan permintaan GET dan POST ke api.
  • kami boleh menghantar data kami ke ThingSpeak seperti berikut

membatalkan tugasWiFiCallback () {

WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr + = "& bidang1 ="; postStr + = Rentetan (lembap); postStr + = "& bidang2 ="; postStr + = Rentetan (tempC); postStr + = "& bidang3 ="; postStr + = Rentetan (tempF); postStr + = "\ r / n / r / n"; wifiClient.print ("POST / kemas kini HTTP / 1.1 / n"); wifiClient.print ("Host: api.thingspeak.com / n"); wifiClient.print ("Sambungan: tutup / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); wifiClient.print ("Content-Type: application / x-www-form-urlencoded / n"); wifiClient.print ("Panjang Kandungan:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }

Langkah 7: Keseluruhan Kod

Kod keseluruhan boleh didapati di repositori github saya

Kredit:

  • Arduino JSON: ArduinoJson
  • Pelayan ESP826Web
  • Penjadual tugasan
  • SHT 31
  • Imbasan I2C
  • Tutorial instruksional HIH6130
  • Wire Arduino
  • NCD.io

Disyorkan: